본문 바로가기

빅데이터분석기사_실기/제1유형: 데이터 전처리

데이터 변환: 차원축소 PCA, 주성분 분석

주성분 분석 (PCA, Principal Component Analysis)

  • 여러 변수들의 변량을 "주성분(Principal Component)"이라고 불리는, 서로 상관성이 높은 여러 변수들의 선형 조합으로 만든 새로운 변수들로 요약, 축소하는 기법
  • 첫번째 주성분으로 전체 변동을 가장 많이 설명
  • 두번째 주성분으로는 첫번째 주성분이 설명하지 못하는 나머지 변동을 정보의 손실없이 가장많이 설명할 수 있도록

PCA 실습

  • 실습 데이터 준비
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

file_path = 'https://raw.githubusercontent.com/YoungjinBD/dataset/main/iris.csv'
iris = pd.read_csv(file_path)

iris

** PCA에는 연속형 변수만 사용하기 때문에 범주형 변수인 species 컬럼은 삭제한다 **

df = iris.drop(["species"], axis = 1)

df.head()


수치형 변수 정규화

: 변수 간의 스케일 차이가 나면 스케일이 큰 변수가 주성분에 영향을 많이 주기 때문에 PCA전에 변수를 표준화/정규화 시켜줘야함

#Z-표준화
from sklearn.preprocessing import StandardScaler

df['sepal_length'] = StandardScaler().fit_transform(df[['sepal_length']])
df['sepal_width'] = StandardScaler().fit_transform(df[['sepal_width']])
df['petal_length'] = StandardScaler().fit_transform(df[['petal_length']])
df['petal_width'] = StandardScaler().fit_transform(df[['petal_width']])

df.head()


PCA 수행

from sklearn.decomposition import PCA

pca = PCA(n_components = 4)
p_score = pca.fit_transform(df)
print(p_score.shape)
print(pca.explained_variance_ratio_)

결과

  • n_components에는 PCA로 변환할 차원(변수)의 수를 의미함: 여기서는 4로 설정하여 데이터의 모든 변수의 기여도를 살펴볼 것임
  • p_score.shape 결과가 (150,4)라는건 원본 데이터가 150*4 2차원 배열로 변환됨을 알 수 있음
  • explain_variance_ratio_ 변수는 변환된 각각의 차원의 기여도를 보여준다.
  • 첫번째 PCA 변환요소(차원)만으로도 전체 변동성의 약 73%를 설명 가능하다.
  • 두번째 요소(차원)은 약 23%를 차지한다.
  • 즉, 2개 요소(차원)로만 변환해도 원본 데이터의 변동성을 약 96% 설명 가능하므로, 변수를 원래 4개에서 2개로 줄일 수 있음!