机器学习实战精读--------主成分分析(PCA)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习实战精读--------主成分分析(PCA)相关的知识,希望对你有一定的参考价值。
对数据进行简化的原因:
① 使得数据集更容易使用
② 降低许多算法的计算开销
③ 去除噪声
④ 使得结果易懂
方差是衡量数据源和期望值相差的度量值。
PCA:数据从原来的坐标系转换到新的坐标系,新坐标系是有数据本身决定的。
因子分析:假设观察数据的生成中有一些观察不到的隐变量,假设观察数据是这些隐变量和某些财政所呢个的线性组合。
独立成分分析(ICA):假设数据是从N个数据源生成的,如果数据源的数目小于观察数据的数目,则可以实现降维过程。
通过PCA进行降维处理,我们可以同时获得SVM和决策树的优点:一方面得到了和决策树一样简单的分类器,同时分类间隔和SVM一样好。
#coding:utf-8 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): #第一个参数:进行PCA操作的数据集,第二个参数:应用的N个特征 meanVals = mean(dataMat, axis=0) #求取均值 ,axis = 0:压缩行,对各列求均值,返回 1* n 矩阵 meanRemoved = dataMat - meanVals covMat = cov(meanRemoved, rowvar=0) # 求协方差矩阵 eigVals,eigVects = linalg.eig(mat(covMat)) #求矩阵的特征值和特征向量,特征值保存在eigVals中,特征向量保存在eigVects中 eigValInd = argsort(eigVals) #argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引),然后输出到eigValInd。 eigValInd = eigValInd[:-(topNfeat+1):-1] redEigVects = eigVects[:,eigValInd] #从小到大最N个值进行排序 lowDDataMat = meanRemoved * redEigVects#将数据转换到新空间 reconMat = (lowDDataMat * redEigVects.T) + meanVals return lowDDataMat, reconMat #将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) #nonzeros(a)返回数组a中值不为零的元素的下标,它的返回值是一个长度为a.ndim(数组a的轴数)的元组 datMat[nonzero(isnan(datMat[:,i].A))[0],i] = meanVal #set NaN values to mean return datMat
本文出自 “付炜超” 博客,谢绝转载!
以上是关于机器学习实战精读--------主成分分析(PCA)的主要内容,如果未能解决你的问题,请参考以下文章