빅데이터 공부

PCA

왕초보코딩러 2024. 1. 9. 00:42
728x90

변수의 수 = 차원의 수

차원이 높아지면 분석이 힘들어진다

 

차원의 수를 줄이기 위한 방법

1. 차원 선택

변수 간의 관계를 보고, 덜 중요하거나 불필요한 변수 제거(사용이 쉽지만 정보 손실 커짐)

2. 차원 추출

데이터를 잘 설명하는 새로운 변수를 만들어냄(해석이 힘듦)

 

 

PCA는 차원 추출의 한 가지 방법

PCA를 사용하여 고차원의 데이터를 저차원의 데이터로 바꾼다

 

PCA의 장점: 변수들의 정보를 최대한 보존하여 PCA를 진행한 데이터로 예측 모델을 만들 시, 더 일반화된 결과물을 얻을 수 있다.

PCA의 단점: 여러 변수들의 영향을 받아 만들어진 것이기 때문에, 주성분이 무엇을 의미하는지 해석이 어렵다. 많은 비용과 시간

pca 공부

https://ddongwon.tistory.com/114

 

PCA (Principle Component Analysis) : 주성분 분석 이란?

1. PCA (주성분 분석) PCA는 대표적인 dimensionality reduction (차원 축소)에 쓰이는 기법으로, 머신러닝, 데이터마이닝, 통계 분석, 노이즈 제거 등 다양한 분야에서 널리 쓰이는 녀석이다. 쉽게 말해 PCA

ddongwon.tistory.com


Python PCA

 

1. 필요 라이브러리 임포트

#표준화
from sklearn.preprocessing import StandardScaler

#PCA 실행
from sklearn.decomposition import PCA

#시각화
import seaborn as sns

 

 

2. 표준화

데이터 단위 통일 및 중심 지점을 원점으로 만들기 위해

범주형 변수는 형변환 / 삭제

scaler = StandardScaler()

#새로운 데이터프레임 생성
scaled_df = df

#기존의 데이터프레임 컬럼을 돌면서 표준화
for col in scaled_df.columns:
  scaled_df[col] = scaler.fit_transform(scaled_df[[col]])

 

 

3. PCA로 차원 축소

pca = PCA(n_components=축소할 차원 개수)

pca.fit(scaled_df)
result = pca.transform(scaled_df)

PCA의 파라미터

n_components에는 축소할 차원 개수를 써준다

만약 2개의 차원만 남기고 싶다면 2를 쓴다

 

 

4. 결과를 데이터프레임으로 바꾸기

pca_df = pd.DataFrame(res, colmuns=['PC1', 'PC2' ... 'PCn'])

컬럼은 축소한 차원 개수만큼 만든다

 

 

5. 산점도로 시각화

차원이 2개일 경우

sns.scatterplot(data=pca_df, x ='PC1', y='PC2')

 

 

+ 적절한 주성분 수 구하기(축소할 차원의 수 구하기)

원본 데이터의 PCA 구하기

pca = PCA(n_components = 원래 데이터의 컬럼 수)
pca.fit(scaled_df)  
scaled_df_pc = pca.transform(scaled_df)  
pca_df = pd.DataFrame(scaled_df_pc, columns=['PC1', 'PC2', ... , 'PCn'])

 

 

원본 데이터에 대해 어느 정도의 설명력을 가지는지 확인

pca.explained_variance_ratio: 한 변수가 전체 분산 대비 얼마만큼의 분산을 가지고 있는지 확인

#x값 1,2,3,...,n
x = np.arange(1, len(pca.explained_variance_ratio_)+1)
#y값
var = pca.explained_variance_ratio_

 

 

시각화

sns.barplot(x=x, y=var)

분산 비율 합이 전체 대비 70~80%이상일 때까지로 주성분을 설정