반응형
파이썬에서 주성분분석을 하는 방법을 알아봅시다. 설명은 주석에 달아놓았습니다. 절차를 간단히 설명하겠습니다.
- 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()
반응형
댓글