IE가 어른이 되기까지

[Machine Learning] 주성분분석 Scikit Learn으로 구현하기 본문

ML/Python

[Machine Learning] 주성분분석 Scikit Learn으로 구현하기

기모랑의 초코 2023. 2. 14. 17:39

 

 

 

 

https://piscesue0317.tistory.com/51
 

[Machine Learning] 주성분 분석 (비지도학습 / 데이터 축소)

만약 예측 시 필요한 독립변수 간 편차가 다르면 어떻게 해야할까요 ? 이런 경우, 각 독립변수에 적절한 가중치를 반영하여 유용한 변수를 생성할 수 있습니다. 이것이 바로 이 글에서 다루고자

piscesue0317.tistory.com

 

먼저, 위 글은 주성분분석에 대한

 이론을 설명하고 있습니다.

 

 

 


 

 

 

https://piscesue0317.tistory.com/32
 

[Machine Learning] Scikit - Learn을 이용한 데이터 분석 (지도학습 / 분류)

Machine Learning (머신러닝) 이란 기계가 스스로 학습하는 것을 의미합니다. 특히 사람이 지정해준 규칙이나 모델을 스스로 학습하게 됩니다. https://piscesue0317.tistory.com/27 [Data Science] 지도학습과 비지

piscesue0317.tistory.com

 

 

 

또한, 위 글은 본 알고리즘 모델링을

하기 이전의 과정입니다.

 

해당 과정을 수행하여야 앞으로 진행되는

모델링이 가능합니다.

 

 

 


 

 

 

Scikit - Learn에서는 모델 선택과 훈련을 시킬 때

fit (학습)과 predict (적용) 의 순서를 따릅니다.

 

 

 

 

원변수 상관관계 분석

 

import matplotlib.pyplot as plt

plt.matshow(X.corr())
plt.show()

 

 

%matplotlib inline

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(10,8))
sns.heatmap(housing.corr(),annot=True)

 

 

 

원 변수의 상관관계를 출력해본 결과

변수들 간 상관관계가 존재함을 알 수 있습니다.

 

특히 꽤나 높은 상관관계를 보이는 변수들도 있기에

다중공선성과 같은 위험을 방지해주는 주성분 분석을 수행해보도록 하겠습니다.

 

 

 

 

 

모델 선택, 학습, 적용

 

from sklearn.decomposition import PCA

# 1. Define
pca = PCA(n_components=9)

# 2. Fit (학습)
pca.fit(X)

# 3. Transform (적용)
X_pc = pca.transform(X)

# 주성분값을 DataFrame으로 변경
X_pc_df = pd.DataFrame(X_pc)
display(X_pc_df)

# 주성분별 분산의 비율
display(pca.explained_variance_ratio_)

 

 

sklearn.decomposition 모듈에서

PCA를 호출합니다.

 

주성분별 분산의 누적 비율을 살펴본 결과,

제 1주성분의 설명력이 99%인 것을 확인해볼 수 있습니다.

 

이런 경우, 위 개념 설명에 의하면

주성분의 개수를 1로만 지정할 수 있겠습니다.

 

 

 

 

 

주성분간 상관관계 분석

 

import matplotlib.pyplot as plt

plt.matshow(pd.DataFrame(X_pc_df).corr())
plt.show()

 

주성분 분석을 실행한 후,

주성분 간 상관관계를 시각화해본 결과 상관관계가 0임을 알 수 있습니다. 

 

 

 

 

 

 

 

Comments