720 likes | 1.56k Views
主成分分析 Principal Component Analysis. 廖钧. 大纲. 背景 应用 实例 理论基础 结合 R 语言 总结. 问题. 拿到描述汽车的样本,既有“千米 / 小时”,又有“英里 / 小时”来表征最大速度(冗余) 拿到数学系期末成绩统计单,包含三列。一 列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩 。(相关). 简单例子. 输入: 假定我们掌握了一个开源社区的所有 bug 数据,比如每个 bug 的严重程度,所属系统,提交者,当前状态等等许多描述 bug 的信息。 任务:
E N D
大纲 • 背景 • 应用实例 • 理论基础 • 结合R语言 • 总结
问题 • 拿到描述汽车的样本,既有“千米/小时”,又有“英里/小时”来表征最大速度(冗余) • 拿到数学系期末成绩统计单,包含三列。一列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩。(相关)
简单例子 • 输入: • 假定我们掌握了一个开源社区的所有bug数据,比如每个bug的严重程度,所属系统,提交者,当前状态等等许多描述bug的信息。 • 任务: • 介绍社区的bug状况,难道我们直接将这些数据“原封不动”地摆出去? • Of course not! • 方法: • 用几个指标简单明了地表示清楚
抽象 • 多维数据(multidimensional statistics) • 多个变量来描述事物 • 多维矩阵(N个事物,每个事物由K个变量来描述) • 变量之间有许多是相关的 • 主成分分析( Principal Component Analysis ) • 降低数据维度 • 减少数据相关 • 减少冗余 • 便于描述与理解 • PCA的思想是将n维特征映射到k维上(k<n)
大纲 • 背景 • 简单实例 • 理论基础 • 结合R语言 • 总结
成绩数据 • 学生的成绩数据,包含数学,物理,化学,语文,历史,英语
提出问题 • 如何缩减变量个数 • 缩减后的变量(主成分)包含有多少原来的信息 • 进一步的描述与解释数据
降维-1 • 从最简单的开始 • 假设数据只有二维,数据形成椭圆形状的点阵
降维-2 • 长轴:数据的主要变化 • 短轴:数据的次要变化 • 寻找新变量,通过变换使得新变量与椭圆长短轴平行 • 如果长轴变量代表数据包含的大部分信息,就用该变量代表原先的两个变量,完成降维。 • 多维与二维情况类似
主成分的选取 • 降维到几个变量,就有几个主成分 • 一般经验选取的主成分的主轴总长度占所有主轴长度的大约80%
数学知识-1——模型 • 主成分分析模型: • 假定有N个样本,每个样本由P个变量描述,这样构成一个N*P的矩阵(主成分分析的输入) • 其中
数学知识-2——变换 • 作,,的线性组合,记新的变量指标为,,则 • 变换原则: • 1) • 2)不相关 • 3)是,,的线性组合中方差最大者,是,,的线性组合中方差最大者,以此类推。
数学知识-3——衡量信息 • 3)中“方差”的计算方法 • 计算变量的协方差矩阵: • 计算R的特征值及相应的特征向量 • 按照特征值从大到小排序,相应的特征向量组成主成分的系数:
回到例子——特征值的贡献-1 • 根据特征值大小进行主成分的选取 • 前两个成分的特征值累积占了81%,后面特征值贡献越来越小。
特征值的贡献-2 • 通过碎石图可以直观看出特征值的贡献
解释与描述数据——线性组合 • 每一列代表一个主成分作为原来变量线性组合的系数。 • 这些系数也叫主成分的载荷(loading),表示主成分与原变量的相关系数 • 相关系数越大,代表性越大。
解释与描述数据——载荷图 • 左边是数学、物理、化学,右边是语文、历史、外语
小结(主成分分析的步骤) • 输入:多维矩阵(N*P) • 输出:降维后的矩阵(N*M)(M<<P) • 步骤: • 数据标准化(option) • 计算变量相关系数矩阵及其特征值与特征向量(对变量进行变换) • 根据辅助工具找出主成分,进一步分析
大纲 • 背景 • 应用实例 • 理论基础 • 结合R语言 • 总结
最大方差理论-1 • 在信号处理中认为信号具有较大的方差,噪声有较小的方差。 • 最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大。
最大方差理论-2 • 例子:5个样本点
最大方差理论-3 • 投影:将样本投影到某一维上,用一条过原点的直线表示 • 左图方差大
最大方差理论-4 • 从投影到协方差
最大方差理论-5 • 中间那部分就是协方差矩阵
大纲 • 背景 • 应用实例 • 理论基础 • 结合R语言 • 总结
数据输入 • d=read.table(“clipboard”) # 从剪贴板读取数据
标准化 • sd=scale(data) #对数据进行标准化
主成分分析 • pca=princomp(sd,cor=T) #主成分分析函数 • screeplot(pca,type=“line”,main=“碎石图”,lwd=2) #画出碎石图
衡量贡献 • dcor=cor(d) • deig=eigen(dcor) #求矩阵的特征值和特征向量 • deig$values #输出特征值 • 5.60041166 1.11405614 0.52667116 0.28361049 • 0.20295832 0.16194133 0.06755969 0.04279121
解释数据-1 • pca$loadings[,1:2] #输出前2个主成分的载荷系数 • 第一个主成分对V3,V4,V6,V7,V8载荷系数较大 • 第二个主成分对V1,V2,V5载荷系数较大
解释数据-2 • 计算综合得分: C=(b1*C1+b2*C2)/(b1+b2)=0.834 C1+0.166 C2 • s=pca$scores[,1:2] #输出前2个主成分的得分 • c=s[1:31,1]*0.834+s[1:31,2]*0.166 #计算最终得分 • cbind(s,c) 输出综合得分信息
解释数据-3 • V1 V2 V3 V4 V5 V6 V7 V8 • 第一主成分(3,4,6,7,8)可以看做日常消费(精神消费) • 第二主成分(1,2,5)可以看做衣食与医疗消费(基础消费) • 消费差异明显
大纲 • 背景 • 应用实例 • 理论基础 • 结合R语言 • 总结
总结 • 主成分分析面向的问题 • 主成分分析的原理及简单例子 • R语言实现方法
待解决的问题 • 主成分分析有两种,使用协方差矩阵与相关系数矩阵,有什么不同
参考资料 • R语言PCA分析 • http://www.cnblogs.com/bigshuai/archive/2012/06/18/2553808.html