生活随笔
收集整理的這篇文章主要介紹了
PCA数据降维
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Principal Component Analysis
算法優缺點:
- 優點:降低數據復雜性,識別最重要的多個特征
- 缺點:不一定需要,且可能損失有用的信息
- 適用數據類型:數值型數據
算法思想:
降維的好處:
- 使得數據集更易使用
- 降低很多算法計算開銷
- 去除噪聲
- 使得結果易懂
主成分分析(principal component analysis,PCA)的思想是將數據轉換到新的坐標系,這個坐標系的選擇是由數據本身決定的,第一維是原始數據中方差最大的方向,第二個是與第一維正交且方差最大的,一直重復。。。
主成分分析中使用數據集的協方差矩陣和特征值分析來獲得。
函數:
pca(dataMat, topNfeat=999999)
由于主成分分析基本上可以說是算個矩陣的問題,而numpy在這方面又幫我們做好了,所以函數很簡單,就是先去平均值,然后計算協方差矩陣和其特征值,最后選出最大的topNfeat個,最后用這些特征向量將源數據轉到新的空間。當然使用的時候有兩種方式,一種是跟限定個數,另一種則是通過數據壓縮比來完成的。
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() ?
機器學習筆記索引
來自為知筆記(Wiz)
轉載于:https://www.cnblogs.com/MrLJC/p/4156589.html
總結
以上是生活随笔為你收集整理的PCA数据降维的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。