반응형

파이썬 머신러닝 - PCA를 이용한 특성의 수 줄이기

일련의 특성이 주어졌을 때 데이터의 분산을 유지하면서 특성의 수를 줄이기 위해 사용됩니다. 

 

주성분 분석(PCA, Principal component analysis)는 성형 차원 축소 기법으로 대부분의 분산을 유지하는 특성 행렬의 주성분에 샘플을 투영합니다. 또한 주성분 분석은 비지도 학습 기법이며, Target 벡터의 정보를 사용하지 않고 특성 행렬만을 이용하여 특성을 수를 줄입니다.

 

아래의 순서로 특성을 줄여보겠습니다. 

샘플 가져옴 -> 샘플을 표준화 -> PCA 객체 생성 -> 표준화된 샘플을 생성된 PCA로 특성 줄이기

 

 

숫자 손글씨에 대한 데이터 샘플을 가져옵니다. 이 샘픔을 scikit-learn 라이브러리에서 제공해주고 있습니다. 

digits = datasets.load_digits()

 

특성 행렬을 표준화 시킵니다. 이는 평균이 0이고, 표준편차가 1로 만드는 것입니다. 

features = StandardScaler().fit_transform(digits.data)

 

PCA 객체를 이용하도록 지정합니다. 이 때 n_components를 0과 1 사이로 지정하면 pca는 해당 비율의 분산을 유지할 수 있는 최소한의 특성 개수를 반환합니다. 1 이상이면 입력 개수만큰의 특성이 반환됩니다. whiten을 True로 지정하면 각 주성분의 값을 평균이 0이고 분산이 1이 되도록 변환합니다. 

 

아래는 99%의 분산을 유지하도록 객체를 생성하였습니다.

pca = PCA(n_components=0.99, whiten=True)

 

위에서 만든 pca를 수행합니다. 

features_pca = pca.fit_transform(features)

 

결과를 확인해 보면 원본 특성의 개수 64개가 54개로 줄어든 것을 확인할 수 있습니다. 

print("원본 : ", features.shape[1])
print("축소 : ", features_pca.shape[1])

 

 

전체 코드

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn import datasets

digits = datasets.load_digits()

features = StandardScaler().fit_transform(digits.data)

pca = PCA(n_components=0.99, whiten=True)

features_pca = pca.fit_transform(features)

print("원본 : ", features.shape[1])
print("축소 : ", features_pca.shape[1])
반응형

+ Recent posts