-
[n133] 고유벡터/고유값/PCAAI 부트캠프 2021. 9. 30. 11:52
Linear Transformation
선형 변환은 벡터들을 더하거나 스칼라 값을 곱하는 것으로, 선형 변환을 했을 때 방향은 변하지 않고 크기만 변한다.
고유 벡터 (Eigenvector)
고유 벡터는 선형 변환을 취했을 때, 방향은 변하지 않고 크기만 변하는 벡터이다. 그 변한 크기가 고유 값 (eigenvalue)이다.
정방행렬 A(n x n인 경우)에 대해 위 식이 성립하는 0이 아닌 벡터 x가 존재 할 때, 람다 상수를 행렬 A의 고유값이라고 하며, 벡터 x를 이에 대응하는 고유 벡터 라고 한다.
- 람다 상수 : 행렬 A의 고유 값
- 벡터 x : 고유 벡터
고유 값은 고유벡터 방향으로 얼만큼 크기가 커지는가를 의미한다. 고유값이 큰 순서대로 고유 벡터를 정렬하면, 중요한 순서대로 주성분을 구하는 것과 같다.
고유벡터를 통해 정사영 했을 때 분산은 고유값이다.
import numpy as np a = np.array([[4, 2], [2, 4]]) value, vector = np.linalg.eig(a) # eigenvalue, eigenvector 값이다. value, vector
Out[7]:
(array([6., 2.]), array([[ 0.70710678, -0.70710678], [ 0.70710678, 0.70710678]]))
고차원의 문제
100 혹은 1000개 이상 feature의 수가 많은 데이터셋을 모델링하거나 분석할 때 생기는 문제점을 뜻한다.
일반적으로, feature의 수 >= sample 수 인 경우, overfitting 이슈가 생긴다.
Dimension Reduction
Feature Selection
feature를 전부 사용하는 대신, 제일 다양하게 분포 되어있는 feature를 사용한다. 즉, 덜 중요한 feature를 제거하는 방법.
Feature Extraction
Selection 의 경우
- Feature 해석이 쉽지만, feature들간의 연관성을 고려해야함.
- 예시 : LASSO, Genetic algorithm 등
Extraction의 경우
- Feature 들간의 연관성 고려되지만 Feature 해석이 어렵다. feature 수를 많이 줄일 수 있어서 큰 장점이다.
- 예시 : PCA, Auto-encoder 등
Principal Component Analysis (PCA)
- 차원 축소 기법 중 하나이다.
- PCA를 이용해서 낮은 차원으로 차원축소를 해서 고차원 데이터를 효과적으로 분석 가능하다.
- 데이터의 분포가 정규성을 띌 때, 효과적으로 적용할 수 있다.
- 분류/예측 문제의 경우 PCA 보다는 PLS를 사용한다.
PCA 과정
1. 데이터 준비
2. 각 데이터의 normalize을 진행한다. 즉, 각 열에 대해서 평균을 뺀다. 표준편차로 나눈다.
3. z의 분산-공분산 매트릭스 계산한다.
4. 분산-공분산 매트릭스의 고유벡터와 고유값 계산한다.
5. 데이터를 고유 벡터에 정사영시킨다.
라이브러리를 사용한 PCA
from sklearn.preprocessing import StandardScaler, Normalizer from sklearn.decomposition import PCA print("Data: \n", df_final) # PCA를 적용하기 전에, StandardScaler로 데이터 Normalize를 한다. # 즉, 평균을 0, 표준편차를 1로 변환하는 작업. scaler = StandardScaler() Z = scaler.fit_transform(df_final) print("\n Standardized Data: \n", Z) # 2차원으로 차원 축소한다. pca = PCA(n_components=2) pca.fit(Z) print("\n 고유벡터 (Eigenvectors): \n", pca.components_) print("\n 고유값 (Eigenvalues): \n",pca.explained_variance_) B = pca.transform(Z) print("\n Projected Data: \n", B[:10])
fig = plt.figure(figsize = (8, 8)) ax = fig.add_subplot(1, 1, 1) ax.set_xlabel('PC1') ax.set_ylabel('PC2') sns.scatterplot(df_pca['PC1'], df_pca['PC2'], hue=df_pca['Species'], s=100, palette=sns.color_palette('muted', n_colors=3),) spec_list = ['Adelie', 'Chinstrap', 'Gentoo'] ax.legend(spec_list, loc='lower right', title='species') plt.show()
부트캠프 공부내용 한 눈에 보기
[인덱스] 코드 스테이츠 AI 부트캠프
구성 2021.09.09 ~ 2022.04 (총 28주) 배우는 내용 Section 1. 데이터 분석 입문 SPRINT 1. EDA SPRINT 2. Statistics SPRINT 3. DAY 1 EDA 데이터 전처리 Pandas in Colab 가설 검정 (t-test) T-Test 행렬 및 벡..
da-journal.com
'AI 부트캠프' 카테고리의 다른 글
[프로젝트] 게임 설계를 위한 데이터 분석 (0) 2021.10.13 [n134] Clustering (0) 2021.10.01 [n132] 선형 대수 (0) 2021.09.29 [n131] 벡터 및 행렬 (0) 2021.09.28 [n124] 베이즈 정리 (0) 2021.09.24