묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[개정판] 파이썬 머신러닝 완벽 가이드
Truncated SVD, PCA, NMF 관련 질문 드림
강사님 안녕하세요? 이번단원에서 유독 질문을 많이 드리게 되네요 ^^;; 질문1) Feature engineering 방법론 측면 TSVD-PCA 활용 관련 경우의 수 Truncated SVD 의 경우 데이터 표준화를 한 경우는 표준화한 PCA 와 동일해 진다는 부분은 잘 이해하였습니다. 다만 이것저것 돌려 보니, 표준화를 하지 않은 Truncated SVD 는 표준화 한 경우에 비해 데이터 경향도 좀 바뀌는 듯 한데요, 그럼 다양한 feature engineering 방법론 관점에서 아래 3가지 다른 approach 가 가능하다고 정리하면 될지요? 1) 표준화를 하지 않은 Truncated SVD 2) 표준화를 한 Truncated SVD = 표준화를 한 PCA (동일결과) 3) 표준화를 하지 않은 PCA 3)번의 경우도 사실 2)번과 경향은 동일하고 scaling 만 바뀌는 case 이긴 하지만, 원본 변수의 scaling 에 따른 가중치 효과가 있을 것이므로 예측 모델의 성능에도 영향이 있을 듯 하고.... 1) 번은 아래 그래프처럼 경향자체가 많이 달라져서 역시 모델 성능 차이를 줄 수 있을 듯 해서 입니다 (경우에 따라 모델 성능개선을 기대해 볼 수 도 있는) 질문 2) NMF 의 개념 및 componet 개수 가이드라인 NMF 역시 결국은 다변량 변수로 정의되는 초공간에서의 좌표 축을 회전시켜서 새로운 측면의 변수를 뽑아내는 개념이 아닐까... 라고 이해를 해 보았는데요, 인자분석 (Factor Analysis) 과 유사한 개념이라고 이해하면 될지.. 질문 드립니다. Factor Analys 에서도 차원을 줄이되 합성 feature 를 추출해서 포괄적인 상위개념의 변수를 정의해서 모델링을 하거나, 데이터를 해석하는 개념으로 이해하고 있어서... NMF 도 이와 유사한 개념이 아닐까 (물론 계산 과정이나 결과물 자체는 다르겠지만) 생각이 들어서요~ 다만 본 단원 실습인 붓꽃의 4개 feature 자료에 대해서 component 개수를 제약두지 않고 NMF 를 돌렸을 때는 4개의 신규 feature 가 나오던데요, 아마도 원본 데이터의 차원 수만큼 new feature 가 나오는 것으로 이해가 됩니다. PCA 나 인자분석 (FA) 에서는 주성분분산 크기를 가지고 extract 된 feature 의 개수를 가늠하는데, NMF 의 경우 feature 개수를 가늠하는 가이드라인이 있을지.. (예제에서는 두 개로 하셨는데, 그 이유에 대한 설명이 있지는 않아서요~) FA 는 PCA 와 달리 new feature 간 중요도 차이 없이 모두 평등한데, NMF 도 extract 된 new feature 별 중요도가 있을지 혹은 FA 와 같이 모든 변수의 중요도가 동일한지... 도 궁금합니다.
-
해결됨[개정판] 파이썬 머신러닝 완벽 가이드
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)