python PCA(主成分分析)の次元ダウンを実現
PCAの複雑な原理はここでは言わないで、ネット上で関連資料を見て、言うのはすべてとても良くて、ここで私は主に実現の過程を話します.
PCA計算プロセス:
第一歩:平均値を求める.平均値を求め、すべてのサンプルに対して、対応する平均値を減算する2番目のステップ:特徴共分散行列を求める3番目のステップ:共分散の特徴値と特徴ベクトルを求める
ステップ4:特徴値を大きいから小さい順に並べ替える、最大のk個を選択し、対応するk個の特徴ベクトルをそれぞれ列ベクトルとして特徴ベクトル行列を構成する.ステップ5:選択したフィーチャーベクトルにサンプルポイントを投影します.サンプル数をm、特徴数をn、平均値を減算サンプル行列をDataAdjust(m*n)、共分散行列をn*nとし、選択するk個の特徴ベクトルからなる行列をEigenVectors(n*k)とする.投影後のデータFinalDataは、FinalData(m*k)=DataAdjust(m*n)*EigenVectors(n*k)となる.
python実装コード:
PCA計算プロセス:
第一歩:平均値を求める.平均値を求め、すべてのサンプルに対して、対応する平均値を減算する2番目のステップ:特徴共分散行列を求める3番目のステップ:共分散の特徴値と特徴ベクトルを求める
ステップ4:特徴値を大きいから小さい順に並べ替える、最大のk個を選択し、対応するk個の特徴ベクトルをそれぞれ列ベクトルとして特徴ベクトル行列を構成する.ステップ5:選択したフィーチャーベクトルにサンプルポイントを投影します.サンプル数をm、特徴数をn、平均値を減算サンプル行列をDataAdjust(m*n)、共分散行列をn*nとし、選択するk個の特徴ベクトルからなる行列をEigenVectors(n*k)とする.投影後のデータFinalDataは、FinalData(m*k)=DataAdjust(m*n)*EigenVectors(n*k)となる.
python実装コード:
def pca(self, dataMat, K=65535): # dataMat , ,K
meanVals = mean(dataMat, axis=0) # :
meanRemoved = dataMat - meanVals #
covMat = cov(meanRemoved, rowvar=0) # ,
eigVals, eigVects = linalg.eig(mat(covMat)) # ,
eigValInd = argsort(eigVals) # ,
eigValInd = eigValInd[: -(K+1): -1] # K
redEigVects = eigVects[:, eigValInd] # k .
lowDDataMat = meanRemoved * redEigVects # , ,
reconMat = (lowDDataMat * redEigVects.T) + meanVals #
contribution = self.calc_single_contribute(eigVals, eigValInd) # ,
return lowDDataMat, contribution