머신러닝 기반 분석 모형 선정
차원 축소(Dimension Reduction)
차원 축소의 중요한 의미는
차원 축소를 통해 좀 더 데이터를 잘 설명할 수 있는
잠재적인 요소를 추출하는 데 있다.
- 차원 축소: 매우 많은 피처로 구성된 다차원 데이터 세트의 차원을 축소해 새로운 차원의 데이터를 생성하는 것.
- 일반적으로 차원이 증가할수록 데이터 포인트 간의 거리가 기하급수적으로 멀어지게 되고, 희소한 구조를 가지게 되며 피처가 많을 경우 상대적으로 적은 차원에서 학습된 모델보다 예측 신뢰도가 떨어진다.
- 피처가 많을 경우 개별 피처 간에 상관관계가 높을 가능성이 크고, 선형 모델에서는 입력 변수 간의 상관관계가 높을 경우 이로 인한 다중 공선성 문제로 모델의 예측 성능이 저하된다.
- 다차원의 피처를 차원 축소해 피처 수를 줄이면 더 직관적으로 데이터를 해석할 수 있으며, 시각적으로 데이터를 압축해서 표현할 수 있고, 차원 축소 시 학습 데이터의 크기가 줄어들어 학습에 필요한 처리 능력도 줄일 수 있다.
- 일반적으로 차원 축소는 피처 선택(feature selection)과 피처 추출(feature extraction)로 나눌 수 있다.
- 피처 선택 (특성 선택): 특정 피처에 종속성이 강한 불필요한 피처는 아예 제거하고, 데이터의 특징을 잘 나타내는 주요 피처만 선택하는 것.
- 피처 추출: 기존 피처를 저차원의 중요 피처로 압축해서 추출하는 것이며, 새롭게 추출된 중요 피처는 기존의 피처가 압축된 것이므로 기존의 피처와는 완전히 다른 값이 된다. 즉, 기존 피처를 함축적으로 더 잘 설명할 수 있는 또 다른 공간으로 매핑해 추출하는 것이며, 기존 피처가 전혀 인지하기 어려웠던 잠재적인 요소(Latent Factor)를 추출하는 것을 의미한다.
- 대표적인 차원 축소 알고리즘에는 PCA, LDA, SVD, NMF 가 있다.
- 차원 축소 알고리즘은 매우 많은 픽셀로 이뤄진 이미지 데이터에서 잠재된 특성을 피처로 도출해 함축적 형태의 이미지 변환과 압축을 수행할 수 있다.
- 변환된 이미지는 원본 이미지보다 훨씬 적은 차원이기 때문에 분류 수행(이미지 분류 등) 시 과적합 영향력이 작아져서 원본 데이터로 예측하는 것보다 예측 성능을 더 끌어올릴 수 있다.
- 텍스트 문서의 숨겨진 의미를 추출하는 데에도 차원 축소 알고리즘이 자주 사용된다.
- 차원 축소 알고리즘은 문서 내 단어들의 구성에서 숨겨져 있는 시맨틱(Semantic)의미나 토픽(Topic)을 잠재 요소로 간주하고 이를 찾아낼 수 있으며, SVD와 NMF는 이러한 시맨틱 토픽(Semantic Topic) 모델링을 위한 기반 알고리즘으로 사용된다.
- 차원 축소는 데이터 시각화에도 아주 유용하다. 차원 수를 둘 또는 셋으로 줄이면 고차원 훈련 세트를 하나의 압축된 그래프로 그릴 수 있고 군집 같은 시각적인 패턴을 감지해 중요한 인사이트를 얻는 경우가 많다.
[같이 보면 좋은 글]
◆ 차원의 저주
차원의 저주는 고차원 공간에서 데이터를 분석할 때 발생하는 여러 문제를 설명하는 용어로, 데이터 희소성, 계산 요구 사항의 증가, 과적합, 거리 지표의 비효율성을 포함한다.
이론적으로 차원의 저주를 해결하는 해결책 하나는 훈련 샘플의 밀도가 충분히 높아질 때까지 훈련 세트의 크기를 키우는 것이나, 불행하게도 실제로는 일정 밀도에 도달하기 위해 필요한 훈련 샘플 수는 차원 수가 커짐에 따라 기하급수적으로 늘어난다.
차원의 저주 문제를 해결하기 위해 차원 축소, 특징 선택, 정규화, 고차원에 적합한 알고리즘 사용 등의 기법이 필요하다.
차원 축소를 위한 접근법
[차원을 감소시키는 두 가지 주요한 접근법]
- 투영: 고차원 공간에 있는 훈련 샘플을 저차원 공간에 그대로 수직으로 옮기는 것
- 매니폴드 학습: 비선형 차원축소법으로 위의 스위스롤처럼 고차원의 꼬여있는 데이터 분포에서 매니폴드를 모델링하는 것
◆ 투영
대부분의 실전 문제는 훈련 샘플이 고차원 공간 안의 저차원 부분 공간(subspace)에 놓여 있다.
아래와 같이 작은 공으로 표현된 2차원에 가깝게 배치된 3차원 데이터셋을
모든 훈련 샘플을 부분 공간에 수직으로 투영하면 아래와 같은 2D 데이터셋을 얻고, 이것을 차원을 축소(3D→2D)했다고 말한다.
그러나 차원 축소에 있어서 투영이 언제나 최선의 방법은 아니다.
아래의 표현된 스위스 롤(swiss roll) 데이터셋처럼 부분 공간이 뒤틀리거나 휘어 있기도 한데,
그냥 평면에 투영시켜버리면 스위스 롤의 층이 서로 뭉개진다. (오른쪽은 스위스 롤이 잘 펼쳐진 데이터셋이다)
◆ 매니폴드 학습
2D 매니폴드는 고차원 공간에서 휘어지거나 뒤틀린 2D 모양이며, 일반적으로 d차원 매니폴드는 d차원 초평면으로 보일 수 있는 n차원 공간의 일부이다. (d < n)
※ 스위스 롤의 경우, d=2, n=3
많은 차원 축소 알고리즘이 훈련 샘플이 놓여 있는 매니폴드를 모델링하는 식으로 작동하며, 이를 매니폴드 학습이라고 한다. 이는 대부분 실제 고차원 데이터셋이 더 낮은 저차원 매니폴드에 가깝게 놓여 있다는 매니폴드 가정 또는 매니폴드 가설에 근거한다.
매니폴드 가정은 종종 다른 가정과 병행되곤 하는데, 바로 처리해야 할 작업(분류 또는 회귀)이 저차원의 매니폴드 공간에 표현되면 더 간단해질 것이라는 가정이다. 그러나 이런 가정이 항상 유효하지는 않는다.
결론적으로는 모델을 훈련시키기 전에 훈련 세트의 차원을 감소시키면 훈련 속도는 빨라지지만 항상 더 낫거나 간단한 솔루션이 되는 것이 아니며, 이는 전적으로 데이터셋에 달려있다.
PCA(Principal Component Analysis)
- PCA는 대표적인 차원 축소 기법이며, 여러 변수 간에 존재하는 상관관계를 이용해 이를 대표하는 주성분을 추출해 차원을 축소하는 기법이다.
- PCA는 입력 데이터의 변동성이 가장 큰 축을 구하고, 다시 이 축에 직각인 축을 반복적으로 축소하려는 차원 개수만큼 구한 뒤 입력 데이터를 이 축들에 투영해 차원을 축소하는 방식이다
- 입력 데이터의 공분산 행렬을 기반으로 고유 벡터를 생성하고 이렇게 구한 고유 벡터에 입력 데이터를 선형 변환하는 방식이다
LDA(Linear Discriminant Analysis)
- LDA는 선형 판별 분석법으로 불리며, PCA와 매우 유사하게 입력 데이터 세트를 저차원 공간에 투영해 차원을 축소하는 기법이다
- 선형 분류 알고리즘이나, 훈련 과정에서 클래스 사이를 가장 잘 구분하는 축을 학습한다. 이 축은 데이터가 투영되는 초평면을 정의 하는 데 사용될 수 있다.
- LDA와 PCA의 중요한 차이는 LDA는 지도학습의 분류에서 사용하기 쉽도록 개별 클래스를 분별할 수 있는 기준을 최대한 유지하면서 차원을 축소한다.
- 이 알고리즘의 장점은 투영을 통해 가능한 한 클래스를 멀리 떨어지게 유지시키므로 다른 분류 알고리즘을 적용하기 전에 차원을 축소시키는 데 좋다.
SVD((Singular Value Decomposition)
- SVD 역시 PCA와 유사한 행렬 분해 기법을 사용하는데, PCA의 경우 정방행렬(행과 열의 크기가 같은 행렬)만을 고유벡터로 분해할 수 있지만, SVD는 정방행렬 뿐만 아니라 행과 열의 크기가 다른 행렬에도 적용할 수 있다.
- SVD는 특이값 분해로 불리며, 행렬 U와 V에 속한 벡터는 특이벡터이며, 모든 특이 벡터는 서로 직교하는 성질을 가진다.
- SVD는 매우 많은 피처 데이터를 가진 고차원 행렬을 두 개의 저차원 행렬로 분리하는 행렬 분해 기법이다.
- 행렬 분해를 수행하면서 원본 행렬에서 잠재된 요소를 추출하기 때문에 토픽 모델링이나 추천 시스템에서 활발하게 사용된다.
NMF(Non-Negative Matrix Factorization)
- NMF는 Truncated SVD와 같이 낮은 랭크를 통한 행렬 근사(Low-Rank Approximation) 방식의 변형이다.
- NMF는 원본 행렬 내의 모든 원소 값이 모두 양수(0 이상)라는 게 보장되면 좀 더 간단하게 두 개의 기반 양수 행렬로 분해될 수 있는 기법을 지칭한다
- NMF는 매우 많은 피처 데이터를 가진 고차원 행렬을 두 개의 저차원 행렬로 분리하는 행렬 분해 기법이다.
- 행렬 분해를 수행하면서 원본 행렬에서 잠재된 요소를 추출하기 때문에 토픽 모델링이나 추천 시스템에서 활발하게 사용된다.
랜덤 투영, 지역 선형 임베딩
◆ 랜덤 투영
랜덤 투영 알고리즘은 랜덤한 선형 투영을 사용하여 데이터를 저차원 공간에 투영한다.
◆ 지역 선형 임베딩
지역 선형 임베딩(LLE)은 비선형 차원 축소(NLDR) 기술이다. PCA나 랜덤 투영과는 달리 투영에 의존하지 않는 매니폴드 학습이다.
그 외 사이킷런에서 제공하는 차원 축소 기법
◆ 다차원 스케일링(MDS)
샘플 간의 거리를 보존하면서 차원을 축소한다. 랜덤 투영은 고차원 데이터에는 적합하지만 저차원 데이터에는 잘 작동하지 않는다.
sklearn.manifold 에서 MDS로 import
◆ Isomap
각 샘플을 가장 가까운 이웃과 연결하는 식으로 그래프를 만들고, 샘플 간의 지오데식 거리를 유지하면서 차원을 축소한다. 그래프에서 두 노드 사이의 지오데식 거리는 두 노드 사이의 최단 경로를 이루는 노드의 수 이다.
sklearn.manifold 에서 Isomap으로 import
◆ t-SNE (t-distributed stochastic neighbor embedding)
비슷한 샘플은 가까이, 비슷하지 않은 샘플은 멀리 떨어지도록 하면서 차원을 축소한다. 주로 시각화에 많이 사용되며 특히 고차원 공간에 있는 샘플의 군집을 시각화할 때 사용된다.
sklearn.manifold 에서 TSNE로 import
[위의 세 가지 기법을 사용하여 스위스 롤을 2D로 축소하는 코드]
from sklearn.manifold import MDS
mds = MDS(n_components=2, normalized_stress=False, random_state=42)
X_reduced_mds = mds.fit_transform(X_swiss)
from sklearn.manifold import Isomap
isomap = Isomap(n_components=2)
X_reduced_isomap = isomap.fit_transform(X_swiss)
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, init="random", learning_rate="auto",
random_state=42)
X_reduced_tsne = tsne.fit_transform(X_swiss)
세 가지 기법을 사용하여 2D로 축소한 그래프를 시각화하는 코드
titles = ["MDS", "Isomap", "t-SNE"]
plt.figure(figsize=(11, 4))
for subplot, title, X_reduced in zip((131, 132, 133), titles,
(X_reduced_mds, X_reduced_isomap, X_reduced_tsne)):
plt.subplot(subplot)
plt.title(title)
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=t, cmap=darker_hot)
plt.xlabel("$z_1$")
if subplot == 131:
plt.ylabel("$z_2$", rotation=0)
plt.grid(True)
plt.show()
▶ 상단의 이미지는 스위스 롤에 대한 MDS, Isomap, t-SNE의 결과를 보여준다.
- MDS: 전체 곡률을 유지한 채로 스위스 롤을 평평하게 만듦.
- Isomap: 곡률을 완전히 없앰.
- t-SNE: 스위스 롤을 평평하게 만들고 약간의 곡률을 보존하는 합리적인 작업을 수행하며 클러스터를 강조시키기 위해 롤을 분해.
▶ 각 알고리즘은 후속 작업에 따라 거시적인 구조를 보존하는 것이 좋을 수도, 나쁠 수도 있음.
다음 내용
[출처]
빅데이터 분석기사 필기 - 수제비
파이썬 머신러닝 완벽 가이드
IBM
핸즈 온 머신러닝
https://for-my-wealthy-life.tistory.com/41
'[파이썬 Projects] > <파이썬 머신러닝>' 카테고리의 다른 글
[머신러닝] 차원 축소 - LDA (0) | 2024.10.24 |
---|---|
[머신러닝] 차원 축소 - PCA (0) | 2024.10.24 |
[머신러닝] 회귀 - 캐글 주택 가격 (0) | 2024.10.23 |
[머신러닝] 회귀 - 자전거 대여 수요 예측 (2) | 2024.10.23 |
[머신러닝] 회귀 트리 (5) | 2024.10.23 |