PCATADAの紹介~🎉
Feature selection vs Feature engineering
変数の選択は、既存の変数を選択せずに重要な変数のみを選択することを意味します.
フィーチャーエンジニアリングは、既存の変数に基づいて新しい変数を作成します.
PCA
PCAは、特徴的なエンジニアリング技術の1つと見なすことができる.
Eigen-Value Decomposition
原理を理解するには,一意値分解,特徴値分解を理解しなければならない.
ある行列Aとあるベクトルxの積は、定数値とあるベクトルxの形式として表すことができる.
Ax = λx
Aを掛けると、方向は同じですが、大きさが違います.ここでxは固有ベクトル(特徴ベクトル)であり、λユニーク値(フィーチャー値)と呼びます.
2つの要素を求めてみましょう
この過程により,固有値と固有ベクトルを求めることができる.
固有ベクトルに定数を乗じても同じ固有ベクトルであるため、大きさが1のベクトルに正規化する.
リファレンス
これにより行列Aを表すことができる.
A = PΛP^-1
に分解できます.ソース
->正方形マトリクスAに異なる固有値がある場合、固有値を分解できます!
Spectrum decomposition
固有値分解の特殊なケースと考えられる.
行列Aが正方行列、対称行列である場合
PCAでは空分割行列が用いられているため,このことを満たす.
PCAでの固有値分解の使用方法について説明します
PCA
データの空分割行列を求める.
公分散行列はxx^Tであり,データの構造を説明した.
くうぶんマトリクスのスペクトル分解
より大きな固有値を持つ固有ベクトルを使用して正射零下の次元を縮小
from sklearn.preprocessing import StandardScaler
import numpy.linalg as lin
def new_coordinates(X,eigenvectors,index):
new = None
for i in range(eigenvectors.shape[1]):
if (i in index) and (new is None):
new = [X.dot(eigenvectors.T[i])]
elif i in index:
val = [X.dot(eigenvectors.T[i])]
new = np.concatenate((new, val),axis=0)
else:
continue
return new.T
def MYPCA(X,number):
# 정규화
scaler = StandardScaler()
X_std = scaler.fit_transform(X) #sclaing 후 데이터
features = X_std.T
# 공분산 행렬 구하기
cov_matrix = np.cov(features)
# 공분산 행렬의 고유 벡터, 고유값
eigenvalues = lin.eig(cov_matrix)[0]
eigenvectors = lin.eig(cov_matrix)[1]
# 소팅 후, number만큼 eigenvalue 선택
eigenvalues = list(eigenvalues)
sort_eigenvalues = sorted(eigenvalues, reverse=True)
index = []
for i in range(number):
index.append(eigenvalues.index(sort_eigenvalues[i])) # projection해야할 eigenvector들의 index값을 구합니다.
# eigenvector로 projection
new = new_coordinates(X_std, eigenvectors, index)
return new #새로운 축으로 변환되어 나타난 데이터 return
Reference
この問題について(PCATADAの紹介~🎉), 我々は、より多くの情報をここで見つけました https://velog.io/@ann9902/PCA를-소개합니TADAテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol