인프런 커뮤니티 질문&답변

작은빗방울님의 프로필 이미지
작은빗방울

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

PCA 관련 질문

작성

·

167

0

안년하세요 강사님, 6장에서 신용카드 문제에 대해서 질문이 있습니다.

책에서는 전체 피처를 6개로 줄입니다. 저는 상관관계가 높은 피처만을 차원축소하고 나머지 피처는 그대로 사용해보려고 했는데 정확도가 많이 낮아졌습니다. 기존에 상관관계가 높았던 BILL_AMT1~6까지를 축소하고 이를 원데이터에서 BILL_AMT1~6 컬럼을 드랍한 데이터프레임과 합쳐서 학습 및 평가를 수행했는데 이 과정에서 예측성능이 안좋아진 이유가 있을까요?

답변 3

1

권 철민님의 프로필 이미지
권 철민
지식공유자

해당 경우에 cv=3 으로 설정하면 성능이 잘 안나오는 군요.  cv=5로 적용하니 원본 데이터 정도로 성능이 나옵니다. cv=3으로 할때 뭔가 학습/검증 중 어느 한세트가 성능이 완전히 잘못 나온것 같습니다.

아하 그렇군요 교차검증 세트를 늘리니 성능이 확 올라가는 듯 합니다!

매번 감사합니다:)

0

import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score

df=pd.read_excel('/content/drive/MyDrive/credit_card.xls',sheet_name='Data',header=1)
df.rename(columns={'PAY_0':'PAY_1','default payment next month':'default'},inplace=True)

X_features=df.drop(['ID', 'default'],axis=1)
y_target=df['default']

bill_cols=['BILL_AMT'+str(i) for i in range(1,7)]
scaler=StandardScaler()
df_cols_scaled=scaler.fit_transform(X_features[bill_cols])
pca=PCA(n_components=2)
col_pca=pca.fit_transform(df_cols_scaled)
bill=pd.DataFrame(data=col_pca, columns=['bill_pca_1','bill_pca_2'])

df0=df.copy()
pca_df=pd.concat([df0,bill],axis=1)
pca_df.drop(bill_cols,axis=1,inplace=True)
X_features1=pca_df.drop('default',axis=1)
y_target=pca_df['default']
rf=RandomForestClassifier(n_estimators=300, random_state=156)
scores=cross_val_score(rf, X_features1, y_target,scoring='accuracy', cv=3)
print('평균 정확도:', np.round(np.mean(scores),4))

이런 식으로 코드를 짜봤는데 0.61정도로 예측 성능이 많이 떨어지는 것 같습니다

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

만드신 소스코드를 적용해 보지 않아서 원인을 모르겠습니다.

여기에 만드신 소스코드를 올려봐 주시겠습니까?

작은빗방울님의 프로필 이미지
작은빗방울

작성한 질문수

질문하기