从0开始学习R语言--Day11--主成分分析

主成分分析(PCA)

PCA是一种降维技术,它把一堆相关的变量(比如身高、体重、年龄)转换成少数几个不相关的新变量(叫"主成分"),这些新变量能最大程度保留原始数据的信息。

核心理念
  1. 降维:假设我们有10个指标,PCA可以帮我们压缩成2~3个关键指标,方便进一步可视化或分析。

  2. 去相关性:新生成的主成分之间互不相关,避免重复信息。

  3. 保留最大方差:第一个主成分(PC1)方向是数据变化最大的方向,第二个(PC2)是剩余变化最大的方向,依此类推。

其中,数据变化最大的方向意思是,PC1能解释原始数据中最大比例的差异(方差)。

一般来说,我们会通过PCA实现可视化高维数据(把4维数据压缩成2维图),去除噪声和冗余变量(删除重复的测量指标)和简化机器学习模型(减少特征数量,加快计算速度)。

下面我们照例生成一组数据来理解PCA:

R 复制代码
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)")

输出:

R 复制代码
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去建模了,也就把数据从三维降为了二维,从而能画出二维图。

相关推荐
tachibana23 分钟前
Go 语言里的 Context 是什么?
开发语言·后端·golang·go·语言
天桥下的卖艺者8 分钟前
R语言使用ggcube包轻松绘制文章中的各类3D图形
开发语言·3d·r语言
唐钰小宝B1 小时前
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
java·开发语言·windows
2603_969579282 小时前
U盘的系统备份怎样还原系统?详细步骤与注意事项
学习
知识分享小能手2 小时前
C学习教程,从入门到精通,C语言指针 —— 详细知识点总结(10)
c语言·开发语言·学习
熊猫钓鱼>_>2 小时前
开源鸿蒙平台 KMP 三方库 kotlin-csv 适配全流程:从编码假设到沙箱真机互通验证
开发语言·人工智能·华为·kotlin·harmonyos·鸿蒙
Meteors.2 小时前
Android Compose学习02:基础组件与 Modifier
android·学习
张张123y2 小时前
# 后端第七课:FastAPI 实战入门(用刚学的 Python 写第一个 API 接口)
开发语言·python·mysql·api·fastapi
小陈不好吃2 小时前
Java 泛型与类型擦除:从 PECS 原则到 TypeToken 绕过
java·开发语言·windows·pecs 原则·typetoken绕过
Shaoshing3 小时前
存储引擎与架构
java·开发语言·架构