데이터 분석을 효과적으로 하기 위해서는, 데이터에 실질적으로 영향을 주는 변수들로 변수 개수를 최소화하는 것이 좋습니다.
이번 시간에는, 주성분 분석 방법을 사용하여 변수 개수를 최소화해 보겠습니다.
데이터 불러오기 및 전처리
먼저 iris 데이터를 불러와서, 분석하고자 하는 데이터를 만들어 줍니다.
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
# Load iris data
iris = load_iris()
# Data formatting
iris = pd.DataFrame(iris.data, columns=iris.feature_names)
iris['Class'] = load_iris().target
iris['Class'] = iris['Class'].map({0:'Setosa', 1:'Versicolour', 2:'Verginca'})
변수 간의 크기 차이가 주성분 분석에 영향을 주는 것을 방지하기 위해, StandardScaler 함수를 사용하여 변수들을 정규화합니다.
이때, Class열은 숫자가 아니므로 제거해 줍니다.
# Normalization for numeric variables only
x = iris.drop(columns='Class')
x = StandardScaler().fit_transform(x)
print(pd.DataFrame(x).head())
주성분 개수 선정
다음으로는, 주성분을 몇 개로 할지 결정해 보겠습니다.
먼저, 임시로 주성분의 개수를 네 개로하고 explained_variance_ratio_값을 계산해 봅니다.
explained_variance_ratio_은, 전체 데이터에서 각 주성분이 설명할 수 있는 분산의 비율을 의미합니다.
첫 번째 주성분이 73%, 두 번째 주성분이 23%를 설명할 수 있으므로, 주성분의 개수는 두 개로 충분함을 알 수 있습니다.
# Find the number of principal components
pca = PCA(n_components=4)
pca_fit = pca.fit(x)
print("Variance explanatory power : ", pca.explained_variance_ratio_)
plt.title('Scree plot')
plt.xlabel('Number of components')
plt.ylabel('Explained variance')
plt.plot(np.arange(1,len(pca.explained_variance_ratio_)+1), pca.explained_variance_ratio_, 'o-')
plt.show()
주성분 분석을 통한 변수 최소화
이제 주성분의 개수를 두 개로 한 뒤 fit_transform() 함수를 적용하여, 새로운 데이터프레임을 만들어 봅니다.
두 개의 주성분으로도, 네 개의 변수를 사용했을 때와 유사한 산점도를 나타낼 수 있음을 알 수 있습니다.
# Data with two principal components
pca = PCA(n_components=2)
PCA_components = pca.fit_transform(x)
PCA_iris = pd.DataFrame(data=PCA_components, columns=['PC1','PC2'])
print(PCA_iris.head())
PCA_iris['Class'] = iris.Class
sns.pairplot(PCA_iris, diag_kind='auto', hue='Class')
plt.show()
# Scatter plot from original data
sns.pairplot(iris, diag_kind='auto', hue='Class')
plt.show()
이와 같이 주성분 분석 방법을 사용하면, 변수 개수를 최소화하여 데이터 분석이 가능함을 확인해 보았습니다.
'파이썬' 카테고리의 다른 글
분류분석을 통한 머신러닝 이해 (0) | 2025.05.01 |
---|---|
회귀분석을 통한 머신러닝 이해 (0) | 2025.04.26 |
ProfileReport : 데이터 분석을 빠르게 (2) | 2025.04.12 |
두 집단의 평균 차이를 통계적으로 판단 (0) | 2025.04.06 |
이상치(Outlier) 제거 하기 (2) | 2025.04.05 |