pythonマシン学習:PCAデータの次元ダウン

2995 ワード

PCAアルゴリズムは監視なしの学習アルゴリズムとして、主にデータの次元ダウン、損失データの圧縮、特徴抽出、データの可視化に用いられる.一、PCAアルゴリズムフロー
•データセットXのインポート、•データセットXの平均Xmeanを列ごとに計算し、差をつけてX 1=X-Xmeanを得る.得られた新しい行列X 1に対して共分散を行い、convを得る.共分散convに対応する特徴値と特徴ベクトルを計算する.そして、得られた特徴値を並べ替え、k個の最大特徴値を得、それに対応するk個の特徴ベクトルを求め、それを列ベクトルとして新たな特徴ベクトル行列X 2を構成する.X 1*X 2を計算して、次元を下げたデータセットを得る.
二、pythonコード実装
import numpy as np
from sklearn import datasets

def zeroMean(X):        
    meanVal=np.mean(X,axis=0)#     ,           
    newData=X-meanVal  
    return newData,meanVal  

def pca(dataMat,n):  
    newData,meanVal=zeroMean(dataMat)  
    covMat=np.cov(dataMat,rowvar=0)    #      ,return ndarray; rowvar 0,        , 0,                
    eigVals,eigVects=np.linalg.eig(np.mat(covMat))#         ,         ,             
    eigValIndice=np.argsort(eigVals)            #            
    n_eigValIndice=eigValIndice[-1:-(n+1):-1]   #   n         
    n_eigVect=eigVects[:,n_eigValIndice]        #   n             
    lowDDataMat=newData*n_eigVect               #           
    print(lowDDataMat) 

if __name__ == '__main__':
    X=np.array([[65,61,72,84,81,79], 
                 [77,77,76,64,70,55],
                 [67,63,49,65,67,57],
                 [80,69,75,74,74,63],
                 [74,70,80,84,82,74],
                 [78,84,75,62,72,64],
                 [66,71,67,52,65,57],
                 [77,71,57,72,86,71],
                 [83,100,79,41,67,50]])
    zeroMean(X)
    pca(X,3)

三、sklearnライブラリ関数呼び出し
sklearn.decomposition.PCA(
    n_components=None, 
    copy=True, 
    whiten=False, 
    svd_solver=’auto’, 
    tol=0.0, 
    iterated_power=’auto’, 
    random_state=None
    )

パラメータ解析:n_components:意味:保持された特徴個数nタイプ:intまたはstring、デフォルトではNoneとデフォルトで、すべての成分が保持されます.int、例えばn_components=1で、元のデータを1つの次元に下げます.stringとして割り当てられます.例えば、n_components=’mle’は、要求される分散率を満たすように、特徴個数nを自動的に選択する.copy:タイプ:bool、TrueまたはFalse、デフォルトはTrueです.意味:アルゴリズムを実行するときに、元のトレーニングデータをコピーするかどうかを示します.Trueの場合、PCAアルゴリズムを実行すると、元のトレーニングデータの値は変更されません.元のデータのコピーで演算されるためです.Falseの場合、PCAアルゴリズムを実行すると、元のトレーニングデータの値が変更されます.元のデータで次元ダウン計算が行われるためです.whiten:タイプ:bool、デフォルトではFalseの意味:白化され、各フィーチャーに同じ分散が与えられます.ホワイトニングについては、Ufldlチュートリアル2、PCAのオブジェクトcomponents_を参照してください.最大分散を持つ成分を返します.explained_variance_ratio_:保持されたn成分のそれぞれの分散率を返します.n_components_:保持されている成分の個数nを返します.mean_: noise_variance_: 3、PCAオブジェクトのメソッド属性:components_:主成分グループ数explained_variance_ratio_:主成分あたりの分散割合n_components_ :1つの整数で、主成分にどれだけの要素があるかを示します.方法:fit(x):トレーニングモデルtransform(x):下位次元fit_を実行するtransform(x):訓練して次元を下げるinverse_Transform(x):逆操作で、次元を下げたデータを元のデータに逆変換します.例:
from sklearn.decomposition import PCA 
pca=PCA(n_components=1)
>>> data=array([[ 1.  ,  1.  ],
           [ 0.9 ,  0.95],
           [ 1.01,  1.03],
           [ 2.  ,  2.  ],
           [ 2.03,  2.06]])
newData=pca.fit_transform(data)
>>> newData
array([[-2.12015916],
       [-2.22617682],
       [-2.09185561],
       [-0.70594692],
       [-0.64227841]])