[데이터사이언스] 주성분 분석(PCA: Principal Component Analysis)과 Biplot 사례 (레드와인 데이터 분석)
오늘은 데이터분석 방법 중 ‘주성분 분석(PCA: Principal Component Analysis)과 Biplot 개념과 사례’에 대해서 알아보겠습니다.
<차례>
1. 주성분 분석 개념
2. 주성분 분석&Biplot 시각화— 레드와인 데이터 분석
🔎 1. 주성분 분석(PCA: Principal Component Analysis) 개념
먼저, ‘주성분 분석’ 이란 ‘어떤 데이터들의 집합에서 가장 크게 해당 데이터를 구분짓는 요소(변수, feature)를 찾기 위한 분석법’입니다.
예를 들어, 아래와 같은 레드와인데이터에서 레드와인들을 구분짓는 가장 큰 요소(변수)가 무엇인지 알아보기 위한 방법으로 주성분 분석을 해보겠습니다.
🔎 2. 주성분 분석 사례 — 레드와인 데이터 분석
아래와 같은 레드와인 데이터에서 레드와인을 구분할 수 있는 주요한 변수가 무엇인지 알아보는 주성분 분석을 해보겠습니다.
우선 레드와인 데이터의 여러 변수(feature)들 중에서 quality 변수는 제외하고 진행하였습니다.
📍< 주성분 분석의 순서 >
- 표준화, 정규화 (standardization)
- Z공분산 매트릭스 계산
- Z공분산 매트릭스에서 고유벡터, 고유값 계산
- 원데이터를 고유벡터에 정사영(projection)하여 매트릭스 변환(PC1,2,3..값이 정렬됨)
📍️ < 분석결과 >
분석은 파이썬 라이브러리 중 sklearn 라이브러리 중 StandardScaler 와 PCA 를 사용하여 진행하였습니다.
from numpy import array
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA#표준화
scaler = StandardScaler()
W = scaler.fit_transform(wine_feature)
print("\n Standardized Data: \n", W)#projection, pca 매트릭스 만들기
pca_wine = PCA()
pca_wine.fit(W)print("\n Eigenvectors: \n", pca_wine.components_)
print("\n Eigenvalues: \n",pca_wine.explained_variance_)B = pca_wine.transform(W)
print("\n Projected Data: \n", B)
위 코드를 실행하면, 표준화된 매트릭스 / 고유벡터(Eigenvectors) / 고유값(Eigenvalues) / PCA 매트릭스(Projected Data) 가 출력이 됩니다. 출력된 PCA 값만 보면 아래와 같습니다.
이렇게 수치로만 보면 해석이 어려우므로, 출력된 pca결과값을 Biplot으로 시각화해보겠습니다.
📍< Biplot 시각화 >
아래는 Biplot 을 만들기 위한 코드입니다.
코드에 대한 가이드는 아래 문서를 참고했습니다.
# Biplot 시각화 def biplot(score,coeff,pcax,pcay,labels=None):
pca1=pcax-1
pca2=pcay-1
xs = score[:,pca1]
ys = score[:,pca2]
n=score.shape[1]
scalex = 1.0/(xs.max()- xs.min())
scaley = 1.0/(ys.max()- ys.min())
plt.scatter(xs*scalex,ys*scaley) for i in range(n):
plt.arrow(0, 0, coeff[i,pca1], coeff[i,pca2],color='r',alpha=0.5) if labels is None:
plt.text(coeff[i,pca1]* 1.15, coeff[i,pca2] * 1.15, "Var"+str(i+1), color='g', ha='center', va='center') else:
plt.text(coeff[i,pca1]* 1.15, coeff[i,pca2] * 1.15, labels[i], color='g', ha='center', va='center') plt.xlim(-1,1)
plt.ylim(-1,1) plt.xlabel("PC{}".format(pcax))
plt.ylabel("PC{}".format(pcay)) plt.grid()biplot(B, pca_wine.components_, 1, 2, labels=wine_feature.columns)
< Biplot 해석하기 >
Biplot은 PCA분석에서 찾은 주성분 (PC1과 PC2) 과 원데이터의 변수간의 상관 관계를 보여주는 그래프입니다. Biplot을 해석하는 방법은 아래와 같습니다.
(1) 각 PC축에 가깝게 평행을 이루는 변수가 해당 PC에 영향을 가장 많이 주는 변수.
(2) 각 빨간선의 길이는 원변수의 분산을 표현, 길이가 길수록 분산이 길다.
(3) 각 빨간선이 가까울수록 서로 상관관계가 있다. (반대로 서로 거리가 멀수록 상관관계가 적다.)
위 그래프 결과를 해석해보면,
(1) 레드와인데이터의 PC1에 가장 큰 영향을 주는 변수는 PC1 축과 가장 평행을 이루고 있는 ‘alcohol(알콜도수)’라는 것을 알 수 있습니다.
(2) 그 다음으로는 PC1에 영향을 주는 변수는 ‘fixed acidity(산도)’라는 것을 알 수 있습니다.
(3) 또한 alcohol 변수와 fixed acidity는 서로 상관관계를 갖고 있다고 볼 수 있습니다.
위와 같은 주성분 분석과 Biplot은 데이터의 변수들이 많을 때, 과연 어떤 변수가 주요한 변수인지 알 수 있다는 점에서 의미가 있다고 생각합니다.
예를 들어, 동일한 레드와인데이터의 변수들 중에서 3가지 변수로만 pca값을 찾고, biplot을 그린 결과는 아래와 같습니다. 위 데이터의 결과와 해석이 많이 달라질 수 있음을 알 수 있습니다.
첫번째 Biplot (11개 변수 데이터를 갖고 분석한)의 PCA 데이터에서는 가장 주요한 성분(PC1)에 가장 영향을 많이 끼친 변수가 ‘alcohol’이었으나,
두번째 Biplot (3가지 변수만으로 분석한 결과)에서는 PC1에 가장 영향을 많이 끼친 변수를 ‘density’로 보여주고 있습니다.
✲주성분 분석 참고자료
- (영상, 한국어) 공분산 행렬의 의미와 PCA(주성분분석, principal component analysis)
- (영상, 영어) StatQuest: PCA main ideas in only 5 minutes!!!
✲ Biplot 해석하는 방법 참고자료
- (영어) https://blogs.sas.com/content/iml/2019/11/06/what-are-biplots.html
- (한국어) https://specialscene.tistory.com/112
이상으로 [주성분 분석(PCA)과 Biplot 의 개념과 사례] 포스팅이었습니다.