[python] PCA를 이용해서 128차원 특성을 10차원으로 축소하기

코딩/python|2020. 7. 31. 08:38

오늘은 PCA를 이용해서 128차원의 특성을 10차원으로 축소시켜보도록 하겠습니다. 다른 말로 하자면, 128개 특성을 10개로 줄이겠다는 뜻입니다. 

 

PCA에 대한 이론적 설명은 이전 포스팅을 참고해주시기 바랍니다. 자세하게 설명해놓았습니다. 

고유값 분해와 뗄레야 뗄 수 없는 주성분분석(PCA)

 

특성의 차원을 축소시키면 일반적으로 정확도는 조금 나빠집니다. 하지만 속도 면에서는 이득이 생깁니다. trade-off죠. 특성이 많을 수록 regressor나 classifier를 훈련시키고 테스트하는데 당연히 좀 더 많은 시간이 필요합니다. 따라서, PCA는 정확도보다는 속도가 중요할 때 사용하는 것이 좋습니다. 

 

훈련셋 특성과 테스트셋 특성을 먼저 표준화해준 다음에, PCA를 적용하는 코드는 다음과 같습니다. 이미 메모리 공간 상에 train_feature 넘파이 행렬과 test_feature 넘파이 행렬이 존재한다고 가정했습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from sklearn.preprocessing import StandardScaler
 
scaler = StandardScaler()    
scaler.fit(train_feature)
train_feature_scaled = scaler.transform(train_feature)
test_feature_scaled = scaler.transform(test_feature)
 
 
from sklearn.decomposition import PCA
pca = PCA(n_components=10)
pca.fit(train_feature_scaled)
 
train_feature_reduced = pca.transform(train_feature_scaled)
test_feature_reduced = pca.transform(test_feature_scaled)
cs

 

만약 20개로 축소하고 싶다면, 10번째 행을 pca = PCA(n_components = 20)으로 바꿔주시면 됩니다. 차원 축소가 잘 이뤄졌는지 확인해보도록 하겠습니다. 

 

 

차원축소가 잘 이뤄졌네요.^^ 128개 였던 훈련 특성과 테스트 특성이 각각 10개로 줄어들었습니다. 

 

 

b스카이비전의 추천글

정규화(normalization)와 표준화(standardization), 머신러닝 성능 향상을 위한 필수 단계

[python] SVM 분류 문제를 통해 배우는 머신러닝 훈련 및 테스트