机器学习笔记十九 使用PCA简化数据(未完)
来源:互联网 发布:福大图书馆数据库 编辑:程序博客网 时间:2024/05/19 20:23
简介
PCA (Principal Component Analysis ),即主成分分析,是采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。
这个算法有一个经典应用:人脸识别。
PCA [1] 主要 用于数据降维,对于一系列例子的特征组成的多维向量,多维向量里的某些元素本身没有区分性,比如某个元素在所有的例子中都为1,或者与1差距不大,那么这个元素本身就没有区分性,用它做特征来区分,贡献会非常小。所以我们的目的是找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,从而使特征留下的都是“精品”,而且计算量也变小了。 对于一个k维的特征来说,相当于它的每一维特征与其他维都是正交的(相当于在多维坐标系中,坐标轴都是垂直的),那么我们可以变化这些维的坐标系,从而使这个特征在某些维上方差大,而在某些维上方差很小。例如,一个45度倾斜的椭圆,在第一坐标系,如果按照x,y坐标来投影,这些点的x和y的属性很难用于区分他们,因为他们在x,y轴上坐标变化的方差都差不多,我们无法根据这个点的某个x属性来判断这个点是哪个,而如果将坐标轴旋转,以椭圆长轴为x轴,则椭圆在长轴上的分布比较长,方差大,而在短轴上的分布短,方差小,所以可以考虑只保留这些点的长轴属性,来区分椭圆上的点,这样,区分性比x,y轴的方法要好!
所以我们的做法就是求得一个k维特征的投影矩阵,这个投影矩阵可以将特征从高维降到低维。投影矩阵也可以叫做变换矩阵。新的低维特征必须每个维都正交,特征向量都是正交的。通过求样本矩阵的协方差矩阵,然后求出协方差矩阵的特征向量,这些特征向量就可以构成这个投影矩阵了。特征向量的选择取决于协方差矩阵的特征值的大小。
—百度百科
算法过程
- 数据预处理。这里预处理包含两个部分:均值归一化和属性范围调整。均值归一化是相应属性减去其平均值;而属性范围则在归一化基础上除以属性方差。
- 计算特征之间的协方差矩阵。该矩阵是一个n*n的对称矩阵
- 计算协方差矩阵的特征值和特征向量
- 将特征值从大到小排序
- 保留最上面的N个特征向量
- 将原数据映射到由N个特征向量构成的新空间中
算法在OpenCV中的实现:
void cvCalcPCA( const CvArr* data,//输入数据 CvArr* avg, //平均(输出) CvArr* eigenvalues, //特征值(输出) CvArr* eigenvectors, //特征向量(输出) int flags );//输入数据中的特征向量是怎么放的,比如CV_PCA_DATA_AS_ROW
在Numpy中实现PCA
流程大致如下:
- 去除平均值
- 计算协方差矩阵
- 计算协方差矩阵的特征值和特征向量
- 将特征值从大到小排序
- 保留最上面的N个特征向量
- 将数据转换以上述N个特征向量构建的新空间中。
PCA算法
from numpy import *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)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) eigValInd = eigValInd[:-(topNfeat +1):-1] redEigVects = eigVects[:,eigValInd] lowDDataMat = meanRemoved * redEigVects reconMat = (lowDDataMat * redEigVects.T) + meanVals return lowDDataMat, reconMat
相关数学知识:内积 协方差矩阵 正交
摘自:http://blog.csdn.net/moodytong/article/details/10084243
参考:http://www.cnblogs.com/lzllovesyl/p/5235137.html
http://blog.csdn.net/zrjdds/article/details/50318065
http://blog.csdn.net/shizhixin/article/details/51181379
http://blog.sina.com.cn/s/blog_49a1f42e0100fvdu.html
- 机器学习笔记十九 使用PCA简化数据(未完)
- 机器学习实战笔记-利用PCA来简化数据
- 《机器学习实战》笔记之十三——利用PCA来简化数据
- 机器学习第十三章:利用PCA来简化数据
- chapter13 机器学习之利用PCA简化数据
- 《机器学习实战》利用PCA来简化数据
- 《机器学习实战》读书笔记之利用PCA来简化数据
- py2.7《机器学习实战》利用PCA来简化数据
- 【机器学习实战-python3】利用PCA简化数据
- 机器学习之利用PCA来简化数据
- 机器学习实战-利用PCA来简化数据
- 机器学习实战-13利用PCA来简化数据
- 机器学习算法面试—口述(6):数据的简化(PCA、SVD)
- 机器学习笔记十五 AdaBoost(未完)
- 机器学习实战——第十三/十四章:利用PCA和SVD来简化数据
- [完]机器学习实战 第十三章 利用PCA来简化数据
- 【机器学习实战】第13章 利用 PCA 来简化数据
- 【机器学习实战】第13章 利用 PCA 来简化数据
- mysql中Invalid default value for 'stime'问题
- Laravel 5.4 官方文档摘记:路由
- poj 字符串相关之3038
- 决策树与随机森林算法(理论)-----------------------机器学习系列(二))
- mysql 得到的数据插入另一个新表中
- 机器学习笔记十九 使用PCA简化数据(未完)
- 树链剖分(bzoj 1036: [ZJOI2008]树的统计Count)
- 机器学习笔记二十 利用SVD简化数据
- 51Nod 1717 好数&&如何判断一个数是完全平方数
- Ubuntu16 下创建文件时没有权限
- 【操作系统】-服务器操作系统
- nginx location详解
- 类型转换器
- bootstrap的栅格系统(网格系统)