고차원에서 저차원으로의 차원 축소 기법으로 PCA 라고도 한다.
데이터에 대해 가장 많은 정보를 남기기 위한 방법이며, 이를 위해 분산이 큰 것을 선택한다.
목표는 행렬을 낮은 차원의 행렬로 변환한 후, 분산이 가장 큰 k개를 선택하여 최대한 많은 정보를 남기는 것이다.
📌 고윳값 분해의 핵심
어떤 정방행렬 𝐴에 대해 고윳값 𝜆과 고유벡터 𝑣는 다음 관계를 만족한다.
즉, 정방행렬 A에 대해, 방향을 바꾸지 않고 크기만 변화시키는 vector 가 존재한다.
d차원 데이터셋을 표준화 전처리한다.
Covariance matrix 를 만든다.
Covariance matrix 를 eigenvector와 eigenvalue 로 분해한다.
Eigenvalue 를 정렬한다.
고윳값이 가장 큰 개의 eigenvector를 선택한다.
최상위 개의 eigenvector 로 Projection matrix W를 만든다.
Projection matrix W 를 사용하여 차원 입력 데이터셋 X를 새로운 차원의 특성 부분 공간으로 변환한다.






특성 고유값을 전체 고윳값의 합으로 나눈 것
from sklearn.decomposition import PCA
# 주성분 개수 지정
pca = PCA(n_components=2)
# 차원 축소
X_train_pca = pca.fit_transform(X_train_std)
X_train_pca = pca.transform(X_test_std)
# 전체 주성분 모두 사용
pca = PCA(n_components=None)
X_train_pca = pca.fit_transform(X_train_std)
# 전체 주성분의 Explained variance ratio를 확인하자
print(pca.explained_variance_ratio_)
# n_components = 0 ~ 1 사이 실수
# Cumulative Explained variance ratio가 실수값 이상이 될 때까지 진행
pca = PCA(n_components=0.8)
from sklearn.decomposition import IncrementalPCA
ipca = IncrementalPCA(n_components = 9)
for batch in range(len(X_train_std)//25+1):
X_batch = X_train_std[batch*25:(batch+1)*25]
ipca.partial_fit(X_batch)
Loading(로딩 행렬)은 각 원본 특성이 주성분에 얼마나 기여하는지를 나타내는 값이다.이는 주성분을 해석하는 중요한 지표로, 특정 주성분이 어떤 원본 특성과 관련이 있는지를 파악할 수 있다.


Eigen vector 자체가 Covariance matrix로부터 도출되었기 때문에 가능하다고 생각하면 편하다.
양의 상관관계: 정비례
음의 상관관계: 반비례
loadings = eigen_vecs * np.sqrt(eigen_vals)
from sklearn.decompositino import PCA
sklearn_loadings = pca.components_.T * np.sqrt(pca.explaned_variance_)