-
PCA를 활용한 차원 축소 방법머신러닝/FAQ 2023. 4. 13. 10:18
오랜만에 포스팅을 올립니다.
PCA를 활용한 차원 축소는 일반적으로 정형데이터 feature(columns) 갯수가 많아 overfitting될 가능성이 있는 경우 해당
차원(일반적으로 feature 갯수 = 차원 갯수)에 대한 정보는 소실되지 않으면서 차원을 줄일 수 있는 방법이다.
(자세한것은 구글에 PCA를 검색하면 쉽게 개념에 대해 접할 수 있음)
이번에는 아주 간략하게 PCA를 구현하는 파이썬 코드를 통해 만들어보고자 한다.
데이터는 데이콘의 전복나이예측경진대회의 데이터를 활용하였고, 방법은 어느 데이터든 동일하다.
참고로 featrue갯수가 많다는것은 보통 50개 이상 정도의 정형데이터의 차원에서 한번 try 해보는것을 추천한다.
import pandas as pd import numpy as np train = pd.read_csv("train.csv") train.head() ## 가장 일반적인 형태로 train data set 불러오기
id gender length diameter height whole weight shucked weight viscra weight shell weight target 1 M 0.605 0.470 0.115 1.1140 0.3925 0.2910 0.3100 15 2 I 0.430 0.315 0.095 0.3780 0.1750 0.0800 0.1045 8 3 I 0.580 0.490 0.195 1.3165 0.5305 0.2540 0.4100 18 4 M 0.535 0.405 0.175 1.2705 0.5480 0.3265 0.3370 13 5 I 0.310 0.235 0.090 0.1270 0.0480 0.0310 0.0400 6 PCA할때 주의할점은 target(y값)까지 함께 차원축소하면 안되므로 , target은 drop한 후에 해줘야한다. 그리고 모든 컬럼은 숫자형이어야한다.
train_01 = pd.get_dummies(train) train_02 = train_01.drop("Target", axis =1 ) # 인코딩 및 y값 drop해서 빼준 train_02를 활용해서 PCA 진행
기본적으로 PCA는 여느 Encoder / Scaler와 다르지 않다.
from sklearn.decomposition import PCA # PCA 불러오기 pca = PCA(n_components= 3) pca_transformed = pca.fit_transform(train_02) train_02_pca = pd.DataFrame(pca_transformed , columns = ["pca_1","pca_2","pca_3"]) train_02_pca.head() # PCA는 Encoder , Scaler 와 같이 fit_transform으로 결과를 내고 이를 다시 데이터프레임 형태로 # 변환해야 쉽게 볼 수 있으므로 변형하고 새로운 컬럼 이름을 생성해서 표현한다. # 위의 pca_1 , pca_2,pca_3 은 모둔 컬럼의 정보를 소실되지 않고 담고 있다
최종적으로 PCA가 끝난 경우 해당 데이터를 test에도 동일하게 반영해줘야 머신러닝 알고리즘으로 학습 및 예측할 수 있다.
Feature가 많다면 꼭 한번 써보는것을 추천한다. 특히 결과가 안나오는 경우도 차원축소를 통해 Overfitting을 회피할 수도 있다.'머신러닝 > FAQ' 카테고리의 다른 글
평가 산식 (metrics) , 데이터 타입에 대한 대응 (0) 2023.04.13 데이콘 관련 Tip(High scoring) (0) 2022.09.01 Feature Importance를 활용한 피쳐 엔지니어링 (0) 2022.09.01 Scaling - MinMaxScaler (0) 2022.09.01 데이콘 관련 FAQ & Tip (0) 2022.08.25