728x90
변수의 수 = 차원의 수
차원이 높아지면 분석이 힘들어진다
차원의 수를 줄이기 위한 방법
1. 차원 선택
변수 간의 관계를 보고, 덜 중요하거나 불필요한 변수 제거(사용이 쉽지만 정보 손실 커짐)
2. 차원 추출
데이터를 잘 설명하는 새로운 변수를 만들어냄(해석이 힘듦)
PCA는 차원 추출의 한 가지 방법
PCA를 사용하여 고차원의 데이터를 저차원의 데이터로 바꾼다
PCA의 장점: 변수들의 정보를 최대한 보존하여 PCA를 진행한 데이터로 예측 모델을 만들 시, 더 일반화된 결과물을 얻을 수 있다.
PCA의 단점: 여러 변수들의 영향을 받아 만들어진 것이기 때문에, 주성분이 무엇을 의미하는지 해석이 어렵다. 많은 비용과 시간
pca 공부
https://ddongwon.tistory.com/114
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%이상일 때까지로 주성분을 설정
'빅데이터 공부' 카테고리의 다른 글
[Pandas] 데이터 변형하기 - groupby (0) | 2024.10.22 |
---|---|
[Pandas] DataFrame (0) | 2024.07.14 |
[빅데이터분석기사 실기] 제3유형-가설검정 (0) | 2024.01.08 |
비지도학습-클러스터링 (0) | 2024.01.08 |
[빅데이터분석기사 실기] 제2유형 (1) | 2023.12.18 |