반응형

파이썬 머신러닝 - 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])

 

반응형

+ Recent posts