2026. 7. 24. 18:44ㆍComputer Science/AI(ML, DL, RL, etc)

데이터의 차원 축소를 위한 방법에는 특성 선택 뿐만 아니라 특성 추출 또한 존재한다. 특히 비지도 데이터를 가지고 지지고 볶을 때 그냥 생으로 분석하면 머리가 아프고 가슴이 울럭거린다. 이때 Principal Component Analysis, 즉 다시 말해 주성분 분석은 도움이 된다. 이는 데이터에서 분산이 가장 큰 성분(== 설명력이 큰 성분)을 찾고 같거나 작은 차원으로 투영하는데 큰 도움을 준다.
일단 PCA 알고리즘은 다음과 같이 실행하게 된다.
- d차원 데이터셋을 표준화 전처리 한다. (스케일링은 필수다!)
- Covariance Matrix를 만든다.
- Covariance Matrix를 eigenvector(고유벡터)와 eigenvalue로 분해한다.
- Eigenvalue의 impact를 따져서 그에 맞는 eiegnvector를 선정한다.
- 선정한 eigenvector들로 projection matrix를 만든다.
- 냅다 Transform 한다.
그냥 쉽게 말하면 설명력 있는 벡터 몇개 뽑아다가 쓰고, 나머지 잔챙이들은 버려서 차원의 저주를 피해보겠다는 심산이다. 근데 여기서 문제는.. 왜 Covariance Matrix가 튀어나올까? 그것은 Covariance Matrix*eigenvector = eigenvalue*eigenvector가 되기 때문이다.


일단 Convariance Matrix는 이렇게 생긴 친구로, 대충 전체 데이터가 얼마나 흩뿌려져 있는지 (대각선: 변수별, 그외 : 각 변수간) 나타내는 친구라고 할 수 있을 것이다. 여기서 평균이 0으로 맞춰진(Mean-centered) n x p 데이터 행렬 X가 있고, 공분산 행렬을 C = \frac{1}{n-1} X^T X 라고 하자. 이때 우리가 찾고 싶은건 데이터를 사영(Projection)했을 때 분산을 가장 크게 만드는 단위 방향 벡터 px1의 u이다.

이때 X_u를 u에 대한 투영값으로 보면, 이에 대한 분산은 위와 같이 적을 수 있다. 일단 방향만 구하면 되므로 u의 scale을 1이라 두고 생각하면 u^t*C*u가 최대값이 되어야 함으로 최적화 문제를 통해 조건을 구할 수 있을 것이다. 따라서 라그랑주 승수법(제약조건이 주어져 있을때 Gradient로 최적화 값을 찾는 것. 자세한건 검색하시라.)을 도입해보자.


이 된다. 결론은 Covariance Matrix * Eigenvector = Eigenvalue * eigenvector가 된다!

이때 Covariance Matrix는 이와같이 표기할 수 있다. 여기서 Eigenvector를 모아서 만든 직교(Orthonormal)행렬을 V라 하고 대각선에 eigenvalue를 나열한 대각행렬을 ⋏라 해보자. 그러면


가 된다. (V가 Orthonormal 하기 때문에 저렇게 된다.) 여기서 고유벡터에 행렬 X를 곱한 벡터들(u)은 각각 직교함에 따라서 이를 고려하면 (이건 그냥 그려려니 하면 편하다.)


가 되고 V^T를 양변에 곱하면

가 된다. 이게 SVD의 공식이며 결론은

가 되니, 결국 특이값 대각행렬(Sigma)에 좌특이벡터행렬(U)을 곱하면 원본 데이터(X)에 우특이벡터 행렬(V)을 곱한 것과 다름없게 되며, 특이값 대각행렬을 통해 주성분(Principal Component)의 고유값(Eigenvalue, 분산)을 파악 가능하다. 고로 PCA에 SVD가 사용되는 셈이나 SVD 자체가 차원축소는 아니고, SVD 해서 나온 특이값(Sigma)의 크기를 보고 PC를 선택 취사해서 우특이벡터(V)로 사영 행렬(Projection Matrix)을 만든다 보면 된다.
참고로 Principle components는 누적기여값 기준 0.7~0.9정도에서 대충 짤라서 쓴다고 한다.
'Computer Science > AI(ML, DL, RL, etc)' 카테고리의 다른 글
| Kernel SVM (0) | 2026.07.23 |
|---|---|
| Logistic Regression (0) | 2026.07.20 |
| 참으로 쓸데없는 것을 만들어 보았다 (0) | 2026.05.26 |
| ML에서 특성 스케일 맞추기 (0) | 2025.12.26 |
| ML에서 누락된 데이터를 다루기 (0) | 2025.12.25 |