利用PCA简化数据
来源:互联网 发布:工业控制网络电子版 编辑:程序博客网 时间:2024/05/17 02:30
利用PCA简化数据
用途
主成分分析(Principal Component Analysis)可以把大量的数据的维度减小,也可以叫做降维。
这么做的好处如下:
- 使得数据更容易使用
- 降低很多计算的开销
- 去除噪声
- 使得结果易懂
本质
通过将原来的数据从高维度的坐标系映射到低维度新的坐标系来,这里有一篇很不错的例子:主元分析(PCA)理论分析及应用。
PCA过程简述
去除平均值
计算协方差矩阵
计算协方差矩阵的特征值和特征向量
将特征值从大到小排序
保留最上面的N个特征向量
将数据转换到上述N个特征向量构建的新空间中
代码
读取数据
def loadDateSet(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#去除平均值 covMat = cov(meanRemoved,rowvar=0)#计算协方差矩阵 eigVals,eigVects = linalg.eig(mat(covMat))#计算特征值(eigVals)和特征向量(eigVects) eigValInd = argsort(eigVals)#argsort返回排序好后的序号 eigValInd = eigValInd[:-(topNfeat+1):-1]# mat[a:b:c] 表示下标从a到b间隔为c redEigVects = eigVects[:,eigValInd]#Matrix 选择 mat[a,b] a可以用范围a1:a2 直接:表示所有 lowDDataMat = meanRemoved * redEigVects#降维后的数据 reconMat = (lowDDataMat * redEigVects.T) + meanVals#降维后的数据重构 方便调试 return lowDDataMat,reconMat
测试部分
def test(): dataMat = loadDateSet('machinelearninginaction/Ch13/testSet.txt') lowDMat,reconMat = pca(dataMat,1) print shape(lowDMat) import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.scatter(dataMat[:,0].flatten().A[0],dataMat[:,1].flatten().A[0],marker='o',s=50) ax.scatter(reconMat[:,0].flatten().A[0],reconMat[:,1].flatten().A[0],marker='o',s=50,c='red')
测试结果
数据集 testSet.txt下载
错误使用PCA的例子
ng的视频里面在最后提到了关于PCA使用的注意点
将其用于防止过拟合
这么做减少了特征的数量,非常不好。防止过拟合其实可以使用别的方法,比如归一化处理。因为PCA只是近似地利用方差来丢弃特征,并不考虑与结果变量相关的信息,因此可能丢弃重要的特征。
而归一化不一样,会考虑结果变量,所以不用担心丢失重要的数据。
默认将PCA当作是学习过程的一部分
虽然很多时候效果不错,但还是应当先从原始数据开始,只有在必要时候才会去考率PCA。
参考内容
ng的机器学习coursera课程
《机器学习实战》
主元分析(PCA)理论分析及应用
1 0
- 利用PCA简化数据
- 利用PCA来简化数据
- 利用 PCA来简化数据
- 机器学习第十三章:利用PCA来简化数据
- chapter13 机器学习之利用PCA简化数据
- 《机器学习实战》利用PCA来简化数据
- 《机器学习实战》读书笔记之利用PCA来简化数据
- py2.7《机器学习实战》利用PCA来简化数据
- 【机器学习实战-python3】利用PCA简化数据
- 机器学习之利用PCA来简化数据
- 机器学习实战-利用PCA来简化数据
- 机器学习实战-13利用PCA来简化数据
- 机器学习实战笔记-利用PCA来简化数据
- PCA简化数据
- 机器学习实战——第十三/十四章:利用PCA和SVD来简化数据
- 《机器学习实战》笔记之十三——利用PCA来简化数据
- [完]机器学习实战 第十三章 利用PCA来简化数据
- 【机器学习实战】第13章 利用 PCA 来简化数据
- 抬起头
- windows环境下使用VS2012编译SQLITE3
- Android复习之BroadCastReceiver
- linux笔记-LVM
- 欢迎使用CSDN-markdown编辑器
- 利用PCA简化数据
- web中session与序列化的问题
- CUDA内存类型memory
- Hive优化--文件格式
- 判断三角形类型 018
- Web框架学习篇--Strust1(四) ActionMessage、ActionError
- UVa1368
- 简图记录-番茄时间管理
- linux笔记-awk详解