1. Dimensionality Reduction
PCA는 데이터의 차원을 줄일 때 사용한다. 위 그림은 2D data를 x1 축을 기준으로 projection한 모습이다. 이 경우, 데이터가 골고루 분산 되지 않는 문제가 있다. PCA의 목적은 projection된 data의 분산 값을 최대화 하는 축을 찾는 것이 목적이다.
2. Principal Component Analysis(PCA)
Data X X X 를 unit vector e ⃗ \vec{e} e 에 projection 했을 때, X e ⃗ X\vec{e} X e 는 projection된 data이며 V a r [ X e ⃗ ] Var[X\vec{e}] V a r [ X e ] 는 projection된 data의 분산 값이다. 그리고 식으로 표현하면 e ⃗ T C e ⃗ \vec{e}^TC\vec{e} e T C e 이다. 아래는 증명 과정이다.
V a r [ X e ⃗ ] = 1 m − 1 ∑ i = 1 m [ X e ⃗ − E ( X e ⃗ ) ] 2 = 1 m − 1 ∑ i = 1 m [ X e ⃗ − E ( X ) e ⃗ ] 2 , ( E ( X ) = 0 ) Var[X\vec{e}]=\cfrac{1}{m-1}\sum\limits_{i=1}^m[X\vec{e}-E(X\vec{e})]^2=\cfrac{1}{m-1}\sum\limits_{i=1}^m[X\vec{e}-E(X)\vec{e}]^2,\ (E(X)=0) V a r [ X e ] = m − 1 1 i = 1 ∑ m [ X e − E ( X e ) ] 2 = m − 1 1 i = 1 ∑ m [ X e − E ( X ) e ] 2 , ( E ( X ) = 0 )
= 1 m − 1 ∑ i = 1 m ( X e ⃗ ) 2 = 1 m − 1 ( X e ⃗ ) T ( X e ⃗ ) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\cfrac{1}{m-1}\sum\limits_{i=1}^m(X\vec{e})^2\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\cfrac{1}{m-1}(X\vec{e})^T(X\vec{e}) = m − 1 1 i = 1 ∑ m ( X e ) 2 = m − 1 1 ( X e ) T ( X e )
= 1 m − 1 e ⃗ T X T X e ⃗ = e ⃗ T ( X T X m − 1 ) e ⃗ , ( X T X m − 1 = C ) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\cfrac{1}{m-1}\vec{e}^TX^TX\vec{e}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\vec{e}^T(\cfrac{X^TX}{m-1})\vec{e},\ (\cfrac{X^TX}{m-1}=C) = m − 1 1 e T X T X e = e T ( m − 1 X T X ) e , ( m − 1 X T X = C )
= e ⃗ T C e ⃗ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\vec{e}^TC\vec{e} = e T C e
그러므로 PCA는 e ⃗ T C e ⃗ \vec{e}^TC\vec{e} e T C e 를 최대로 하는 e ⃗ , ( ∣ ∣ e ⃗ ∣ ∣ 2 = 1 ) \vec{e},\ (||\vec{e}||^2=1) e , ( ∣ ∣ e ∣ ∣ 2 = 1 ) 를 찾는 것이 목적이다.
최적의 e ⃗ \vec{e} e 를 찾기 위해 lagrange multiplier method를 이용한다. 식은 다음과 같다.
L ( e ⃗ , λ ) = e ⃗ T C e ⃗ − λ ( e ⃗ T e ⃗ − 1 ) L(\vec{e},\lambda)=\vec{e}^TC\vec{e}-\lambda(\vec{e}^T\vec{e}-1) L ( e , λ ) = e T C e − λ ( e T e − 1 )
∂ L ∂ e ⃗ = ( C + C T ) e ⃗ − 2 λ e ⃗ \frac{\partial L}{\partial\vec{e}}=(C+C^T)\vec{e}-2\lambda\vec{e} ∂ e ∂ L = ( C + C T ) e − 2 λ e
= 2 C e ⃗ − 2 λ e ⃗ = 0 \ \ \ \ \ \ =2C\vec{e}-2\lambda\vec{e}=0 = 2 C e − 2 λ e = 0
∴ C = e ⃗ λ e ⃗ T \ \ \ \ \ \ \therefore\ C=\vec{e}\lambda\vec{e}^T ∴ C = e λ e T
∴ C e ⃗ = λ e ⃗ \ \ \ \ \ \ \therefore\ C\vec{e}=\lambda\vec{e} ∴ C e = λ e
정리하면 covariance matrix C C C 의 eigen vector와 eigen value를 구하는 문제가 된다.
위 그림에서 빨간색 eigen vector의 eigen value는 λ 1 \lambda_1 λ 1 이며 파란색 eigen vector의 eigen value는 λ 2 \lambda_2 λ 2 이다. Eigen value λ 1 \lambda_1 λ 1 이 더 큰 분산 값을 갖고 있기 때문에 빨간색 eigen vector로 data를 projection 하면 된다.
3. PCA Implementation
Training set
x ( 1 ) , x ( 2 ) , … , x ( i ) , … , x ( m ) , ( x ( i ) = [ x 1 ( i ) , x 2 ( i ) , … , x j ( i ) , … , x n ( i ) ] ) x^{(1)},\ x^{(2)},\ \ldots,\ x^{(i)},\ \ldots,\ x^{(m)},\ (x^{(i)}=[x_1^{(i)},\ x_2^{(i)},\ \ldots,\ x_j^{(i)},\ \ldots,\ x_n^{(i)}]) x ( 1 ) , x ( 2 ) , … , x ( i ) , … , x ( m ) , ( x ( i ) = [ x 1 ( i ) , x 2 ( i ) , … , x j ( i ) , … , x n ( i ) ] )
Preprocessing(feature scaling / mean normalization)
μ j = 1 m ∑ i = 1 m x j ( i ) \mu_j=\cfrac{1}{m}\sum\limits_{i=1}^mx_j^{(i)} μ j = m 1 i = 1 ∑ m x j ( i )
d x j ( i ) = x j ( i ) − μ j dx_j^{(i)}=x_j^{(i)}-\mu_j d x j ( i ) = x j ( i ) − μ j
Compute covariance matrix
C = 1 m ∑ i = 1 m ( d x ( i ) ) ( d x ( i ) ) T C=\cfrac{1}{m}\sum\limits_{i=1}^m(dx^{(i)})(dx^{(i)})^T C = m 1 i = 1 ∑ m ( d x ( i ) ) ( d x ( i ) ) T
Compute eigenvectors of matrix ( [ U , S , V ] = S V D ( C ) [U,S,V]=SVD(C) [ U , S , V ] = S V D ( C ) )
U = [ ∣ ∣ ∣ u ( 1 ) u ( 2 ) … u ( n ) ∣ ∣ ∣ ] ∈ R n × n U=\begin{bmatrix} |&|&&|\\ u^{(1)}&u^{(2)}&\ldots&u^{(n)}\\|&|&&|\end{bmatrix}\in\mathop{\mathbb{R}}^{n\times n} U = ⎣ ⎢ ⎡ ∣ u ( 1 ) ∣ ∣ u ( 2 ) ∣ … ∣ u ( n ) ∣ ⎦ ⎥ ⎤ ∈ R n × n
Compute principal components
z = U r e d u c e T x z=U_{reduce}^Tx z = U r e d u c e T x
4. PCA Reconstruction
Data x를 구한 eigen vector U r e c u d e T U_{recude}^T U r e c u d e T 로 projection할 수도 있지만 다시 U r e d u c e U_{reduce} U r e d u c e 를 곱해 복원할 수도 있다. 단, 복원 시 다른 eigen vector를 고려하지 않기 때문에 근사한 값이다.