주성분 분석은 차원 축소의 방법으로, 원 데이터의 패턴을 보존하며 데이터의 차원을 줄이는 방법이다.
PCA는 기존의 변수를 조합하여 서로 연관성이 없는 새로운 변수, 주성분들을 만들어 낸다.
쉽게 말해 PCA를 이용하면 고차원의 데이터를 낮은 차원의 데이터로 바꿔줄 수 있따는 것인데, 여기서 중요한 점은 어떻게 차원을 잘 낮추는 것인가? 이다.
예시를 들어 그림으로 설명해보면 2차원 데이터를 PCA를 통해서 1차원 데이터로 차원을 축소를 한 것을 볼 수 있다.
하지만 2차원 데이터를 1차원으로 차원을 축소를 하면 원 데이터의 특징을 모두 살릴 수 없다. 하지만 이러한 상황에서 최대한 특징을 살리며 차원을 낮춰주는 방법을 고안하기 시작했고, 이에 따라 나온것이 주성분 분석이다.
주성분분석 이란?
1) 정의
여러 개의 변수를 상관관계를 이용해 주성분(=서로 상관성이 높은 변수들의 선형 결합)으로 만들어 차원 축소를 한다. 즉 여러 변수의 변량을 주성분으로 만들어 기존의 상관성 높은 변수들을 요약, 축소하는 기법이다.
2) 목적
- 변수들 간 상관관계, 연관성을 이용해 소수의 주성분으로 차원 축소함으로써 데이터 이해/관리가 용이하다.
- (회귀분석 등)다중공선성이 존재할 경우, 상관성이 없거나 적은 주성분으로 변수를 축소해 모형 개발에 용이하다.
- 군집분석을 수행하면 군집화 결과와 연산 속도 개선 가능
3) 주성분의 개수 선택법
누적기여율(Cumulative proportion)이 85% 이상일 때 개수를 결정한다. (누적기여율은 누적설명력(Cumulative Variance Ratio)이라고도 불리며 각 주성분의 설명력(Variance Ratio)을 합쳐놓은 퍼센트이다.)
- 이것이 의미하는 바가 무엇이냐면 우리가 피처데이터가 5개인 5차원의 데이터를 가지고 있을 때 PCA를 통해서 주성분을 4개로 놓고 주성분 분석을 했을 때 주성분이 PC1,PC2,PC3,PC4로 4개가 나올 것이다.
- PC1이 가장 많은 원 데이터의 특징을 가지고 있을 것이다. 설명력이 가장 높음. (이것은 주성분 분석을 진행하는 과정을 알면 저절로 알게되는 특징이다.)
- 각 주성분의 분산의 비율(설명력)을 보니 [60.76, 24.03, 11.62, 3.596]이 나오게 되었다. 그러면 이 때 85%의 누적설명력을 넘겨야 하기 때문에 PC1, PC2, PC3를 선택해서 85%가 넘는 누적설명력을 갖게 주성분의 개수를 선택해 주면 된다는 것이다.
- Scree plot그래프(y축 고유값 Eigenvalue)의 기울기가 완만해 수평이 되기전 지점에서 주성분의 개수를 결정한다.
-> 여기서 용어가 헷갈릴 수 있어서 정리를 해놔야겠다. 고차원의 데이터를 저차원으로 차원을 축소하면서 주성분이 만들어진다. 이 주성분은 각각 설명력(Variance Ratio,(= 분산설명력, 분산의 비율))이라는 값을 갖는데 원 데이터의 특징을 얼마나 가지고 있느냐를 나타내는 지표이다. 가장 첫번째의 주성분이 가장 높은 분산 설명력을 갖는데 우리는 이 주성분의 개수를 선택을 해야할 때 각각의 주성분의 설명력의 합인 누적 설명력이 85%가 넘어가게 되는 주성분의 개수를 골라야 한다. @+
내가 생각한 주성분 분석의 특징
- 데이터의 차원은 피처 데이터(독립변수)의 수로 인해 정해진다. 11개의 피처 데이터(독립변수)가 있다면 그 데이터는 11차원의 데이터가 되는것이다.
- 차원을 축소 할 때는 주성분이 피처 데이터의 수보다 클 수가 없다.
- PCA를 통해서 나온 주성분은 PC1, PC2 ... PC11까지 나오게 되는데 PC1이 원 데이터의 특징을 가장 많이 가지고 있는다.
예시코드)
import numpy as np
from sklearn.decomposition import PCA
# 샘플 데이터 생성
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
# PCA 모델 생성 및 주성분 분석 수행
pca = PCA(n_components=2) # 주성분 2개 선택
X_pca = pca.fit_transform(X)
# 주성분 분석 결과 출력
print("주성분 분석 결과:")
print(X_pca)
print("주성분(PC)의 설명력(variance ratio):", pca.explained_variance_ratio_)
print("주성분(PC)의 누적 설명력(cumulative variance ratio):", np.cumsum(pca.explained_variance_ratio_))
print("주성분(PC)의 고유값(eigenvalues):", pca.singular_values_)
print("주성분(PC)의 고유벡터(eigenvectors):", pca.components_)
파이썬에서 주성분 분석을 하는 코드가 있지만 아직 익숙하지 않아서 용어들과 정의 들만 정의해 놨다. 추후에 이것을 사용하면서 코드 또한 정리를 해놔야겠다!!!!
참고한 블로그 : https://ddongwon.tistory.com/114
PCA (Principle Component Analysis) : 주성분 분석 이란?
1. PCA (주성분 분석) PCA는 대표적인 dimensionality reduction (차원 축소)에 쓰이는 기법으로, 머신러닝, 데이터마이닝, 통계 분석, 노이즈 제거 등 다양한 분야에서 널리 쓰이는 녀석이다. 쉽게 말해 PCA
ddongwon.tistory.com
그림으로 설명이 잘 되어있다.
주성분 분석 코드를 잘 설명해준 블로그가 있다.
https://steadiness-193.tistory.com/245
Machine Learning - PCA (Principal Component Analysis, 주성분 분석)
[PCA (Pricipal Component Analysis, 주성분 분석)] 여러 차원으로 이루어진 '데이터를 가장 잘 표현하는 축'으로 사영(Projection)해서 차원을 축소 각 변수들의 공분산에 대한 주 성분(PC, Principal Component) 혹
steadiness-193.tistory.com
이걸 보고 나중에 참고해서 코드까지 설명을 해놓아야 겠다.
@@++
'통계' 카테고리의 다른 글
모수와 비모수 (2) | 2024.03.13 |
---|---|
상관 분석(Correlation analysis) (0) | 2024.03.13 |
회귀분석 (0) | 2024.02.14 |
분산분석, F-value, T-value 기술통계량 (0) | 2024.02.14 |
카이제곱분포, 교차분석 (2) | 2024.02.14 |