2012-01-03 2 views
3

의 다항식을 해결, PCA의 원리는 매우 간단하다 :는 PCA : 공분산 행렬의 고유 값을 (를) 찾기 : 만약 내가 제대로 이해하고도 N

  1. 계산 데이터 벡터 '공분산 행렬 C. 행렬 E ** C의 고유 값을 찾는 = 0 -
  2. 는 DET (E *** I C)를 해결.
  3. 행렬 계산 의 고유 벡터 (그 고유 값으로부터).

첫 번째 : 설명이 맞습니까?

SECOND 다음 다항식 DET의 기계 해결 상관 알고리즘 ( C - E *** I) = 0? 이것이 일반 수학 문제 (학위 ** n의 다항식의 근원을 찾는 것)이라는 것을 알고 있습니다. THIRD

:가 C/C++

감사에서 PCA의 간단한 구현이 많이 있습니다.

+0

귀하의 질문에 3 개 중 2 개가이 사이트의 범위를 벗어납니다. 처음 두 질문을 다른 곳으로 물어보고이 질문을 PCA 구현으로 제한하는 것이 좋습니다. –

+0

특성 방정식을 찾는 근사에 의한 고유치를 풀지 마십시오. 귀하의 문제가 커지면 그건 효과가 없습니다. 작업을 위해 설계된 고유 값 해석을 사용하십시오. –

답변

2
  1. 우선 고유 값을 찾으려면 방금 언급 한 방정식을 풀 필요가 없습니다. eigendecomposition of a matrix
  2. 둘째, 공분산 행렬은 대칭이고 양의 준결 정이므로이 행렬에 대한 고유 분해는 singular value decomposition과 같습니다.
  3. 위에서 언급 한 두 가지 분해 모두에 대해 많은 자유롭고 독점적 인 구현이 있습니다 (최첨단 구현은 LAPACK 임).
  4. PCA를 포함하는 많은 라이브러리가 있습니다. 상용 구현이 적합한 경우 FinMath from RTMath 또는 NMath from CenterSpace (둘 다 .NET 용)을 시도 할 수 있습니다. 그렇지 않으면 GSL 또는 다른 라이브러리 (StackOverflow에 숫자 라이브러리의 전체 목록이 포함 된 몇 가지 질문이 있습니다)를 시도해보십시오.
2

Gnu 과학 라이브러리 (gsl)를 살펴볼 수 있습니다. 고유치 찾기 기능을 제공합니다. eigenvalues를 찾는 것은 반복적 인 수치 연산입니다. 즉, 정확하지 않고 비싸다. gsl은 QR 알고리즘을 사용한다고 생각합니다.

관련 문제