PCA (Principal Component Analysis)
1) 개념
- Unsupervised feature extraction의 방법 중 하나
- 다수 데이터가 모인 분포의 주요 성분을 분석하는 것으로 데이터들의 분산이 가장 큰 방향벡터를 의미
- 원본 데이터셋과 투영된 데이터셋 간의 평균제곱거리를 최소화하는 축
- n 개의 관측치와 i 개의 변수로 구성된 데이터에서 상관관계가 없는 j 개의 변수로 구성된 데이터(n개의 관측치)
- 기존 변수의 선형결합으로 구성됨
2) 활용도
- 영상인식
- 데이터 압축 (차원 감소)
- 노이즈 제거 등
3) 방법
- 모든 변수 x 에 대해 임의의 기저 (basis) 또는 계수 (x 개수)로 선형결합 -> 각 기저로 사영 변환 후의 변수
- 정사영 (projection)을 통해 n차원 공간상의 데이터를 k (k < n)차원의 데이터셋으로 변환
- 매니폴드 (manifold)실제 데이터셋이 차원이 낮은 매니폴드에 가깝게 놓여있다고 가정하고 문제를 해결
4) 과정
(1) 데이터 표준화 (Standardization)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train_std = sc.fit_transform(X_train)
X_test_std = sc.transform(X_test)
(2) 기존 변수의 covariance (correlation) matrix 계산
cov_mat = np.cov(X_train_std.T)
(3) (2)으로부터 고유값, 고유벡터 계산
# 공분산 행렬의 n x n 차원의 수 만큼 고유값이 나온다
eigen_vals, eigen_vecs = np.linalg.eig(cov_mat)
(4) 고유값을 내림차순으로 정렬하고 고유벡터의 순위를 매김
# tuple list (eigen value, eigen vector)
eigen_pairs = [(np.abs(eigen_vals[i]), eigen_vecs[:, i])
for i in range(len(eigen_vals))]
# 높은 값에서 낮은 값으로 (고유값, 고유벡터) 튜플 정렬
eigen_pairs.sort(key = lambda k: k[0], reverse = True)
- 가장 큰 고유값을 가지고 있는 고유벡터가 데이터를 가장 잘 설명한다.
- 고유값을 기준으로 고유벡터를 선택하면 되는데 선택한 개수가 PCA 이후의 차원의 개수이다.
(5) 정렬된 고유벡터로 기존 변수 변환 (선형 결합)
# 분산이 큰 상위 2개만 선택
w = np.hstack((eigen_pairs[0][1][:, np.newaxis],
eigen_pairs[1][1][:, np.newaxis]))
print(f"투영 행렬 : {w}")
# 기존벡터와 선형결합
X_train_pca = X_train_std.dot(w)
5) 주성분 개수 선택
- 모든 주성분을 다 사용하기에는 주성분 분석을 하는 의미 퇴색
- 고유값 감소율이 유의미하게 낮아지는 주성분 선택
- 일정 수준 이상의 분산비를 보존하는 최소의 주성분 선택 (가장 대표적인 주성분 선택)
6) 한계
- 다중 가우시안 (비정규분포)인 자료들에 적용이 어려움
- 비지도학습이기 때문에 모든 분류 및 예측 문제가 정확하지 않음
코드 예시
from sklearn.decomposition import PCA
pca = PCA(n_components = 2)
X_train_pca = pca.fit_transform(X_train_std)
X_test_pca = pca.transform(X_test_std)
# 전체 주성분에 대한 분산의 크기
pca = PCA(n_components = None)
X_train_pca = pca.fit_transform(X_train_std)
pca.explained_variance_ratio_ # 내림차순으로 나타남
공분산
1) 개요
- 표준편차 또는 분산과 달리 2차원 (2 개의 변수) 간의 분포를 파악하기 위해 사용한다.
$$cov_{x,y}=\frac{\sum_{i=1}^{N}(x_{i}-\bar{x})(y_{i}-\bar{y})}{N-1}$$
- x편차, y편차의 곱의 평균
2) 의미
- 공분산 값이 양수 : 양의 상관관계 (두 변수는 동시에 증가한다.)
- 공분산 값이 음수 : 음의 상관관계 (하나의 변수가 증가하면 나머지 하나는 감소한다.)
- 공분산이 0 일 때 : 독립 관계 (두 변수는 서로 간에 영향을 끼치지 않는다.)
공분산 행렬
1) 개요
- 3차원 이상의 데이터의 공분산을 다루고자 할 때, 가능한 모든 변수들의 공분산을 구하고 행렬로 표현한 것이다.
- 공분산 행렬의 고유벡터는 데이터가 어느 방향으로 분산되어 있는지 나타냄
- i, j번 좌표의 데이터 공분산 값을 행렬 i행 j열 원소값으로 하는 행렬 (대각 성분 = 각 변수의 분산, 비대각 성분 = 대응하는 두 변수의 공분산)
참고
머신러닝 교과서 (길벗)
www.cs.otago.ac.nz/cosc453/student_tutorials/principal_components.pdf
'AI > Machine Learning' 카테고리의 다른 글
Random Forest (0) | 2021.02.19 |
---|---|
Support Vector Machine; SVM (0) | 2021.02.18 |
Overfitting (과적합) (0) | 2021.02.17 |
Decision Tree (0) | 2021.01.21 |
k-NN (Nearest Neighbors) (0) | 2021.01.18 |