PCA를 공부하기에 앞서 필요한 기초 개념인 공분산 행렬(Covariance Matrix)과 고유값(Eigenvalue), 고유벡터(Eigenvector)의 개념에 대해 먼저 살펴보겠습니다.
1. 공분산 행렬(Covariance Matrix)
공분산(Covariance)이란?
공분산은 두 변수(X, Y) 간의 변화하는 관계(상관성, Correlation)를 측정하는 값이다.
- 공분산이 양수(> 0) -> 두 변수가 같은 방향으로 변화함 (즉, 한 변수가 증가하면 다른 변수도 증가)
- 공분산이 음수(< 0) -> 두 변수가 반대 방향으로 변화함 (즉, 한 변수가 증가하면 다른 변수는 감소)
- 공분산이 0 -> 두 변수 간 상관성이 없음
공분산을 구하는 공식은 다음과 같다.
$$COV(X, Y) = \frac{1}{n-1} \displaystyle\sum_{i=1}^{n}(X_i - \bar{X})(Y_i - \bar{Y})$$
여기서:
- \(X_i, Y_i\) = 개별 데이터 값
- \(\bar{X}, \bar{Y}\) = 각 변수의 평균
- \(n\) = 데이터 개수
공분산 행렬(Covariance Matrix)이란?
PCA에서는 여러 개의 변수(특성)를 다루므로, 모든 변수 간의 공분산 값을 포함하는 행렬이 필요하다. 이를 공분산 행렬(Covariance Matrix)이라고 한다.
\[
C =
\begin{bmatrix}
COV(X_1, X_1) & COV(X_1, X_2) & \dots & COV(X_1, X_n) \\
COV(X_2, X_1) & COV(X_2, X_2) & \dots & COV(X_2, X_n) \\
\vdots & \vdots & \ddots & \vdots \\
COV(X_n, X_1) & COV(X_n, X_2) & \dots & COV(X_n, X_n)
\end{bmatrix}
\]
이 행렬은 대칭 행렬이며, 대각선 요소들은 각 변수의 분산(Variance)이다.
2. 고유값(Eigenvalue)과 고유벡터(Egienvector)
공분산 행렬을 구한 후, 데이터의 주요한 방향(주성분, Principal Component)을 찾기 위해 고유값 분해(Eigendecomposition)를 수행한다. 고유값 분해를 이해하기 위해서는 먼저 고유값과 고유벡터 개념을 알아야한다.
고유값(Eigenvalue, \(\lambda\))
고유값은 행렬이 특정 방향으로 데이터를 변환할 때, 그 방향의 중요도를 나타내는 값이다.
- 고유값이 클수록 그 방향으로의 데이터 분산이 크다는 의미
- PCA에서는 고유값이 가장 큰 방향을 가장 중요한 주성분(PC1)으로 선택
- 고유값이 작을수록 해당 방향의 중요도가 낮음 -> 차원 축소 시 제거 가능
고유벡터(Eigenvector, \(v\))
고유벡터는 행렬 변환을 받아도 방향이 변하지 않는 벡터이다.
- PCA에서 각 주성분의 방향을 결정하는 축(Principal Component)
- 서로 직교(Orthogonal)하는 벡터들로 구성됨 -> 서로 독립적인 정보 제공
- PCA에서는 고유벡터가 데이터의 새로운 좌표축 역할을 하게됨.
고유값과 고유벡터의 관계
행렬 \(C\)의 고유값과 고유벡터는 다음 방정식을 만족한다.
$$Cv = \lambda v$$
여기서:
- \(C\) = 공분산 행렬
- \(v\) = 고유벡터 (Eigenvector)
- \(\lambda\) = 고유값 (Eigenvalue)
고유값 분해(Eigendecomposition)
고유값 분해를 하면 행렬 \(C\)를 다음과 같이 나타낼 수 있다.
$$C = VAV^{-1}$$
여기서:
- \(V\) = 고유벡터 행렬 (각 열이 하나의 고유벡터)
- \(A\) = 고유값 대각행렬 (대각선에 고유값이 위치)
- \(V^{-1}\) = 고유벡터 행렬의 역행렬
PCA는 공분산 행렬을 고유값 분해하여 가장 큰 고유값을 가지는 주성분(PC1, PC2, ...)을 선택하는 과정이다.
3. PCA란?
PCA(주성분 분석)는 차원 축소(Dimensionality Reduction) 및 변수 추출(Feature Extraction) 기법으로 널리 사용된다.
- 주성분(Principal Component, PC): 전체 데이터(독립변수들)의 분산을 가장 잘 설명하는 방향을 나타낸다.
- 위 그림에서 회전하는 축은 전체 데이터의 분산을 가장 잘 설명하는 주성분을 찾는 과정을 나타낸다. 파란점은 데이터의 분포를 의미하고, 축에 투영된 빨간 점은 해당 축을 기준으로 정사영을 수행한 것이다.
- 축에 나타나는 빨간 점의 분포가 넓게 나타날수록 해당 축은 데이터의 분산을 잘 설명하고 있다는 것을 의미한다. 위 그림을 살펴보면 현재 축에 데이터를 정사영 시켰을 때 분산이 가장 크게 나타나는 것을 확인할 수 있다.
- 변수 개수 = 차원의 개수
- 예) 데이터에서 4개의 독립변수(특성)가 존재하면 데이터가 4차원 공간에서 표현된다.
- 차원이 증가할수록 데이터의 복잡성이 증가하기 때문에 차원을 줄이는 것이 필요하다.
PCA의 주요 목표
- 차원 축소: 기존 변수를 조합해 새로운 변수를 만들어 데이터 표현을 간소화함.
- 분산 보존: 전체 데이터의 변동을 최대한 유지하는 방향으로 차원 축소를 수행함.
- 노이즈 제거 및 연산 효율 증가: 과적합을 방지하고 연산량을 줄이는 효과.
4. PCA의 원리
PCA는 데이터를 낮은 차원으로 축소할 때 "정보 손실을 최소화" 하는 방식으로 새로운 축(Principal Component, PC)을 찾는다.
- 정사영(Projection) 원리
- 데이터를 새로운 축에 투영(Projection)하여 차원을 줄인다.
- 기존 축(x1, x2)에 투영하면 데이터가 겹치면서 정보가 손실될 수 있음.
- PCA는 데이터의 분산을 최대한 유지하는 방향으로 새로운 축을 설정함.
- 공분산 행렬(Covariance Matrix)과 고유벡터(Eigenvector)
- 공분산 행렬(C)을 구한 후, 이를 고유값 분해(Eigendecomposition)하여 고유값\((\lambda)\)과 고유 벡터(v)를 계산.
- 가장 큰 고유값을 가진 고유벡터가 첫 번째 주성분(PC1)이 됨.
5. PCA에서 차원 축소가 필요한 이유
차원이 높은 데이터의 문제점
- 고차원의 공간에서는 데이터의 학습 속도가 느려짐.
- 불필요한 변수(Feature)가 많으면 학습 성능이 저하됨.
- 과적합(Overfitting) 위험 증가
- 데이터에 포함된 의미 없는 변수를 제거하는 것이 중요함.
=> 변수의 개수는 즉, 차원을 의미한다. 차원이 커질수록 데이터의 부피가 기하 급수적으로 증가하여 데이터의 밀도는 희소해진다. 데이터의 차원이 증가할수록 데이터 포인트 간의 거리 또한 증가하게 되므로, 이러한 데이터를 이용해 머신러닝 알고리즘을 학습 하게되면 모델이 복잡해지게 된다. 따라서, 오버피팅(overfitting) 위험이 커진다. 이러한 차원의 저주를 해결하기 위한 방법 중 하나가 PCA이다.
PCA에서 분산이 최대가 되는 축을 선택하는 이유
- 데이터의 분산(Variance)이 크면 데이터 간 차이가 명확해짐.
- 분산이 작은 방향으로 투영하면 데이터가 손실될 가능성이 높음.
- 따라서 PCA는 분산이 최대인 축을 우선적으로 선택하여 정보를 보존함.
- 첫 번째 주성분(PC1) -> 두 번째 주성분(PC2) -> ... 순서로 선택
6. PCA의 변수 추출(Feature Extraction)
PCA는 기존 변수를 선형 결합(linear combination)하여 새로운 변수(주성분)를 생성하는 방식이다.
- 변수 추출(Feature Extraction)
- 기존 변수를 조합해 새로운 변수를 생성하는 방식
- 변수 선택(Feature Selection)과 차이점: PCA는 기존 변수를 모두 활용하여 변수를 재구성함.
- 데이터 행렬 \(X(p \times n)\)에서 새로운 변수 \(Z\)를 생성.
- 선형 변환으로 해석 가능
- 새로운 축 \(a_i\)에 데이터를 투영하여 새로운 변수를 생성함.
- PCA는 데이터를 저차원의 초평면에 투영하여 데이터 구조를 단순화함.
7. PCA 수행 과정
1) 데이터 정규화 (Mean Centering & Standardization)
- 평균을 0으로 조정하여 데이터의 중심을 원점으로 이동함.
- 표준화를 통해 변수들의 크기를 일정하게 맞춤.
$$X_{scaled} = \frac{X - \mu}{\sigma}$$
2) 공분산 행렬 계산 (Compute Covariance Matrix)
- 데이터의 변수 간 관계를 분석하기 위해 공분산 행렬을 계산.
$$C = \frac{1}{n - 1}X^TX$$
3) 고유값 및 고유벡터 계산 (Compute Eigenvalues & Eigenvectors)
- 공분산 행렬을 고유값 분해(Eigendecomposition)하여 고유값(\(\lambda\))과 고유벡터(v)를 구함.
$$Cv = \lambda v$$
- 고유값이 클수록 해당 주성분이 더 많은 분산을 설명함.
- 고유값이 큰 순서대로 정렬하여 중요한 주성분을 선택함.
4) 차원 축소 (Dimensionality Reduction)
- 누적 분산 비율(Explained Variance Ratio)을 기준으로 적절한 개수의 주성분을 선택.
$$Explained Variance Ratio = \frac{\lambda_i}{\sum \lambda}$$
- 보통 90% 이상의 분산을 설명하는 개수를 선택.
5) 데이터 변환 (Transform Data)
- 원본 데이터를 새로운 주성분 좌표계로 변환.
$$X' = XV_k$$
- \(X'\) = 변환된 데이터 (k차원)
- \(V_k\) = 선택된 상위 k개의 고유벡터
이제 차원이 축소된 데이터가 생성됨.
8. 예제 코드 (with Scikit-Learn)
사이킷런 라이브러리에 PCA 함수가 존재하여 쉽게 구현할 수 있습니다. 예제 코드는 아래와 같습니다.
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
# 예제 데이터 생성
X = np.array([[2, 3], [3, 5], [5, 8], [6, 11]])
# 데이터 정규화
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# PCA 수행 (주성분 2개 선택)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# 결과 출력
print("고유값 (Eigenvalues):", pca.explained_variance_)
print("고유벡터 (Eigenvectors):\n", pca.components_)
print("변환된 데이터:\n", X_pca)
9. 정리
- PCA는 차원 축소 및 변수 추출 기법으로, 데이터의 분산을 최대한 보존하는 방향으로 주성분을 찾는다.
- 공분산 행렬 -> 고유값 분해 -> 주성분 선택 -> 데이터 변환 과정을 거친다.
- 고차원 데이터를 저차원으로 변환하여 분석 성능을 향상시킬 수 있다.
'데이터 분석' 카테고리의 다른 글
데이터 전처리 (Data Preprocessing) (0) | 2025.03.12 |
---|---|
탐색적 데이터 분석 (EDA : Exploratory Data Analysis) (0) | 2025.03.10 |
범주형 데이터 처리 (0) | 2025.03.10 |
특징 선택(Feature Selection) (0) | 2025.03.10 |
표준화(Standardization)와 정규화(Normalization) (0) | 2025.03.09 |