[Linear Algebra] (python) Eigenvalue, Eigenvector, PCA


🧩 High Dimensional Data


📌 Eigenvalue, Eigenvector


EigenvalueとEigenvectorを人に投影して説明します.
  • Eigenvalue=外形(太ったり痩せたり日焼けしたり)
  • Eigenvector=彼自身(ダイエットは人自身を変えない)
  • 従って、PCAはEigenvectorを軸とする.
    Eigenvalueの最大の側を特定して実行します.(データの特性を反映することが望ましい.)

    Eigenvectorを軸として回転するグリッドが考えられます.グリッドは私たちの立場では線かもしれないし、面かもしれない.

    🏁 マイコード

    import numpy as np
    
    v = np.array([[4,2],[2,4]])
    value = np.linalg.eigvals(v)
    vector = np.linalg.eig(v)
    
    print('eigenvalue=',value)
    print('eigenvector=',vector)
    ✔️np.linalg.eigvals()
    numpyを利用して特徴値を求める
    ✔️ np.linalg.eig()
    numpyを利用して特徴ベクトルを求める

    📌 PCA(Principal Component Analysis)


    たとえば、高レベルのデータfeature[a、b、c、d]を処理および比較するとします.
    [a,b], [a,c], [a,d], [b,c], [b,d], [c,d] ...
    このように,特徴が多ければ多いほど解析が困難になり,オーバーフィットが起こりやすい.
    Overfitting:データを解析してパターンを抽出したいだけですが、ノイズも保存しています.

    このような現象を避けるために,高次元データを正射し,主成分を縮小する方法がある.
    次元を縮小するには、Eigenvalue、Eingvectorが必要です.

    🏁 マイコード

    import pandas as pd
    from sklearn.preprocessing import StandardScaler, Normalizer
    from sklearn.decomposition import PCA
    
    print('Data= \n',features)
    scaler = StandardScaler() # 다른 데이터들을 비교 가능하게 만들어줌
    features = pd.DataFrame(scaler.fit_transform(features),columns=['bill_length_mm','bill_depth_mm','flipper_length_mm','body_mass_g']) # 노말라이즈된 데이터 얻음
    print('\n Standardized features=', features)
    
    pca = PCA(n_components=2) # 2차원으로 축소 PCA 실행
    pc_df = pd.DataFrame(pca.fit_transform(features), columns=['PC1','PC2']) # PCA 시행하여 변환된 주성분으로 데이터 프레임 생성
    
    ratio = pca.explained_variance_ratio_ # variance ratio
    
    ✔️ scaler = StandardScaler()
    なぜscaleを調整するのですか?
    ✔️ pca = PCA(n_components=None)
    pca:主成分抽出
    n components:使用する主成分を決定