简介
(Principal Component Analysis, PCA)
n 行 = 样本数 p 列 = 指标数 = 变量数 = 特征数
PCA 目标: 用 一组较少的不相关变量 代替 大量原相关变量,同时尽可能 保留原变量的信息,这些推导所得的变量称为 主成分 由于主成分有多个,有p 列,就有p个主成分,此时就还未达到降维效果,所以需要选择其中的一些留下作为最后的主成分 毫无疑问,希望保留尽可能多原变量信息,而方差大就意味着信息量大, 所以,我们可以按主成分对应的方差贡献率对主成分进行排序,并算出累积方差贡献率, 一般,当k 处 累积方差贡献率>80时,我们就可以选择前 k 个主成分
主成分之间彼此不相关 -> 协方差cov = 0 (相关系数 cor=0)-> 两两 正交:正交:当 p = 2 即二维图时,表现为线线垂直
步骤
假设 n * p ,即 n 样本,p 特征 有 p 特征,就有 p 主成分,但最后并不选择这么多,而是 按 各个主成分 方差递减,包含的信息量递减,只选取前 k 个 按 方差贡献率(方差占比)(某个主成分的方差占全部方差的比重)大小 先 对主成分 排序 排序后,算 累积方差贡献率(Cumulative Proportion),前k个位置达到 >80%,就选取前k个作为最后的主成分,用于之后的主成分表达式
R语言内置函数中有 2种(
princomp()
和prcomp
)实现PCA,因为 PCA 的实现一般有 2 种, PCA 的实现:
- 特征值(correlation和covariance)分解
- 奇异值(svd)分解
princomp() : cor参数:决定是 通过 cor 还是 cov 来计算
- 原始数据标准化(均值0,方差1)
R语言中
scale()
- 计算 样本协方差矩阵(标准化后协方差等于相关系数,所以,此处等同相关系数矩阵)
- 计算 协方差矩阵 的 特征值 和 特征向量
- 按 特征值 从大到小 排序
- 保留 最大 k 个特征向量
- 写出 主成分表达式,将数据转换到 特征向量 构建的新空间中
- 计算 主成分得分
- 根据得分数据,进一步统计分析
案例
代码语言:javascript复制电信业发展的主成分分析
library(openxlsx)
Case8 = read.xlsx("../Res/mvcase5.xlsx", "Case8", rowNames = T)
head(Case8)
image-20201212202559696
代码语言:javascript复制plot(hclust(dist(scale(Case8)))) # 系统聚类图
image-20201212202838582
代码语言:javascript复制source("../Res/msaR.r")
msa.pca(Case8, cor = T) # 主成分分析
image-20201212203006626
image-20201212203031083
image-20201212203049944
image-20201212203114987
运行后,发现可以提取两个主成分(Comp.1, Comp.2),这两个成分占全部的 96.14%,可以说是基本代表了全部指标的信息量
image-20201212204132221
第一个主成分(Comp.1) 主要由
电信业务总量,
国际互联网络用户,
互联网用户使用时长,
长途电话通话量,
长途电话通话时长 决定, 这5个指标是总量指标,说明一个城市的电信业务规模和电信通信业务发展水平
image-20201212204313015
第二个主成分(Comp.2) 主要由
每百人拥有固定电话数,
每百人拥有移动电话数 决定, 这两个指标 是 平均量成分,反映了 电信行业中的电话人均普及情况
image-20201212204803598
降维:7个经济指标 用 2个综合指标 代替,而综合指标的信息没有损失多少 利用线性加权方法,以各主成分的贡献率为权数, 按公式 计算
各城市
电信业发展水平的综合得分 并据此排名
:
举例:广州得分:
由广州在PC1上得分,PC2上得分 根据公式得出综合得分 TODO: 综合得分应该是这么算的,计算了下,只有一点误差
image-20201212210334261
image-20201212205559351
Q&A
Q: 为什么要对数据做标准化(均值0,方差1)? A: 当不同特征量纲相差较大时,由于方差对于量纲,均值的敏感,将会导致量纲大的特征 对于 方差的影响很大,而我们认为这是不对的,不应当因为 公里数几千几万,相较于几元钱,而过分的影响最后方差 这也是相关系数的体现,相关性不应当受量纲影响
Q : 标准化后服从 正态分布(高斯分布)? A: 标准化(均值0,方差1) 后 服从标准正态分布(均值0,方差1)
Q: 标准化是不是有多种实现?看到一种:
A : TODO: 标准化实现公式
Q: 标准化 和 归一化 异同? A: TODO: 标准化 和 归一化 异同?
Q: 如何对PCA结果主成分赋予新意义?即解释最后的主成分 A:根据PCA表达式的系数结合定性分析,主成分是原来变量的线性组合(原有变量 ---组合形成了--->最后的主成分) (PS:这点和因子分析正好相反,因子分析的 公共因子用于 解释/组合 原有变量)(数据背后隐藏的公共因子----形成解释了--->原有变量)
补充
standard deviation, $sdev:标准差 Proportion of Variance:方差的占比 Cumulative Proportion:累计贡献率
参考
感谢帮助!
- 主成分分析(PCA)原理及R语言实现 | 降维dimension reduction | Principal component analysis
- 《多元统计分析及R语言建模》(第五版)王斌会
- 《R语言实战》[美]卡巴斯夫
- 初识R语言——PCA的实现
- 主成分分析(PCA)原理及R语言实现
- R语言 PCA分析
- R语言手动计算主成分分析(PCA)及其在R函数的实现
- 本文作者: yiyun
- 本文链接: https://moeci.com/posts/分类-数据分析/分类-杂记/principal-component-analysis/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!