机器学习之利用PCA来简化数据
来源:互联网 发布:如何选择净水器 知乎 编辑:程序博客网 时间:2024/06/05 05:12
本文主要记录本人在学习机器学习过程中的相关代码实现,参考《机器学习实战》
主成分分析( PrincipalComponentAnalysis,PCA) 是一种数据降维方法。在PCA中,数据从原来的坐标系转换到了新的坐标系,新坐标系的选择是由数据本身决定的。第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴的选择和第一个坐标轴正交且具有最大方差的方向。该过程一直重复,重复次数为原始数据中特征的数目。我们会发现,大部分方差都包含在最前面的几个新坐标轴中。因此,我们可以忽略余下的坐标轴,即对数据进行了降维处理。
优 点 :降低数据的复杂性,识别最重要的多个特征。
缺 点 :不一定需要, 且可能损失有用信息。
适用数据类型:数值型数据。
将数据转换成前n个主成分的伪码大致如下:
(1)去除平均值
(2)计算协方差矩阵
(3)计算协方差矩阵的特征值和特征向量
(4)将特征值从大到小排序
(5)保留最上面的#个特征向量
(6)将数据转换到上述#个特征向量构建的新空间中
from numpy import *def loadDataSet(fileName, delim='\t'): fr = open(fileName) stringArr = [line.strip().split(delim) for line in fr.readlines()] datArr = [list(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#~ dataMat=loadDataSet('testSet.txt')#~ lowDMat,reconMat=pca(dataMat,1)#~ print(shape(lowDMat))
pca() 函数有两个参数:第一个参数是用于进行PCA操作的数据集,第二个参数 topNfeat则是一个可选参数 , 即应用的N个特征。如果不指定topNfeat的值 , 那么函数就会返回前 9 999 999个特征,或者原始数据中全部的特征。
首先计算并减去原始数据集的平均值 。然 后 ,计算协方差矩阵及其特征值 ,接着利用argsort() 函数对特征值进行从小到大的排序。根据特征值排序结果的逆序就可以得到
topNfeat 个最大的特征向量。这些特征向量将构成后面对数据进行转换的矩阵,该矩阵则利用N个特征将原始数据转换到新空间中.最后 ,原始数据被重构后返回用于调试,同时降维之后的数据集也被返回了。
def replaceNanWithMean(): #用于测试更大数据集的替换函数,将空值NaN替换为非NaN值的平均值 datMat = loadDataSet('secom.data', ' ') numFeat = shape(datMat)[1] for i in range(numFeat): meanVal = mean(datMat[nonzero(~isnan(datMat[:,i].A))[0],i]) #values that are not NaN (a number) datMat[nonzero(isnan(datMat[:,i].A))[0],i] = meanVal #set NaN values to mean return datMat
阅读全文
0 0
- 《机器学习实战》读书笔记之利用PCA来简化数据
- 机器学习之利用PCA来简化数据
- 机器学习第十三章:利用PCA来简化数据
- 《机器学习实战》利用PCA来简化数据
- py2.7《机器学习实战》利用PCA来简化数据
- 机器学习实战-利用PCA来简化数据
- 机器学习实战-13利用PCA来简化数据
- 机器学习实战笔记-利用PCA来简化数据
- 《机器学习实战》笔记之十三——利用PCA来简化数据
- chapter13 机器学习之利用PCA简化数据
- 利用PCA来简化数据
- 利用 PCA来简化数据
- 机器学习实战——第十三/十四章:利用PCA和SVD来简化数据
- [完]机器学习实战 第十三章 利用PCA来简化数据
- 【机器学习实战】第13章 利用 PCA 来简化数据
- 【机器学习实战】第13章 利用 PCA 来简化数据
- 【机器学习实战-python3】利用PCA简化数据
- 利用PCA简化数据
- python __setitem__(self)和__getitem__(self)
- 五、C_base——数组
- 常用网址
- xcode一个工程引入另一个工程
- php动态导出数据成Excel表格
- 机器学习之利用PCA来简化数据
- 面向对象1
- 一个开源的社会化编程项目
- Javascript基础(四)作用域和闭包
- (25)继承中成员变量、函数中覆盖、构造函数的理解
- 终于下手,Ubuntu 17.10 用 GDM 取代 LightDM
- safai上jquery动态设置select默认值不成功的问题
- java语言编写的人工智能小测试
- java中操作Oracle clob数据出现的连接关闭问题