본문 바로가기
차원축소/PCA (주성분분석)

[파이썬 머신러닝] 주성분분석 (PCA)

by 만다린망고 2023. 9. 7.
반응형

파이썬에서 주성분분석을 하는 방법을 알아봅시다. 설명은 주석에 달아놓았습니다. 절차를 간단히 설명하겠습니다. 

- iris 데이터를 불러옵니다. 
- iris 데이터를 데이터프레임으로 만들어줍니다. 
- 독립변수만 추려서 x 에 넣어줍니다. 독립변수는 4개로, 4차원 데이터입니다.  
- 데이터를 정규화합니다. 평균이 0, 분산이 1이 되게 하는 것입니다. 
- PCA 객체를 생성합니다. 최대 차원인 4를 넣어줍니다.   
- 주성분분석을 수행하고 분산설명력을 확인합니다. 2개의 차원이면 충분해보입니다. 
- 2개의 차원(주성분벡터)을 얻도록 주성분분석을 다시 수행
- 산점도 그래프를 그림

import pandas as pd
from sklearn.datasets import load_iris

iris=load_iris()

df=pd.DataFrame(iris.data,columns=iris.feature_names)
df['y']=iris.target
df['y']=df['y'].map({0:'setosa',1:'versicolour',2:'virginica'})

#x는 4차원 데이터
x=df.drop(columns='y')

#데이터 정규화
from sklearn.preprocessing import StandardScaler
x=StandardScaler().fit_transform(x)

#PCA 시작
from sklearn.decomposition import PCA 

PCA1=PCA(n_components=4) #pca 객체 생성

#주성분분석 수행
PCA1_fit=PCA1.fit(x)

#분산설명력 확인
PCA1_fit.explained_variance_ratio_
  #array([0.72962445, 0.22850762, 0.03668922, 0.00517871])

#주성분 개수 2개로 분석 재수행
PCA2=PCA(n_components=2) #pca 객체 생성
PCA_vec=PCA2.fit_transform(x)

#데이터프레임으로
PCA_df=pd.DataFrame(data=PCA_vec,columns=['pc1','pc2'])
PCA_df['y']=df['y']

#시각화
import matplotlib.pyplot as plt

groups = PCA_df.groupby('y')

fig, ax = plt.subplots(1,1)
for name,data in groups:
    ax.plot(data['pc1'], data['pc2'], label=name,linestyle='',marker='o')
ax.legend()
plt.show()
반응형

댓글