从0开始学习R语言--Day11--主成分分析
主成分分析(PCA)
PCA是一种降维技术,它把一堆相关的变量(比如身高、体重、年龄)转换成少数几个不相关的新变量(叫“主成分”),这些新变量能最大程度保留原始数据的信息。
核心理念
-
降维:假设我们有10个指标,PCA可以帮我们压缩成2~3个关键指标,方便进一步可视化或分析。
-
去相关性:新生成的主成分之间互不相关,避免重复信息。
-
保留最大方差:第一个主成分(PC1)方向是数据变化最大的方向,第二个(PC2)是剩余变化最大的方向,依此类推。
其中,数据变化最大的方向意思是,PC1能解释原始数据中最大比例的差异(方差)。
一般来说,我们会通过PCA实现可视化高维数据(把4维数据压缩成2维图),去除噪声和冗余变量(删除重复的测量指标)和简化机器学习模型(减少特征数量,加快计算速度)。
下面我们照例生成一组数据来理解PCA:
set.seed(123)
height <- rnorm(100, mean = 170, sd = 10) # 身高
weight <- height * 0.6 + rnorm(100, mean = 0, sd = 5) # 体重 = 0.6*身高 + 噪声
age <- rnorm(100, mean = 30, sd = 5) # 年龄
data <- data.frame(height, weight, age) # 执行PCA(默认中心化和标准化)
pca_result <- prcomp(data, scale = TRUE) # 查看主成分
summary(pca_result) # 显示各主成分的方差贡献率plot(pca_result, type = "l", main = "PCA方差贡献率")# 绘制前两个主成分的散点图
library(ggplot2)
pca_data <- as.data.frame(pca_result$x)
ggplot(pca_data, aes(PC1, PC2)) + geom_point() + labs(title = "PCA降维结果(PC1 vs PC2)")
输出:
Importance of components:PC1 PC2 PC3
Standard deviation 1.3280 0.9867 0.51287
Proportion of Variance 0.5878 0.3245 0.08768
Cumulative Proportion 0.5878 0.9123 1.00000
首先,Standard deviation中的PC1的数值最大,代表其携带信息最多,从这个身高的例子来讲,就是PC1的数据(可能是体型大小)其实就反映了身高与体重之间的变化,要注意PCA所生成的变量,不再是原始数据集的变量,他只是蕴含了其中的信息;从Proportion of Variance可以看出PC1和PC2就共同解释了模型中90%左右的信息,这就代表可以尝试舍去PC3去建模了,也就把数据从三维降为了二维,从而能画出二维图。