IRIS 데이터로 PCA 적용해보겠습니다.
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
iris_pd = pd.DataFrame(iris.data, columns = iris.feature_names)
iris_pd['species'] = iris.target
iris_pd.head()
# StandardScaler 데이터 스케일링
from sklearn.preprocessing import StandardScaler
iris_ss = StandardScaler().fit_transform(iris.data)
이렇게 StandardScaler를 통해 데이터들을 스케일링까지 해주었습니다.
2. PCA 적용하기
from sklearn.decomposition import PCA
def get_pca_data(ss_data, n_components = 2):
pca = PCA(n_components=n_components)
pca.fit(ss_data)
return pca.transform(ss_data), pca
iris_pca, pca = get_pca_data(iris_ss, 2)
iris_pca.shape
n_components : 주성분을 몇 개 찾을지 정하는 변수입니다. 현재 코드에서는 2개로 주성분을 2개만 찾게 됩니다.
그래서 원래 shape이 (150, 4) 였으나, 주성분으로 인해 (150, 2)가 되었습니다.
3. 주성분 확인하기
2개의 주성분을 나타내고 있고, 각 주성분이 원래 데이터의 4개의 변수에 대해 얼마나 영향을 받는지를 나타내는 값들입니다.
즉, 첫 번째 주성분은 3번째와 4번째 변수가 특히 더 강하게 기여하고 있음을 알 수 있습니다.
두 번째 주성분은 2번째 변수가 가장 큰 기여를 하고 있는 것을 확인 할 수 있습니다.
그러므로 이 정보는 PCA가 원래 데이터를 어떤 방식으로 요약했는지, 각 변수들이 새롭게 정의된 주성분에 어떻게 기여하는지를 보여줍니다.
4. 새로운 주성분 축을 기준으로 변환된 새로운 데이터를 가져오겠습니다.
def get_pd_from_pca(pca_data, cols=['PC1', 'PC2']):
return pd.DataFrame(pca_data, columns=cols)
iris_pd_pca = get_pd_from_pca(iris_pca)
iris_pd_pca['species'] = iris.target
iris_pd_pca.head()
이와 같이 PCA를 사용하면 기존의 데이터를 새로운 주성분 축을 기준으로 변환하게 되고, 그 결과로 새로운 형태의 데이터가 생기게 됩니다.
5. 랜덤포레스트를 사용하여 학습하고 교차 검증을 통해 모델의 정확도를 평가하겠습니다.
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
def rf_scores(X, y, cv=5):
rf = RandomForestClassifier(random_state=13, n_estimators=100)
scores = cross_val_score(rf, X, y, scoring='accuracy', cv=cv)
print('CV accuracy scores: {}'.format(scores))
해당 코드를 통해 기존의 데이터와 스케일링한 데이터, PCA를 거친 데이터들을 모두 넣고 각 fold에서의 정확도(accuracy) 결과를 확인 해보겠습니다.
해당 배열이 5개인 이유는 fold를 5개로 나눴기 때문입니다.
결과를 보니 기존의 데이터와 스케일링 데이터의 정확도는 둘 다 평균 96%로 확인이 되었습니다. 그리고 스케일링 했을 때와 변함이 없는 것 또한 확인 되었습니다.
이제 저희가 지금까지 해왔던 PCA를 한 데이터의 정확도 평가입니다. 확실히 평균이 92%로 4% 정도 떨어졌지만 그래도 높은 정확도를 보여주는 것으로 보입니다.
즉, 주성분을 새롭게 구성하고 주성분을 기준으로 새로운 데이터를 뽑아내어 해도 정확도는 살짝 내려가지만 속도는 매우 빨라지게 되었습니다.
이상으로 python을 활용하여 PCA를 구현하는 내용을 마치겠습니다.
이 글은 제로베이스 데이터 분석 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.
'Data Analyst > ML' 카테고리의 다른 글
[Zero-base] 군집화(Clustering) - 2 (0) | 2024.10.11 |
---|---|
[Zero-base] 군집화(Clustering) - 1 (0) | 2024.10.11 |
[Zero-base] 주성분 분석(PCA, Principal Component Analysis) - 1 (0) | 2024.10.10 |
[Zero-Base] 앙상블 기법 - 2 (1) | 2024.10.08 |
[Zero-base] 앙상블 기법 - 1 (3) | 2024.10.08 |