PCA数据降维
Principal Component Analysis
算法优缺点:
- 优点:降低数据复杂性,识别最重要的多个特征
- 缺点:不一定需要,且可能损失有用的信息
- 适用数据类型:数值型数据
算法思想:
降维的好处:
- 使得数据集更易使用
- 降低很多算法计算开销
- 去除噪声
- 使得结果易懂
主成分分析(principal component analysis,PCA)的思想是将数据转换到新的坐标系,这个坐标系的选择是由数据本身决定的,第一维是原始数据中方差最大的方向,第二个是与第一维正交且方差最大的,一直重复。。。
主成分分析中使用数据集的协方差矩阵和特征值分析来获得。
函数:
pca(dataMat, topNfeat=999999)
由 于主成分分析基本上可以说是算个矩阵的问题,而numpy在这方面又帮我们做好了,所以函数很简单,就是先去平均值,然后计算协方差矩阵和其特征值,最后 选出最大的topNfeat个,最后用这些特征向量将源数据转到新的空间。当然使用的时候有两种方式,一种是跟限定个数,另一种则是通过数据压缩比来完成 的。
#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=999999):
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
def main():
dataMat = loadDataSet(‘testSet.txt’)
lowDMat, reconMat = pca(dataMat, 1)
print shape(lowDMat)
if __name__ == ‘__main__’:
main()
转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn