머신러닝
차원축소 : 주성분분석
Cozzi
2021. 11. 21. 22:12
차원 축소를 해야 하는 이유
- 차원의 저주를 해결하기 위해
<차원의 저주> : 차원이 증가할 때 학습 데이터 수가 차원의 수보다 적어 성능이 저하됨.
: 데이터의 용량이 큰 경우, 불필요한 샘플들이 많이 포함되어 있어 모델의 성능이 저하됨
-> 이 때 샘플을 늘리거나 차원을 줄여서 이 문제를 해결해야하나, 샘플을 늘리는 것은 현실적으로 쉽지 않음
- 데이터 시각화를 용이하게 해 데이터를 더 직관적으로 파악할 수 있게 하기 위해
- 특성의 수를 유의미하게 줄여 훈련 속도와 성능을 최대로 유지하기 위해
차원 축소 방법
- Feature Selection : heatmap 을 그려 상관관계가 큰 특성들을 합치거나, 필요없는 특성 제거
- Feature Extraction : projection 등을 통해 feature 추출
차원축소 종류
- 사영(projection)
- 다양체 학습
-> 오늘은 사영 중 pca를 다룰 예정
PCA (주성분 분석)
분산을 최대한 보존 (정보 손실을 최소화) 하면서 차원을 줄이는 방법
* 첫째 주성분 : 분산을 최대한 보존하는 축
* 둘째 주성분 : 첫째 주성분과 수직을 이루면서 분산을 보존하는 축
.
.
.
특이값 분해 (SVD)를 이용하여 주성분을 분석할 수 있음

간단한 코드
from sklearn.decomposition import PCA
pca = PCA(n_components = 2)
X2D = pca.fit_transform(X)
#V행렬 중 d까지 열로만 구성된 행렬 W의 전치행렬반환
pca.components_
# 주성분에 대한 원데이터의 분산의 비율 반환
pca.explained_variance_ratio_
* 만약, 적절한 d의 값을 모른다면,
# 유지하고 싶은 분산의 비율을 파라미터로 고정시킴
pca = PCA(n_components =0.95)
X2D = pca.fit_transform(x)
# 전체 주성분의 원데이터 분산 유지비율을 누적합으로 plot 한 뒤 적절한 d값 반환
pca = PCA()
pca.fit(X_train)
cumsum = np.cumsum(pca.explained_variance_ratio_)
d = np.argmax(cumsum >= 0.95) + 1
d
위의 두가지 방법 중 하나를 사용해서 pca를 진행하면 된다.