PCA 의 적용 방안 - 전체 feature vs. 일부 feature
해결됨
[개정판] 파이썬 머신러닝 완벽 가이드
강사님, 안녕하세요? 좋은 강의 항상 감사드립니다. PCA 적용 실습 사례를 보다가 궁금한 점이 있어 질문을 드립니다. 본 단원 신용카드 실습 예제에서 전체 feature 에 대해서 PCA 를 진행하여 차원축소를 시도했을 때 변수를 줄여 효율성을 높이되 모델 성능에서는 약간의 손실이 발생하였는데요, 전체 feature 에 대한 PCA 적용이 아닌, 물리적인 의미에 유사성이 있으면서도 서로 상관도가 높은 feature 들끼리만그룹을 만들어서 feature 그룹 별 PCA 를 진행하는 경우, 변환된 PC score 중 변동성이 높은 상위 feature 일부만 선택하더라도 모델의 예측성능이 향상될 가능성이 있지는 않을지 문의드립니다. 예를 들어 PAY0~PAY6 끼리 묶어서 첫번째 PCA 를 돌리고, BILL_AMT1~BILL_AMT6끼리만 묶어서 두번째 PCA 를 돌려서 전체 데이터셋의 feature 간 다중공선성을 없애는 방식으로 PCA 를 활용하는 방법을 문의드리는 것이구요, 본 예제에서 사용된 신용카드 데이터셋을 가지고 이렇게 변환해서 feature 재정의를 한 경우와 하지 않은 경우에 대한 모델 예측성능을 비교해 보면 train / test set 분류 상황에 따라서 유사하거나 약간 좋아지는 경향도 보이는 것도 같은데... 예제를 가지고 해 본 것이다보니 .. 현업 데이터분석에 활용시 이렇게 접근하는 것이 실제로 의미가 있는 접근 방법일 수 있는 것인지, 혹은 방법론 상 문제는 없을지요..? (전체 feature가 아닌 부분적인 feature 집합에 한정한 PCA 적용 방안) 감사합니다. from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA credit_ds = pd.read_csv('pca_credit_card.csv', header=1) # 1은 연체, 0은 연체 아님 SS_pay = StandardScaler() SS_bill = StandardScaler() pca_pay = PCA() pca_bill = PCA() SS_pay.fit(credit_ds.iloc[:,5:11]) pay = SS_pay.transform(credit_ds.iloc[:,5:11]) pca_pay.fit(pay) pay_transformed = pd.DataFrame(pca_pay.transform(pay), columns=['pay_PC1','pay_PC2','pay_PC3','pay_PC4','pay_PC5','pay_PC6']) credit_ds.iloc[:,5:11] = pay_transformed SS_bill.fit(credit_ds.iloc[:,11:17]) bill = SS_bill.transform(credit_ds.iloc[:,11:17]) pca_bill.fit(bill) bill_transformed = pd.DataFrame(pca_bill.transform(bill), columns=['bill_PC1','bill_PC2','bill_PC3','bill_PC4','bill_PC5','bill_PC6']) credit_ds.iloc[:,11:17] = bill_transformed credit_ds['class'] = credit_ds['default payment next month'] credit_ds = credit_ds.drop(['ID', 'default payment next month'], axis=1) plt.figure(figsize=(15,15)) sns.heatmap(credit_ds.corr(), annot = True)
- pca
- feature
- 통계
- python
- extraction
- 머신러닝 배워볼래요?





