Recent Posts
Recent Comments
Link
Today
Total
12-28 01:00
관리 메뉴

Hippo's data

PCA(Principal Component Analysis) 주성분 분석 구현 본문

ML(Machine Learning)

PCA(Principal Component Analysis) 주성분 분석 구현

Hippo's data 2024. 1. 14. 00:07
728x90

오늘은 PCA(Principal Component Analysis) 주성분 분석에 대해 알아보겠습니다!!

주성분 분석은 데이터의 차원을 줄이는(차원축소) 방법인데요 데이터의 분산을 최대한으로 유지하는 것이 포인트입니다

https://www.machinelearningplus.com/machine-learning/principal-components-analysis-pca-better-explained/

 

# 왜 분산을 최대한으로 유지해야하는가?

-> 우리의 목적은 정보의 손실을 최대한 줄이면서 차원을 축소하는 것

-> 데이터들이 많이 흩어져 있어야 차원을 줄일때(투영, projection) 겹치는 부분이 적어짐

-> 겹치는 부분인 적으면 그만큼 정보의 손실을 방지할 수 있음

 

 

# 사용목적?

1. 시각화

-> 데이터가 3차원 이상의 데이터는 한 눈에 시각화 하기 어려우므로 차원 축소를 통해 시각화에 활용하기 위함

2. 노이즈 줄이기

-> 쓸모없는 특성들을 없애서 노이즈를 줄이기 위함 

3. 전처리(preprocessing)시 데이터 복잡성 줄이기

 

 

# PCA전 스케일링  진행(필수)

-> 데이터 세트의 모든 특성들의 중요도를 동일하게 판단하기 위함

https://hipposdata.tistory.com/35

 

스케일링(Scaling)

오늘은 데이터 전처리 과정중 하나인 스케일링(Scaling)에 대해 알아보겠습니다 여러 변수에 있는 각 수치형 데이터는 상대적 크기에 따라서 모델 생성에 영향을 끼칠 수 있는데요 쉬운 예시로 0~1

hipposdata.tistory.com

-> 데이터 스케일링 방법 구현

 

 

<구현>

# 불러오기

from sklearn.decomposition import PCA

 

# PCA 객체로 주성분 개수만큼 출력

pca = PCA(n_components= 3)            # 3개의 주성분(변수)을 유지하도록 설정

pca = PCA(n_components= 0.9)            # 90%의 분산을 보존하는 만큼 주성분 개수(변수 개수) 선택
reduced_data = pca.fit_transform(data)   # 데이터 차원 축소

 

# 주성분의 설명된 분산 값 확인

print(pca.explained_variance_) 

 

# 주성분의 설명된 분산 비율 확인 / 각 주성분들의 기여율(원본 데이터를 얼만큼 반영하는지) 확인

print(pca.explained_variance_ratio_

예) [0.65  0.2  0.05]

-> 첫번째 요소(변수)가 65%만큼 기여함 / 두번째는 20% ...

 

 

# 주성분 개수(변수 개수) 설정 기준

-> 보통 기여율합(누적 기여율)이 0.8 ~ 0.9 정도까지 주성분 개수 설정함

728x90