前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习重要算法-PCA主成分分析

机器学习重要算法-PCA主成分分析

作者头像
云时之间
发布2018-04-11 11:57:39
2.3K0
发布2018-04-11 11:57:39
举报
文章被收录于专栏:云时之间

大家好,很高兴可以和大家一起来继续学习机器学习,这几天时间,我着重研究了下主成分分析法,不过因为其数学推理实在有些过于繁琐和复杂,我也没太搞得太清楚,如果在文章当中出现了什么错误,也请各位多多指教.

1:什么是PCA?

主成分分析法是机器学习领域中常用的一种算法,是Pearson在1901年提出的,再后来由hotelling在1933年加以发展提出的一种多变量的统计方法.

主成分分析最主要的用途在于“降维”.通过析取主成分显出的最大的个别差异,也可以用来削减回归分析和聚类分析中变量的数目.

举个例子,你要做一项分析,选中了20个指标,你觉得都很重要,但是20个指标对于你的分析确实太过繁琐,这时候,你就可以采用主成分分析的方法进行降维.

20个指标之间会有这样那样的相互关系,相互之间会有影响,通过主成分分析后,得到4个或者5个主成分指标.此时,这几个主成分指标既涵盖了你20个指标中的绝大部分信息,又让你的分析得到了简化(从20维降到4、5维),简化了分析过程,增加了结果精度.如果在实际情况中,我们如果能用不超过3-5个的成分就可以解释数据变异的80%,这就可以算作为成功.

现在我们用R语言来做一个相关的PCA实例:

首先我们先来介绍下我们下边将要使用的主成分分析的相关函数:

1:princomp函数:

做主成分分析最主要的函数是princomp()函数,使用的格式为:

princomp(formula,data = NULL,subset,na.action,...)

其中formula是没有响应变量的公式,类似于回归分析和方差分析中但是没有响应的变量.data是数据框,类似于回归分析和方差分析.

2:summary函数:

summary函数与在回归分析中的用法相同,其主要的目的就是提取主成分的信息,主要的格式为:

summary(object,loadings = FALSE,cutoff = 0.1,...)

其中object是由princomp()得到的对象,loadings是逻辑变量,当loadings = TRUE时表示显示loading中的内容,当为FALSE时则不显示.

3:loadings函数:

loadings()函数主要显示主成分分析或者因子分析当中的loadings的内容,在主成分分析中,实际上是对主成分对应的各列,即正交矩阵.在因子分析中,其内容就是载荷因子矩阵,loadings()函数的使用格式为:

loadings(x)

其中x是由函数princomp()得到的对象

4:predict函数:

predict()函数是预测主成分的值,使用的格式为:

predict(object,newdata,...)

当object是由princomp()得到的对象,newdata是由预测值构成的数据框,当newdata缺省时,预测已有数据的主成分值

5:screeplot函数

screeplot()函数是画出主成分的碎石图,主要的格式有:

screeplot(x,npcs = min(10,length(x$sdev)),

type = c("barplot","lines"),

main = deparse(substitute(x)),...)

x princomp()npcs type

其中X是由princomp()得到的对象,npcs是画出主成分的个数,type是描述画出的碎石图的的类型,”barplot”是直方图类型,”lines”是直线图类型.

6:biplot函数

biplot()是画出关于主成分的散点图和原坐标在主成分下的方向,其中的格式为:

biplot(x,choices = 1:2,scale = 1,pc.biplot = FALSE,...)

其中X是由princomp()得到的对象,choices是选择的主成分,缺省值是第一个第二个主要成分,pc.biplot是逻辑变量.

现在我们把函数介绍完了,现在我们开始引用实例来去解决PCA问题:

在跳楼机大学中随机抽取某年级30名学生,测量其身高X1,体重X2,胸围X3和坐高X4,其中数据如下图所示,现在对着30名学生的身体的四项指标做主成分分析

首先,我们先用数据框的形式输入数据,用princomp()作为主成分分析,我在书上看到推荐使用相关的矩阵作为主成分分析更加的合理,因此这里选择的参数是cor=TRUE,最后用summary()列出主成分分析的值,这里选择loadings=TRUE,以下是相应的程序:

在上述程序中,summary函数列出了主成分分析的重要信息,Standard deviation行表示的是主成分的标准差,即主成分的方差的开方,也就是想应的特征值的开方,proporcrion of Variance行表示的是方差的贡献率,Cumulative Proportion行表示的是方差的累计贡献率

由于summary函数中的参数中选取了loadings = true,因此列出的的loading内容实际上就是主成分对应原始变量X1,X2,X3,X4的系数,因此我们可以得到:

因为前面两个的主成分的贡献率可以达到了96%,另外的两个主成分可以舍去,依次来达到降维的目的.

第一主成分对应的系数符号都相似,其中的数值都在0.5左右他反应了跳楼机学生的魁梧程度,身材高大的学生他的对应的其他的部分尺寸也比较大,因此第一主成分的值就比较小,均为负值;而身材矮小的学生,他的其他4部分都比较小.因此第一主成分的绝对值比较大,我们称第一主成分为大小因子,第二成分为高度和宽度的差,第二主成分大的可以表明这个学生比较瘦高,较小的可以看为”矮胖”.因此把第二主成分看为体型因子.

我们看一下各样本主成分的值,这个时候要使用predict()函数:

从第一主成分看,较小的几个值是25号样本,3号样本和5号样本,这说明这结果学生身材魁梧,而11,15,29的值比较大,说明这几个学生身材瘦小.

从第二主成分来看,较大的几个值是23,19,4号样本,说明这几个学生比较瘦比较高,17,8,2号样本这样的就属于矮胖了.

现在画出主成分的碎石图:

screeplot(student.pr,type="lines")

还可以画出第一主成分和第二主成分的样本直方图

好了,这就是这篇文章我想要阐述的一些东西,虽然看起来很简单,但是实际上后边的原理难以搞得一清二楚,接下来一段时间我将要研究主成分分析的一些应用,比如变量分类问题和主成分的回归问题,虽然这是个艰难的过程,但我相信其中的乐趣大于这些困难,加油吧!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.05.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档