博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习之主成分分析(PCA)
阅读量:5070 次
发布时间:2019-06-12

本文共 1597 字,大约阅读时间需要 5 分钟。

import numpy as np
#(1)零均值化 def zeroMean(dataMat):     meanVal=np.mean(dataMat,axis=0)     newData =dataMat -meanVal     return newData, meanVal #3、选择主成分个数 def percentage2n(eigVals,percentage):     sortArray=np.sort(eigVals)   #升序     sortArray=sortArray[-1::-1]  #逆转,即降序     arraySum=sum(sortArray)     tmpSum=0     num=0     for i in sortArray:         tmpSum+=i         num+=1         if tmpSum>=arraySum*percentage:             return num #pca算法 def pca(dataMat,percentage=0.99):     # (1)零均值化     newData, meanVal = zeroMean(dataMat)     # 求协方差矩阵     covMat = np.cov(newData, rowvar=0)     # (3)求特征值、特征矩阵     eigVals, eigVects = np.linalg.eig(np.mat(covMat))     n =percentage2n(eigVals,percentage)     # eigVals 特征值和eigVects特征向量     eigValIndice = np.argsort(eigVals)     #所以eigValIndice[-1:-(n+1):-1]就取出这个n个特征值对应的下标。【python里面,list[a:b:c]代表从下标a开始到b,步长为c。】     n_eigValIndice = eigValIndice[-1:-(n + 1):-1]  # 最大的n个特征值的下标     n_eigVect = eigVects[:, n_eigValIndice]  # 最大的n个特征值对应的特征向量     lowDDataMat = newData * n_eigVect  # 低维特征空间的数据     reconMat = (lowDDataMat * n_eigVect.T) + meanVal  # 重构数据     return lowDDataMat, reconMat def main():     data = [[10.2352,11.322],             [10.1223,11.811],             [9.1902,8.9049],             [9.3064,9.8474],             [8.3301,8.3404],             [10.1528,10.1235],             [10.4085,10.822],             [9.0036,10.0392],             [9.5349,10.097],             [9.4982,10.8254]]     lowDDataMat, reconMat = pca(data,0.9)     print(lowDDataMat) if __name__=="__main__":     main()
 

 

转载于:https://www.cnblogs.com/gylhaut/p/9151320.html

你可能感兴趣的文章
React文档翻译 (快速入门)
查看>>
nodejs fs路径
查看>>
动态规划算法之最大子段和
查看>>
linux c:关联变量的双for循环
查看>>
深入浅出理解zend framework(三)
查看>>
python语句----->if语句,while语句,for循环
查看>>
javascript之数组操作
查看>>
LinkedList源码分析
查看>>
TF-IDF原理
查看>>
用JS制作博客页面背景随滚动渐变的效果
查看>>
JavaScript的迭代函数与迭代函数的实现
查看>>
一步步教你学会browserify
查看>>
Jmeter入门实例
查看>>
亲近用户—回归本质
查看>>
中文脏话识别的解决方案
查看>>
CSS之不常用但重要的样式总结
查看>>
Python编译错误总结
查看>>
URL编码与解码
查看>>
日常开发时遇到的一些坑(三)
查看>>
Eclipse 安装SVN插件
查看>>