python 实现PCA
2015-08-24 09:57
831 查看
1.PCA原理介绍
主成分分析(英语:Principal
components analysis,PCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。PCA的核心是处理数据,将需要处理的数据转换到矩阵,一般来只要能够转换为合适矩阵的数据,在计算量非常大的时候都可以通过PCA进行降维,进而达到简化和提速的目的。具体的数据推倒过程,下边这边文章介绍的很好:http://blog.csdn.net/watkinsong/article/details/38536463
PCA涉及到比较多的数学知识,matlab、python之类语言都会自带有PCA计算的一些包,经过这样之后,可以方便我们的计算,但同时,当数据量非常大的时候,本身计算PCA的过程也需要耗费大量的内存,后来很多人基于数学理论提出了非常多的快速PCA的算法,扩展了PCA的应用。
2.python实现PCA
根据机器学习实战这本书的指导,利用python的numpy计算库的函数逐一实现PCA的计算过程,加深其理解,最后对获得的数据进行可视化。
程序运行结果如下,蓝色表示原始数据,红色为PCA降维后的数据:
主成分分析(英语:Principal
components analysis,PCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。PCA的核心是处理数据,将需要处理的数据转换到矩阵,一般来只要能够转换为合适矩阵的数据,在计算量非常大的时候都可以通过PCA进行降维,进而达到简化和提速的目的。具体的数据推倒过程,下边这边文章介绍的很好:http://blog.csdn.net/watkinsong/article/details/38536463
PCA涉及到比较多的数学知识,matlab、python之类语言都会自带有PCA计算的一些包,经过这样之后,可以方便我们的计算,但同时,当数据量非常大的时候,本身计算PCA的过程也需要耗费大量的内存,后来很多人基于数学理论提出了非常多的快速PCA的算法,扩展了PCA的应用。
2.python实现PCA
根据机器学习实战这本书的指导,利用python的numpy计算库的函数逐一实现PCA的计算过程,加深其理解,最后对获得的数据进行可视化。
# coding=utf-8 __author__ = 'Administrator' from numpy import * # 加载数据,返回mat型数据 def loadDataSet(filename,delim='\t'): fr =open(filename) stringArr =[line.strip().split(delim) for line in fr.readlines()] datArr =[map(float,line) for line in stringArr] return mat(datArr) # 进行PCA计算 def pca(dataMat,topNfeat=9999999): #求数据集的平均值,用数据减去其平均值 meanVals =mean(dataMat,axis=0) meanRemoved =dataMat - meanVals #计算协方差矩阵 covMat =cov(meanRemoved,rowvar =0) #得到协方差矩阵的特征值和特征向量 eigvals,eigVects =linalg.eig(mat(covMat)) #对特征值进行排序 eigValInd =argsort(eigvals) #得到前N个特征值和对应的特征向量 eigValInd =eigValInd[:-(topNfeat+1):-1] redEigVects =eigVects[:,eigValInd] #利用特征向量对去掉平均值的数据进行降维 lowDDataMat =meanRemoved * redEigVects #得到最后的输出低维矩阵 reconMat =(lowDDataMat * redEigVects.T) +meanVals return lowDDataMat,reconMat if __name__=='__main__': import matplotlib import matplotlib.pyplot as plt # 加载数据 dataMat =loadDataSet('testSet.txt') # 进行pca,这里将数据转换为1维 lowDat,reconMat =pca(dataMat,1) # 显示结果 fig =plt.figure() ax =fig.add_subplot(111) ax.scatter(dataMat[:,0].flatten().A[0],dataMat[:,1].flatten().A[0],marker='^',s=90) ax.scatter(reconMat[:,0].flatten().A[0],reconMat[:,1].flatten().A[0],marker='o',s=50,c='red') plt.show()
程序运行结果如下,蓝色表示原始数据,红色为PCA降维后的数据:
相关文章推荐
- libsvm python grid.py C和gamma 两个参数的训练
- Python and or 学习笔记
- 【python】冒泡排序
- Python 深拷贝和浅拷贝
- python学习笔记——第三章 串
- Python 短见
- Windows平台上安装scikit-learn包的方法
- Python 3.x中的除法
- [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论
- python学习(2)
- python 函数
- python正则表达式
- 零基础学python-7.2 字符串常量
- 零基础学python-6.2 共享引用
- 零基础学python-7.4 修改字符串实例总结
- 零基础学python-3.7 另一个程序 python读写文本
- 零基础学python-3.6 根据模块结构 改进我们的游戏
- 零基础学python-7.1 python中的字符串简介与常用函数
- 零基础学python-5.2 数字表达式操作符
- 零基础学python-4.3 对象的比较