码迷,mamicode.com
首页 > 其他好文 > 详细

PCA数据降维

时间:2014-12-11 00:06:46      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   使用   sp   

Principal Component Analysis

算法优缺点:

  • 优点:降低数据复杂性,识别最重要的多个特征
  • 缺点:不一定需要,且可能损失有用的信息
  • 适用数据类型:数值型数据

算法思想:

降维的好处:

  • 使得数据集更易使用
  • 降低很多算法计算开销
  • 去除噪声
  • 使得结果易懂

主成分分析(principal component analysis,PCA)的思想是将数据转换到新的坐标系,这个坐标系的选择是由数据本身决定的,第一维是原始数据中方差最大的方向,第二个是与第一维正交且方差最大的,一直重复。。。
主成分分析中使用数据集的协方差矩阵和特征值分析来获得。

函数:

pca(dataMat, topNfeat=999999)
由于主成分分析基本上可以说是算个矩阵的问题,而numpy在这方面又帮我们做好了,所以函数很简单,就是先去平均值,然后计算协方差矩阵和其特征值,最后选出最大的topNfeat个,最后用这些特征向量将源数据转到新的空间。当然使用的时候有两种方式,一种是跟限定个数,另一种则是通过数据压缩比来完成的。

  1.  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()

     

 

机器学习笔记索引





PCA数据降维

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/MrLJC/p/4156589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!