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コード実装
三、sklearnライブラリ関数呼び出し
パラメータ解析: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):逆操作で、次元を下げたデータを元のデータに逆変換します.例:
•データセット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]])