统计学方法:主成分分析(PCA)实战

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统计学方法:主成分分析(PCA)实战相关的知识,希望对你有一定的参考价值。

参考技术A 本文重点讨论对降维中常用的统计分析方法之一:主成分分析法。对影响31个城市综合评价的8个指标,用主成分分析法确定8个指标的权重,并使用SPASS和Python两种实战方式进行操作。

主成分分析(Principal components analysis)的思路主要是将原始多个变量通过线性组合的(矩阵旋转)方式转化为几个线无关的变量,且新生成的变量包含了原始变量的绝大部分信息,从而达到降维的目的。但因为新生成成分中所有原变量都占有一定比例,不同比例之间没有一个统一衡量的标准,所以这种方式在解释性方面相对较差。

实际使用的时候,如果变量间的数据波动量比较大,需要进行数据的归一化处理。但在标准化的过程中会抹杀一部分原本刻画变量之间离散程度差异的信息。所以标准化是视实际使用场景而定。

主成分分析不要求数据呈正态分布,主要是使用了线性变换的技术,因为其应用范围较广,通过对原始变量进行综合与简化,可以客观地确定各个指标的权重,避免主观判断的随意性。但是从主成分的思路出发,其主要适用于变量间相关性较强的数据,如果原始数据相关性弱,则起不到很好的降维作用,且降维后存在一定的数据丢失。

从食品,衣着,居住,家庭设备,交通通讯,文教娱乐,医疗保健,其他8个指标对全国31个主要城市统计
注:数据不具实际含义,仅用于分析过程学习。

注Bartlett球形度检验:检验是否适合主成分析。其原假设是变量间两两相互独立。KMO判断适合主成分析的程度。

查看各个主成分的特征根,方差,方差占比。

主要查看各个维度在成分上的载荷

根据上一步的计算的权重计算主每个城市得分:
Indicator = ∑Di*Wi (D表示原始指标数值,W表示当前维度的权重)

我们采用机器学习库Scikit-learn进行PCA操作,基于协方差进行矩阵变换。

从3.1和3.2结果中可以看到排名中有些城市在两种方式上的结果略微有些差异,这个是SPASS和Scikit-learn实现上存在一定的差异,本文的重点在于讨论主成分分析在两种方式上的实现。

如果问题,欢迎回复交流。如有需要源数据的,可以回复获取。

特别声明,本文的数据来自于随机制造,不构成任何效力,仅用于技术学习使用。

PCA主成分分析_R语言实战

参考技术A 作为零计算机基础,纯生物背景的实验喵,有很多技能还不会,只希望将自己学习到的知识记录下来,一方面让自己能够时常温故知新,一方面与大家分享学习内容和心得,一起进步呀。

主成分分析(principle component analysis,PCA)是常用的线性数据降维方法,通过某种线性投影,将高维的数据映射到低维的空间中,并期望在映射到的低维空间中包含的信息量最大,即使用较少的数据维度来代表(保留)较多原始数据的特性。话句话说,就是把多个变量化成少数几个主成分的方法,这些主成分能够反映原始变量的大部分信息,为原始变量的线性组合。

R中作为主成分分析最主要的函数是 princomp() 函数

princomp() 主成分分析   可以从相关阵或者从协方差阵做主成分分析

summary() 提取主成分信息

loadings() 显示主成分分析或因子分析中载荷的内容

predict() 预测主成分的值

screeplot() 画出主成分的碎石图

plot() 画出数据关于主成分的散点图和原坐标在主成分下的方向

##设置工作路径

setwd("E:/R practice result")

##查看工作路径

getwd()

##读取数据

data <- read.csv("E:/R practice file/students_data.csv",header = T)

##进行主成分分析

data.pr <- princomp(data,cor = T) ##cor=T的意思是用相关系数进行主成分分析

##观察主成分的详细情况

summary(data.pr,loadings = T)

##计算得到各个样本主成分的数据

pca_data <- predict(data.pr)

##将文件写出,进行本地保存

write.table(pca_data,file = "E:/R practice result/pca_data.txt",row.names = T,col.names = T,quote = F,sep = "\t")

#画出主成分碎石图,主成分方差占总体方差的情况,辅助判断主成分提取个数。当折线由陡峭突然变得平稳时,陡峭到平稳对应的主成分个数即为参考提取主成分个数。X轴表示可能的因子数。在整个曲线下降的过程中,理论上会存在一点,该点处曲线出现明显的弯折,该点对应的X轴的数字即应保留的因子数。

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

#添加划分成分的参考线

abline (v = 2 ,   col = "#900021", lwd = 2, lty = 2)

#计算前两个主成分Comp1和Comp2得分,保存到data.pr2

data_pr2 <- data.pr$score[,1:2]    或者data_pr2 <- pca_data[,1:2]

write.table(data_pr2,file = "E:/R practice result/data_pr2.txt",row.names = F,col.names = T,quote = F,sep = "\t")

plot(data_pr2, main = "after PCA") 或者plot(pca_data[,1:2])

以上是关于统计学方法:主成分分析(PCA)实战的主要内容,如果未能解决你的问题,请参考以下文章

主成分分析(PCA)

主成分分析(PCA)原理及R语言实现

PrincipalComponentAnalysis 主成分分析

5.7 tensorflow2实现主成分分析(PCA) ——python实战(上篇)

5.7 tensorflow2实现主成分分析(PCA) ——python实战(下篇)

主成分分析(PCA)原理及R语言实现