8장 차원 축소¶
- 많은 특성으로 훈련을 느리게 할 뿐만 아니라, 좋은 솔루션을 찾기 어렵게 만드는 문제를 차원의 저주(curse of dimensionality)라고 합니다.
- 차원을 축소시키면 일부 정보가 유실되며 시스템의 성능도 나빠질 수 있습니다. 하지만, 훈련 속도는 빨라지며 불필요한 세부사항을 걸려내므로 성능을 높일 수도 있습니다.
8.1 차원의 저주¶
단위 면적에서 임의 두 점을 선택하면 두 점 사이의 거리는 평균적으로 대략 0.52, 3차원 큐브에서는 평균 거리는 대략 0.66, 1,000,000차원에서는 평균 거리는 약 408.25입니다. 즉, 고차원 데이터셋은 매우 희박할 위험이 있습니다.
결론적으로 훈련 세트의 차원이 클수록 과대적합 위험이 커집니다.
차원의 저주를 해결하기 해결책은 이론적으로 훈련 샘플의 밀도가 충분히 높아질 때까지 훈련 세트의 크기를 키우는 것입니다.(차원 수가 커짐에 따라 필요한 훈련 샘플의 수는 기하급수적으로 늘어나 불가능)
8.2 차원 축소를 위한 접근 방법¶
- 차원을 감소시키는 두 가지 주요한 접근법인 투영과 매니폴드 학습이 존재
8.2.1 투영¶
모든 훈련 샘플이 고차원 공간 안의 저차원 부분 공간에 존재
모든 훈련 샘플을 부분 공간에 수직으로 투영
8.2.2 매니폴드 학습¶
8.3 PCA¶
주성분 분석(PCA)은 가장 인기 있는 차원 축소 알고리즘
데이터에서 가장 가까운 초평면을 정의한 다음, 데이터를 이 평면에 투영
8.3.1 분산 보존¶
저차원 초평면에 훈련 세트를 투영하기 전 분산이 최대로 보존되는 올바른 초평면을 선택해야 합니다.
분산이 최대로 보존되는 축을 선택하는 것이 정보가 가장 적게 손실되기 때문입니다.
8.3.2 주성분¶
- 특잇값 분해(SVD)라는 표준 행렬 분해 기술을 통해 주성분을 찾습니다.
8.3.3 d차원으로 투영하기¶
- 주성분을 모두 추출해냈다면 처음 d개의 주성분으로 정의한 초평면에 투영하여 데이터셋의 차원을 d차원으로 축소 시킬 수 있습니다.
8.3.4 사이킷런 사용하기¶
8.3.5 설명된 분산의 비율¶
- explained_varianceration 변수에 저장된 주성분의 설명된 분산의 비율은 각 주성분의 축에 따라 있는 데이터셋의 분산 비율을 나타냅니다.
8.3.6 적절한 차원 수 선택하기¶
- 축소할 차원 수를 임의로 정하기보다는 충분한 분산(예를 들어 95%)이 될 때까지 더해야 할 차원 수를 선택하는 것이 좋습니다.
8.3.7 압축을 위한 PCA¶
차원을 축소하고 난 후에는 훈련 세트의 크기가 줄어듭니다. 대부분의 분산은 유지되지만 데이터셋은 원본 크기보다 줄어듭니다.
압축된 데이터셋에 PCA 투영의 변환을 반대로 적용하여 되돌릴 수도 있지만 원본 데이터셋을 얻을 수는 없습니다. 원본 데이터와 재구성된 데이터 사이의 평균 제곱 거리를 "재구성 오차"라고 합니다.
8.3.8 랜덤 PCA¶
- 확률적 알고리즘을 사용해 처음 d개의 주성분에 대한 근삿값을 빠르게 찾습니다.
8.3.9 점진적 PCA¶
- 훈련 세트를 미니배치로 나눈 뒤 IPCA(점진적 PCA) 알고리즘에 한 번에 하나씩 주입
8.4 커널 PCA¶
- 커널 PCA란 차원 축소를 위한 복잡한 비선형 투형을 수행하는 PCA
8.4.1 커널 선택과 하이퍼파라미터 튜닝¶
- KPCA는 비지도 학습으로 좋은 커널과 하이퍼파라미터를 선택하기 위한 명확한 성능 측정 기준은 없으나 종종 지도 학습의 전처리 단계로도 활용되므로 GridSearchCV를 사용해 가장 좋은 커널과 파라미터를 선택할 수도 있다.
8.5 LLE¶
지역 선형 임베딩(LLE)은 또 다른 강력한 비선형 차원 축소 기술입니다. 투영에 의존하지 않는 매니폴드 학습입니다.
LLE는 먼저 각 훈련 샘플이 가장 가까운 이웃에 얼마나 선형적으로 연관되어 있는지 측정, 그런 다음 국부적인 관계가 가장 잘 보존되는 훈련 세트의 저차원 표현을 찾아 차원을 축소 시킵니다.
8.6 다른 차원 축소 기법¶
랜덤 투영(random projection)
랜덤한 선형 투영을 사용해 데이터를 저차원 공간으로 투영합니다. 이런 랜덤 투영이 실제로 거리를 잘 보존하는 것으로 밝혀졌으며 샘플 수와 목표 차원수에 따라 차원 축소 품질이 다릅니다.
다차원 스케일링(MDS)
샘플 간의 거리를 보존하면서 차원을 축소합니다.
lsomap
각 샘플을 가장 가까운 이웃과 연결하는 식으로 그래프를 만듭니다. 그런 다음 샘플 간의 지오데식 거리를 유지하면서 차원을 축소합니다.
t-SNE
비슷한 샘플은 가까이, 비슷하지 않은 샘플은 멀리 떨어지도록 하면서 차원을 축소합니다. 주로 시각화에 많이 사용되며 특히 고차원 공간에 있는 샘플의 군집을 시각화할 때 사용됩니다.
선형 판별 분석(LDA)
분류 알고리즘으로 클래스 사이를 가장 잘 구분하는 축을 학습합니다. 이 축은 데이터가 투영되는 초평면을 정의하는 데 사용할 수 있습니다. 이 알고리즘의 장점은 투영을 통해 가능한 한 클래스를 멀리 떨어지게 유지시키므로 차원을 축소 시키는 데 좋은 알고리즘입니다.
8.7 연습문제¶
데이터셋의 차원을 축소하는 주요 목적은 무엇인가요? 대표적인 단점은 무엇인가요?
목적 : 훈련 알고리즘의 속도를 높이기 위함, 데이터를 시각화하고 중요한 특성에 대한 통찰을 얻기 휘해 / 단점 : 일부 정보를 잃어버려 훈련 알고리즘의 성능을 감소시킬 수 있음, 머신러닝 파이프라인의 복잡도 증가
차원의 저주란 무엇인가요?
저차원 공간에는 없는 많은 문제가 고차원 공간에서 일어난다는 사실을 뜻합니다.
데이터셋의 차원을 축소시키고 나서 이 작업을 원복할 수 있나요? 할 수 있다면 어떻게 가능할까요? 가능하지 않다면 왜일까요?
데이터셋의 차원이 축소되면 일부 정보가 차원 축소 과정에서 손실되기 때문에 이를 완벽하게 원복 시키는 것은 불가능합니다.
매우 비선형적인 데이터셋의 차원을 축소하는 데 PCA를 사용할 수 있을까요?
PCA는 불필요한 차원을 제거할 수 있기 때문에 매우 비선형적이더라도 대부분의 데이터셋에서 차원을 축소하는 데 사용할 수 있습니다. 그러나 불필요한 차원이 없다면(예를 들면 스위스 롤 데이터셋) PCA의 차원 축소는 너무 많은 정보를 잃게 만듭니다. 즉, 스위스 롤은 펼쳐야 하며 말려진 것을 뭉개면 안됩니다.
설명된 분산을 95%로 지정한 PCA를 1,000개의 차원을 가진 데이터셋에 적용한다고 가정하겠습니다. 결과 데이터셋의 차원은 얼마나 될까요?
이 질문에는 속임수가 있습니다. 답은 데이터셋에 따라 다릅니다. 극단적인 두 가지 사례를 살펴보겠습니다. 먼저 거의 완벽하게 일렬로 늘어선 데이터 포인트로 구성된 데이터셋을 생각해보겠습니다. 이 경우 PCA는 분산의 95%를 유지하면서 데이터셋을 단 하나의 차원으로 줄일 수 있습니다. 이번에는 완전히 무작위로 1,000개의 차원에 걸쳐 흩어져 있는 데이터셋을 생각해보겠습니다. 이 경우 PCA는 분산의 95%를 보존하려면 거의 950개의 차원이 필요할 것입니다. 그러므로 답은 데이터셋에 따라 달라지고 1에서 950 사이의 어떤 수도 될 수 있습니다. 차원 수에 대한 함수로 설명된 분산의 그래프를 그려보는 것이 데이터셋에 내재된 차원 수를 대략 가늠할 수 있는 한 가지 방법입니다.
기본 PCA, 점진적 PCA, 랜덤 PCA, 커널 PCA는 어느 경우에 사용될까요?
기본 PCA가 우선적으로 사용되지만 데이터셋 크기가 메모리에 맞을 때에 가능합니다. 점진적 PCA는 메모리에 담을 수 없는 대용량 데이터셋에 적합합니다. 하지만 기본 PCA보다 느리므로 데이터셋이 메모리 크기에 맞으면 기본 PCA를 사용해야 합니다. 점진적 PCA는 새로운 샘플이 발생될 때마다 실시간으로 PCA를 적용해야 하는 온라인 작업에 사용 가능합니다. 랜덤 PCA는 데이터셋이 메모리 크기에 맞고 차원을 크게 축소시킬 때 사용됩니다. 이 경우에는 기본 PCA보다 훨씬 빠릅니다. 커널 PCA는 비선형 데이터셋에 유용합니다.
어떤 데이터셋에 적용한 차원 축소 알고리즘의 성능을 어떻게 평가할 수 있을까요?
직관적으로 데이터셋에서 너무 많은 정보를 잃지 않고 차원을 많이 제거할 수 있다면 차원 축소 알고리즘이 잘 작동한 것입니다. 이를 측정하는 한 가지 방법은 역변환을 수행해서 재구성 오차를 측정하는 것입니다. 하지만 모든 차원 축소 알고리즘이 역변환을 제공하지는 않습니다. 만약 차원 축소를 다른 단계로 사용한다면 두 번째 알고리즘의 성능을 측정해볼 수 있습니다. 즉, 차원 축소가 너무 많은 정보를 잃지 않았다면 원본 데이터셋을 사용했을 때와 비슷한 성능이 나와야 합니다.
두 개의 차원 축소 알고리즘을 연결할 수 있을까요?
당연히 두 개의 차원 축소 알고리즘을 연결할 수 있습니다. PCA로 불필요한 차원을 대폭 제거하고 난 다음 LLE 같이 훨씬 느린 알고리즘을 적용하는 것이 대표적인 사례입니다. 이런 2단계 방식은 LLE만 사용했을 때와 거의 비슷한 성능을 내지만 속도가 몇 분의 1로 줄어들 것입니다.
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:100% !important;}</style>"))
'Book report > 핸즈온 머신러닝' 카테고리의 다른 글
[핸즈온 머신러닝] Chapter 7. 앙상블 학습과 랜덤 포레스트 (0) | 2024.04.05 |
---|---|
[핸즈온 머신러닝] Chapter 6. 결정 트리 (0) | 2024.04.01 |
[핸즈온 머신러닝] Chapter 5. 서포트 벡터 머신 (0) | 2023.09.12 |
[핸즈온 머신러닝] Chapter 4. 모델 훈련 (0) | 2023.09.06 |
[핸즈온 머신러닝] Chapter 3. 분류 (0) | 2023.08.28 |