PCA的Matlab实现与分析
PCA(Principal Component Analysis)在机器学习领域中,是很常见的一种降维的方法。
PCA的主要思想:将原始高维数据集中的点,映射到低维的超平面中,映射(投影)之后的结果,就是经PCA降维之后的结果(PCA降维具有较高的不可解释性)。
很自然的一个问题是:如何将高维的数据映射到低维呢?什么样的映射方法才是最好的?
答:原始数据到新构建的超平面的距离都足够近(最近重构性) or 原始数据在这个超平面上的投影尽可能分开(最大可分性)。
那么如何构建这个超平面呢?其实我理解的PCA降维,就是重新构建一个坐标系,将原始数据投影到新的坐标系当中去。具体有很多公式推导,建议翻阅周志华教授的机器学习一书中的第10章内容,讲解的很详细(但我没太看懂)。
由于我的主要目的是学会用PCA到我的任务中,并不研究如何对数据进行降维,所以下文我主要讲解Matlab中PCA的用法以及分析等。
设有需要降维的矩阵X(n行d列,n表示数据集中样本数,d表示特征数),Matlab中PCA用法如下:
[coeff,score,latent] = pca(X);
coeff是什么呢?根据官方文档,coeff是d*d的一个矩阵,是X矩阵的主成分系数,又称为载荷,周志华西瓜书中又将其称为投影矩阵,我理解可能就是新构建的坐标系。coeff这个矩阵跟我们任务相关性不大,知道是什么就行。
score是什么呢?score就是我们需要的了,score与原始X矩阵相对应,也是一个n*d的一个矩阵。根据官方文档的解释,score是原始数据X在主成分空间中的表示(那不就是在新构建的坐标系下的值嘛。。。说那么高大上,还叫做主成分分数,刚开始看还没看懂)。如果你需要将原始数据降维到2维,那你就选取score矩阵中的前两列就行,3维就选score中的前3列,etc。
latent是什么呢?latent又称为主成分方差,是原始数据X的协方差矩阵的特征值。要latent有什么用呢?这就是一个新问题。通常机器学习任务中,我们并不知道把原始数据降低到多少维度比较合适,那么我们可以用latent来帮助我们。latent是一个d行1列的矩阵。以latent的第一行第一列的值为例来说,它是一个实数,表示了如果只选用第一个特征的话,它包含了整个数据集多少的信息量(信息量指数据集的方差大小,方差越大,信息量越多)。如果我们选取了前两个特征,发现其所对应的latent值已经占了整个数据集的95%,那么我们就选取前两个特征就够了,依次类推。
下面我用一个例子来详细的描述一下这个过程。
本例中的数据集来源于http://odds.cs.stonybrook.edu/,用了其中的WBC数据集,是一个乳腺癌相关的数据集,用X来表示该数据集。X是一个377行30列的一个矩阵,一行表示一个患者的全部特征信息,每一列表示患者在该特征下的值(好像是乳腺细胞核的大小占比的数值,诸如此类)。我们用PCA来对该数据集进行降维与分析。
代码如下:
[coeff,score,latent] = pca(X);
latent=[0.144945253673876,.....](转置)是30行一列的矩阵,我们把latent中的值用excel画个饼状图看看,分析一下。
图1. 不带数据标记绘制的latent饼状图
图2.带数据标记绘制的latent饼状图
从图1与图2中,我们可以发现,前5个特征所包含的信息量已经占了整个数据集的85%。如果任务要求不是很高的话,那么我们只需要选用score矩阵中的前5列就够了,剩下的25个特征就被PCA降掉了。
通过PCA降维可以消除掉数据集中意义不太大的特征,提高模型的训练速度,加快收敛,降低运算量等诸多好处。虽然降维之后的数据,相比于原始的数据肯定是丢失了某些信息,但一般来说,丢弃了也就丢弃了,因为丢弃的信息在一定程度上可以达到去噪的效果,同时也可以提高我们的采样密度。
关于PCA的方法推导,后面再继续研究。目前已经达到了我的任务需求,后面有空的话,详细推导一下PCA。
PCA的Matlab实现与分析相关推荐
- 中药材鉴别-方法:聚类;PCA 主成分分析;线性判别式分析;判别式检验
基于线性判别式的中药材鉴别问题的数学模型 摘要 本文旨在讨论如何利用中药材的光谱特征鉴别药材的种类及产地,主要运用 系统聚类,PCA 主成分分析,线性判别,判别式运用等方法,使用了 MATLAB,Ex ...
- Matlab实现EOF分析
EOF(Empirical Orthogonal Function)分析,也叫主成分分析(PCA),是一种经验正交函数分析方法.在大气.海洋.气候等科学领域中经常用于分析多维数据的空间和时间变化模式. ...
- 主成分分析(PCA)和独立成分分析(ICA)相关资料
来源:知乎:独立成分分析(ICA)与主成分分析(PCA)的区别在哪里(https://www.zhihu.com/question/28845451) - 一楼:魏天闻 首先回答题主的问题:不管是PC ...
- 基音检测 matlab,基于MATLAB基音检测分析.doc
基于MATLAB基音检测分析 基于MATLAB基音检测分析 摘要:基音检测作为语音信号处理的重要手段,被广泛地应用于语音的合成.编码及识别等一系列语音信号处理技术问题.基音检测的准确性对于要求极高的语 ...
- matlab时频分析工具箱安装_EEG时频分析介绍与实现(基于EEGLAB、NetStation与Analyzer2软件)...
本文首发在个人博客上(7988888.xyz),此文章中所有链接均通过博客进行访问. 我在很早之前有翻译过一篇通过小波变换来进行时频分析的文章,可参考<小波教程>.最近,我在油管上看到了E ...
- matlab函数anova,MATLAB进行单因素方差分析-ANOVA
<MATLAB进行单因素方差分析-ANOVA>由会员分享,可在线阅读,更多相关<MATLAB进行单因素方差分析-ANOVA(5页珍藏版)>请在人人文库网上搜索. 1.MATLA ...
- matlab函数anova,MATLAB进行单因素方差分析——ANOVA
MATLAB进行单因素方差分析-ANOVA 方差分析的目的是确定因素的不同处理(方法.变量)下,响应变量(类别.结果)的均值是否有显著性差异. 方差分析用于两个或者两个以上因素样本均值的检验问题,如果 ...
- 示波器数据用matlab进行fft,示波器CSV波形数据导入Matlab进行FFT分析.doc
示波器CSV波形数据导入Matlab进行FFT分析 1,将CSV文件拖到workspace窗口,弹出的Import Wizard窗口中,点选"Next",新窗口中选第二项" ...
- matlab示波器导出csv数据,示波器CSV波形数据导入Matlab进行FFT分析
示波器CSV波形数据导入Matlab进行FFT分析 1,将CSV文件拖到workspace窗口,弹出的Import Wizard窗口中,点选"Next",新窗口中选第二项" ...
最新文章
- java 流转文件_java 实现 word 文档的在线编辑以及流转
- php mysql用户登录_php mysql实现用户登录功能的代码示例
- ads1115寄存器操作
- jbod ugood 磁盘驱动状态_组成原理—磁盘/IO/中断
- python xlwt写入数据超过范围限制_python的xlwt不能正确写入以及缓冲区问题
- LightOJ - 1222 Gift Packing(最大费用最大流/KM)
- jquery:validate的例子{转载}
- 电脑知识:新电脑数据迁移解决方案,看完你就会了!
- 7-25 朋友圈 (25 分)(详解+并查集的了解和应用)
- Okhttp 源码解析
- oracle心间directory并附权,【Oracle】第一章创建授权
- 获取.propertys文件获取文件内容
- eclipse 主题
- java控制台进度_java进度条:控制台输出百分比示例代码
- C语言编程判断字母大小并转换,towupper()
- Linux如何强制关闭任务进程(Linux版任务管理器)
- PM at Google —— 最全产品经理常用术语及知识点,建议收藏!
- 中兴推“小兴看看”,诠释智能家电的真谛
- 实现PPT的在线预览(动态,及转PDF)
- windows重建linux引导,Linux引导修复 利用Linux重建Windows引导