AI·빅데이터 융합 경영학 Study Note

[ML수업] 8주차 실습5: feature engineering- Dimensionality Reduction (차원 축소) 본문

AI·ML

[ML수업] 8주차 실습5: feature engineering- Dimensionality Reduction (차원 축소)

SubjectOwner 2023. 11. 21. 15:53
### PCA(Principal Component Analysis, 주성분분석)
원 데이터의 분포를 최대한 보존하면서 고차원 공간의 데이터들을 저차원 공간으로 변환하는 기법  
 

from sklearn.decomposition import PCA

pca = PCA(n_components=10)
X_train_pca = pca.fit_transform(X_train_sc3)
X_test_pca = pca.transform(X_test_sc3)

print(X_train_pca.shape)
svm.fit(X_train_pca, y_train).score(X_test_pca, y_test)

#(426, 10)
#0.9790209790209791
# 각 주성분에 의해 설명되는 분산의 비율
plt.bar(range(len(pca.explained_variance_ratio_)), pca.explained_variance_ratio_)

# 적절한 주성분의 갯수를 결정하는 방법 중 하나
max_d = num_d = X_train.shape[1]
pca = PCA(n_components=max_d).fit(X_train_sc3)
cumsum = np.cumsum(pca.explained_variance_ratio_) #분산의 설명량을 누적합

#이 줄에서 설명 많이 함. 막대그래프에서 막대들을 다 더해서 몇 이상이 되는지를 여기서 결정
#PCA는 대부분의 데이터가 0인 경우에만 쓴다.
num_d = np.argmax(cumsum >= 0.99) + 1             #분산의 설명량이 99%이상 되는 차원의 수
if num_d == 1: num_d = max_d
pca = PCA(n_components=num_d, random_state=0)  
X_train_pca = pca.fit_transform(X_train_sc3)
X_test_pca = pca.transform(X_test_sc3)

print(X_train_pca.shape)
svm.fit(X_train_pca, y_train).score(X_test_pca, y_test)

#(426, 15)
#0.986013986013986