机器学习笔记十九 使用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维特征的投影矩阵,这个投影矩阵可以将特征从高维降到低维。投影矩阵也可以叫做变换矩阵。新的低维特征必须每个维都正交,特征向量都是正交的。通过求样本矩阵的协方差矩阵,然后求出协方差矩阵的特征向量,这些特征向量就可以构成这个投影矩阵了。特征向量的选择取决于协方差矩阵的特征值的大小。
—百度百科

算法过程

  1. 数据预处理。这里预处理包含两个部分:均值归一化和属性范围调整。均值归一化是相应属性减去其平均值;而属性范围则在归一化基础上除以属性方差。
  2. 计算特征之间的协方差矩阵。该矩阵是一个n*n的对称矩阵
  3. 计算协方差矩阵的特征值和特征向量
  4. 将特征值从大到小排序
  5. 保留最上面的N个特征向量
  6. 将原数据映射到由N个特征向量构成的新空间中

算法在OpenCV中的实现:

void cvCalcPCA( const CvArr* data,//输入数据                CvArr* avg, //平均(输出)                CvArr* eigenvalues, //特征值(输出)               CvArr* eigenvectors, //特征向量(输出)             int flags );//输入数据中的特征向量是怎么放的,比如CV_PCA_DATA_AS_ROW

在Numpy中实现PCA

流程大致如下:

  1. 去除平均值
  2. 计算协方差矩阵
  3. 计算协方差矩阵的特征值和特征向量
  4. 将特征值从大到小排序
  5. 保留最上面的N个特征向量
  6. 将数据转换以上述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

阅读全文
0 0
原创粉丝点击