《机器学习实战》读书笔记之利用PCA来简化数据
2016-07-08 13:13
351 查看
降维技术
第一种降维的方法称为主成分分析(PCA)。在PCA中,数据从原来的坐标系转换到了新的坐标系,新坐标系的选择是由数据本身决定的。第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴的选择和第一个坐标轴正交且具有最大方差的方向。该过程一直重复,重复次数为原始数据中特征的数目。我们会发现,大部分方差都包含在最前面的几个新坐标轴中。因此我们可以忽略余下的坐标轴,即对数据进行了降维处理。另一种降维技术是因子分析。在因子分析中,我们假设在观察数据的生成中有一些观察不到的隐变量。假设观察数据是这些隐变量和某些噪声的线性组合。那么隐变量的数据可能比观察数据的数目少,也就是说通过找到隐变量就可以实现数据的降维。
还有一种降维技术是独立成分分析(ICA)。ICA假设数据是从N个数据源形成的,这一点和因子分析有些类似。假设数据为多个数据源的混合观察结果,这些数据源之间在统计上是相互独立的,而在PCA中只是假设数据是不相关的。同因子分析一样,如果数据源的数目少于观察数据的数目,就可以实现降维的过程。
PCA
第一个主成分是从数据差异性最大(方差最大)的方向提取出来的,第二个主成分则来自于数据差异性次大的方向,并且该方向与第一个主成分方向正交。通过数据集的协方差矩阵及其特征值分析,我们就可以求得这些主成分的值。一旦得到协方差矩阵的特征向量,我们就可以保留最大的N个值。这些特征向量也给出了N个最重要特征的真实结构。我们可以通过将数据乘上这N个特征向量而将它转换到新的空间。
特征值分析:
特征值分析是线性代数中的一个领域,它能够通过数据的一般格式来揭示数据的“真实”结构,即我们常说的特征向量和特征值。在等式A v =Lambda v 中,v是特征向量,Lambda是特征值。特征值都是简单的标量值。一个变换可由一个矩阵乘法表示。
伪代码:
1.去除平均值
2.计算协方差矩阵
3.计算协方差矩阵的特征值和特征向量
4.将特征值从大到小排序
5.保留最上面的N个特征向量
7.将数据转换到上述N个特征向量构建的新空间中
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 #remove mean covMat = cov(meanRemoved, rowvar=0) eigVals,eigVects = linalg.eig(mat(covMat)) eigValInd = argsort(eigVals) #sort, sort goes smallest to largest eigValInd = eigValInd[:-(topNfeat+1):-1] #cut off unwanted dimensions redEigVects = eigVects[:,eigValInd] #reorganize eig vects largest to smallest lowDDataMat = meanRemoved * redEigVects#transform data into new dimensions reconMat = (lowDDataMat * redEigVects.T) + meanVals return lowDDataMat, reconMat
利用PCA对半导体制造数据降维
将NaN替换成平均值的函数def replaceNanWithMean(): 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
相关文章推荐
- Maven <dependencies> 和 <dependencyManagement> 的区别
- 关于PopupWindow的一些注意的地方
- Android学习总结(二)创建工程及配置
- Mysql导入教大sql脚本文件
- Host is not allowed to connect to this MySQL server 和 access denied for user 'root'@'localhost' 解决办法
- 源码包安装
- BAT Java和Rti环境变量设置
- php网页游戏开发教程三(简单程序应用)
- 在jsp中格式化 时间格式
- java代码效率优化
- Linux生产环境中的分区方式
- php网页游戏开发教程二(游戏模式+系统)
- JavaScript中函数式编程的体现--map和reduce
- (原创工具)CnCrypt磁盘痕迹擦除工具,彻底杜绝数据恢复。
- machine learning
- Matlab文件操作
- 【每周一篇】VLAN与报文tag
- jquery 包裹节点warp(),warpAll(),warpInner()
- rpm包
- 弱一致性、CAP、BASE与NoSQL