-
PCA in pythondata-science-summary/summary 2020. 9. 16. 21:53반응형
<엔지니어는 구현을 못하면 모르는것이다>
PCA(principal component analysis) 주성분 분석
PCA 이해 개념적으로 간단히
데이터의 차원을 줄이려고 하는데 원데이터의 성질을 가장 잘 보존하고자한다.
이때 분산은 데이터들의 분포 특성을 가장 잘설명하며 이 분산의 방향이 가장 큰 방향벡터를 주성분이라고 함
그리고 데이터를 가장 큰 방향벡터를 기준으로 투영(Projection)하여 변형(feature extraction) 하는것이 PCA이다.
따라서 PCA 후에는 데이터 값이 달라지지만 기존 데이터의 분포 특성을 최대한 보존한다.
첫번째 축을 찾은뒤 첫번째 축과 직교(orthogonal)하면서 분산이 가장 큰, 즉 가장 큰 방향벡터(주성분)를 찾은 뒤 축으로 하여 데이터를 투영하며
이런 반복을 원하는 차원의 수만큼 반복한다.
그런 뒤 투영된 값들을 새로운 feature로 변환시켜 사용한다.
PCA 이해 수학적으로 간단히
공분산 행렬은 데이터가 얼마나 함께 변화하는지를 나타낸다.
공분산 행렬을 이용(Eigenvalue Decomposition)하면 고유 벡터(Eigenvector)와 고유값(Eigenvalue) 라는 것을 구할수 있다.
Eigenvector 는 선형 변환을 하여도 방향이 보존되며 크기만 변하는 벡터이고, Eigenvalue 는 Eigenvector의 변하는 크기를 나타내며 이 고유값이 클수록 데이터의 경향성을 강하게 나타내고 있기떄문에 높을수록 좋다.
그리고 구한 고유 벡터는 최대 분산의 방향에 해당한다.
이 고유 벡터에 직교하는 그 다음 분산을 가장 잘 설명하는(고유값이 큰) eigenvector를 구하는 작업을 원하는 차원의 개수만큼 반복한다.
그런 뒤 구한 고유벡터로 투영된 값들을 새로운 feature로 변환시켜 사용한다.
참고로 보통 Eigenvalue의 분산 설명력의 비율이 90% 넘을때까지 벡터(차원의 수)들을 선택한다.
import numpy as np from sklearn.decomposition import PCA X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) # n_components: 투영할 축 개수, / svd_solver: 알고리즘 pca = PCA(n_components=2, random_state=1234, svd_solver='auto') x_trans = pca.fit_transform(X) # 전체 분산 총량중 첫번째 주성분의 분산설명력의 비율 print(pca.explained_variance_ratio_[0]) # 위와 같이 설명 비율을 아래와 같은식 pca_explained_variance_ratio_2 = pca.explained_variance_/sum(pca.explained_variance_) print(pca_explained_variance_ratio_2) # 누적 설명력 print(pca.explained_variance_ratio_.cumsum()) # 90% 이상 누적 설명력을 가지는 차원의 최소 개수 print(np.argmax(pca.explained_variance_ratio_.cumsum() >= 0.9) + 1) # 고유값 = Eigenvalue : 설명 정도 # 두번째 주성분의 고유값 print(pca.explained_variance_ratio_[1]) # 고유벡터 = Eignevector : 축에 투영시 반영되는 방향 벡터값 print(pca.components_) # 첫번째 주성분에 대한 2번째 변수의 사영계수값 print(pca.components_[0,1]) # 고유값과 고유 벡터로 투영되어 변환된 값 x_trans
반응형'data-science-summary > summary' 카테고리의 다른 글
상관분석 (Correlation) in python (0) 2020.09.16 Data를 train 과 test set으로 원하는 비율만큼 분리하는법 (0) 2020.09.16 Robust scaling 하는법 in python (0) 2020.09.16 z-score scaling 하는법 in python (0) 2020.09.14 min max scaling 하는 방법 in python (0) 2020.09.14