- 훈련 속도를 높임
- 데이터 시각화에 유용
차원 축소에 사용되는 두 가지 주요 접근 방법 : 투영, 매니폴드 학습
인기 있는 차원 축소 기법 : PCA, 커널 PCA, LLE
1. 차원의 저주
- 훈련 세트의 차원이 클수록 과대적합 위험이 커짐
- 해결책 중 하나로 훈련 샘플의 밀도가 충분히 높아질 때까지 훈련 세트의 크기를 키우기
- 그러나 기하 급수적으로 늘어날 수 있음
2. 차원 축소를 위한 접근 방법
1) 투영
- 대부분의 문제는 모든 차원에 걸쳐 균일하게 퍼져있지 않음
- 모든 훈련샘플이 고차원 공간 안의 저차원 부분 공간에 놓여 있음
- 차원 축소에 있어서 투영이 언제나 최선의 방법은 아님
- 스위스 롤 데이터셋처럼 부분 공간이 뒤틀리거나 휘어 있기도 함
2) 매니폴드 학습
- d차원 매니폴드는 국부적으로 d차원 초평면으로 보일 수 있는 n차원 공간의 일부
- 많은 차원 축소 학습 알고리즘이 훈련 샘플이 놓여 있는 매니폴드를 모델링하는 식으로 작동
- 실제 고차원 데이터셋이 더 낮은 저차원 매니폴드에 가깝게 놓여 있다는 매니폴드 가정 또는 매니폴드 가설에 근거
- 모델 훈련 전 훈련 세트의 차원을 감소시키면 훈련 속도는 빨라지지만 항상 더 낫거나 간단한 솔루션이 되는 것은 아님
3. PCA
- 주성분 분석은 가장 인기 있는 차원 축소 알고리즘
- 데이터에 가장 가까운 초평면을 정의한 다음 데이터를 이 평면에 투영시킴
1) 분산 보존
- 분산이 최대로 보존되는 축을 선택하는 것이 정보가 가장 적게 손실되므로 합리적
- 즉 원본 데이터셋과 투영된 것 사이의 평균 제곱 거리를 최소화 하는 축
2) 주성분
- PCA는 훈련 세트에서 분산이 최대인 축을 찾음
- 또한 첫 번째 축에 직교하고 남은 분산을 최대한 보존하는 두 번째 축을 찾음
3) 사이킷런 사용하기
# 데이터셋의 차원 2로 줄이기
from sklearn.decomposition import PCA
pca = PCA(n_components = 2)
X2D = pca.fit_transform(X)
# 설명된 분산의 비율
pca.explained_variance_ratio_
4) 적절한 차원 수 선택하기
- 차원 수를 임의로 정하기보다는 충분한 분산이 될 때까지 더해야 할 차원의 수를 선택하는 것이 간단
- 데이터 시각화를 위해 축소하는 경우에는 2, 3개로 줄이는 것이 일반적
pca = PCA(n_components=0.95)
X_reduced = pca.fit_transform(X_train)
5) 압축을 위한 PCA
- 원본 데이터와 재구성된 데이터 사이의 평균 제곱 거리를 재구성 오차라고 함
# MNIST 데이터셋을 154차원으로 압축하고 784차원으로 복원
pca = PCA(n_components = 154)
X_reduced = pca.fit_transform(X_train)
X_recovered = pca.inverse_transform(X_reduced)
6) 점진적 PCA
- PCA 구현 문제인 SVD 알고리즘을 실행하기 위해 전체 훈련 세트를 메모리에 올려야 한다는 것을 해결
- 사이킷런의 IncrementalPCA 이용
4. 커널 PCA
- 차원 축소를 위한 복잡한 비선형 투영 수행
- 투영된 후에 샘플의 군집을 유지하거나 꼬인 매니폴드에 가까운 데이터셋을 펼칠 때 유용
# KernelPCA를 이용해 RBF 커널로 kPCA 적용
from sklearn.decomposition import KernelPCA
rbf_pca = KernelPCA(n_components=2, kernel="rbf", gamma=0.04)
X_reduced = rbf_pca.fit_transform(X)
1) 커널 선택과 하이퍼파라미터 튜닝
- kPCA는 비지도 학습으로 좋은 커널과 하이퍼파라미터를 선택하기 위한 명확한 성능 측정 기준이 없음
- 그리드 탐색을 사용
5. LLE
- 지역 선형 임베딩(LLE)은 또 다른 강력한 비선형 차원 축소 기술
- 투영에 의존하지 않는 매니폴드 학습
- 먼저 훈련 샘플이 가장 가까운 이웃에 얼마나 선형적으로 연관되어 있는지 측정
- 국부적인 관계가 가장 잘 보존되는 훈련 세트의 저차원 표현을 찾음
- 잡음이 너무 많지 않은 경우 꼬인 매니폴드를 펼치는데 잘 작동
from sklearn.manifold import LocallyLinearEmbedding
lle = LocallyLinearEmbedding(n_components=2, n_neighbors=10)
X_reduced = lle.fit_transform(X)
6. 다른 차원 축소 기법
- 랜덤 투영
- 다차원 스케일링 : 샘플 간 거리를 보존하면서 차원 축소
- lsomap
- t-SNE
- 선형 판별 분석
'인공지능(AI) > 머신러닝' 카테고리의 다른 글
[핸즈온 머신러닝] 10장 케라스를 사용한 인공 신경망 소개 (0) | 2022.02.14 |
---|---|
[핸즈온 머신러닝] 9장 비지도 학습 (0) | 2022.02.07 |
[핸즈온 머신러닝] 7장 앙상블 학습과 랜덤 포레스트 (0) | 2022.01.22 |
[핸즈온 머신러닝] 6장 결정 트리 (0) | 2022.01.18 |
[핸즈온 머신러닝] 5장 서포트 벡터 머신 (1) | 2022.01.18 |
댓글