PCA數據降維


Principal Component Analysis

算法優缺點:

  • 優點:降低數據復雜性,識別最重要的多個特征
  • 缺點:不一定需要,且可能損失有用的信息
  • 適用數據類型:數值型數據

算法思想:

降維的好處:

  • 使得數據集更易使用
  • 降低很多算法計算開銷
  • 去除噪聲
  • 使得結果易懂

主成分分析(principal component analysis,PCA)的思想是將數據轉換到新的坐標系,這個坐標系的選擇是由數據本身決定的,第一維是原始數據中方差最大的方向,第二個是與第一維正交且方差最大的,一直重復。。。
主成分分析中使用數據集的協方差矩陣和特征值分析來獲得。

函數:

pca(dataMat, topNfeat=999999)
由於主成分分析基本上可以說是算個矩陣的問題,而numpy在這方面又幫我們做好了,所以函數很簡單,就是先去平均值,然后計算協方差矩陣和其特征值,最后選出最大的topNfeat個,最后用這些特征向量將源數據轉到新的空間。當然使用的時候有兩種方式,一種是跟限定個數,另一種則是通過數據壓縮比來完成的。

  1.  1 #coding=utf-8
     2 from numpy import *
     3 def loadDataSet(filename, delim='\t'):
     4     fr = open(filename)
     5     stringArr = [line.strip().split(delim) for line in fr.readlines()]
     6     datArr = [map(float,line) for line in stringArr]
     7     return mat(datArr)
     8     
     9 def pca(dataMat, topNfeat=999999):
    10     meanVals = mean(dataMat, axis=0)
    11     meanRemoved = dataMat - meanVals
    12     covMat = cov(meanRemoved, rowvar=0)
    13     eigVals, eigVects = linalg.eig(mat(covMat))
    14     eigValInd = argsort(eigVals)
    15     eigValInd = eigValInd[:-(topNfeat+1):-1]
    16     redEigVects = eigVects[:,eigValInd]
    17     lowDDataMat = meanRemoved * redEigVects
    18     reconMat = (lowDDataMat * redEigVects.T) + meanVals
    19     return lowDDataMat, reconMat 
    20     
    21 def main():
    22     dataMat = loadDataSet('testSet.txt')
    23     lowDMat, reconMat = pca(dataMat, 1)
    24     print shape(lowDMat)
    25     
    26 if __name__ == '__main__':
    27     main()

     

 

機器學習筆記索引






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM