반응형
파이썬 머신러닝 - Kernel PCA를 이용한 비선형 특성의 수 줄이기
PCA는 특성 행렬의 차원을 축소하고, 표준 PCA는 샘플을 선형적으로 투영하여 특성을 축소합니다. 데이터가 선형적으로 구분되지 않으면 선형 변환이 잘 되지 않습니다. 하여 커널 함수를 이용하여 선형적으로 구분되지 않은 데이터를 선형적으로 구분되는 고차원 공간에서 주성분으로 투영된 결과를 반환하도록 합니다.
Kernel PCA에 사용할 수 있는 커널은 rbf(가우시안 방사 기저 함수 커널), poly(다항식 커널), sigmoid(시그모이드 커널), linear(선형 투영 커널) 등이 있습니다. linear를 이용하면 표준 PCA와 동일한 효과를 나타냅니다.
rbf 커널을 이용하는 코드를 구현해보겠습니다.
먼저 scikit-learn 의 함수를 이용하여 swiss roll data를 만들어 보겠습니다.
이는 선형적으로 구분되지 않은 데이터입니다.
features, t = make_swiss_roll(n_samples=1000, noise=0.1, random_state=42)
방사 기저 함수 rbf를 사용하여 Kernel PCA를 적용시킵니다.
kpca = KernelPCA(n_components = 1, kernel="rbf", gamma=15)
features_kpca = kpca.fit_transform(features)
아래와 같이 3개의 특성을 1개의 특성으로 축소한 것을 볼 수 있습니다.
print("원본 : ", features.shape[1])
print("축소 : ", features_kpca.shape[1])
전체 코드
from sklearn.datasets import make_swiss_roll
from sklearn.decomposition import KernelPCA
features, t = make_swiss_roll(n_samples=1000, noise=0.1, random_state=42)
kpca = KernelPCA(n_components = 1, kernel="rbf", gamma=15)
features_kpca = kpca.fit_transform(features)
print("원본 : ", features.shape[1])
print("축소 : ", features_kpca.shape[1])
반응형
'파이썬 > 파이썬 사이킷런' 카테고리의 다른 글
파이썬 머신러닝 / scikit-learn으로 k-최근접 이웃 알고리즘(KNN) 알아보기 (0) | 2020.09.26 |
---|---|
파이썬 머신러닝 - PCA를 이용한 특성의 수 줄이기 (0) | 2020.09.13 |
파이썬 머신러닝 Scikit-learn 주요 데이터셋 종류 (0) | 2020.09.13 |