(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 的实现:
princomp() : cor参数:决定是 通过 cor 还是 cov 来计算
R语言中
scale()
电信业发展的主成分分析
library(openxlsx)
Case8 = read.xlsx("../Res/mvcase5.xlsx", "Case8", rowNames = T)
head(Case8)
plot(hclust(dist(scale(Case8)))) # 系统聚类图
source("../Res/msaR.r")
msa.pca(Case8, cor = T) # 主成分分析
运行后,发现可以提取两个主成分(Comp.1, Comp.2),这两个成分占全部的 96.14%,可以说是基本代表了全部指标的信息量
第一个主成分(Comp.1) 主要由
电信业务总量,
国际互联网络用户,
互联网用户使用时长,
长途电话通话量,
长途电话通话时长 决定, 这5个指标是总量指标,说明一个城市的电信业务规模和电信通信业务发展水平
第二个主成分(Comp.2) 主要由
每百人拥有固定电话数,
每百人拥有移动电话数 决定, 这两个指标 是 平均量成分,反映了 电信行业中的电话人均普及情况
降维:7个经济指标 用 2个综合指标 代替,而综合指标的信息没有损失多少 利用线性加权方法,以各主成分的贡献率为权数, 按公式 计算
各城市
电信业发展水平的综合得分 并据此排名
:
举例:广州得分:
由广州在PC1上得分,PC2上得分 根据公式得出综合得分 TODO: 综合得分应该是这么算的,计算了下,只有一点误差
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:累计贡献率
感谢帮助!