使用R语言进行简单的主成分分析(PCA)

embedded/2024/12/22 19:55:45/

主成分分析(PCA)是一种广泛使用的数据降维技术,它可以帮助我们识别数据中最重要的特征并简化复杂度,同时尽量保留原始数据的关键信息。在这篇文章中,我们将通过一个具体的例子,使用R语言实现PCA,展示其在实际数据集上的应用。

背景和理论基础

PCA通过线性变换将原始数据转换到新的坐标系统中,新坐标(即主成分)的选择是基于数据的方差最大化。换句话说,第一个主成分具有最大的方差,每个随后的主成分都在与前面主成分正交的意义上具有最大的方差。

R语言实现步骤

在R中实施PCA相对直接,因为stats包中已经包含了执行PCA的函数prcomp()。以下是使用R语言进行PCA的详细步骤:

1. 准备工作和数据加载

我们将使用R内置的数据集iris来展示如何进行PCA。iris数据集包含了150个样本的4个特征,这些特征是花瓣和萼片的长度和宽度,以及每个样本的种类标签。

# 加载数据
data(iris)
head(iris)

2. 数据预处理

虽然iris数据集已经很干净,但通常我们需要进行数据标准化,以确保每个特征在PCA中的贡献是平等的。

# 仅提取数值数据用于PCA
iris.pca <- prcomp(iris[,1:4], scale. = TRUE)

这里,prcomp函数用于执行PCA,scale.参数设置为TRUE以进行数据标准化。

3. 查看PCA结果

执行PCA后,我们可以查看各主成分的方差解释率,这有助于我们了解每个主成分保留了多少信息。

# 查看主成分的标准偏差(即特征值的平方根)
print(iris.pca$sdev)# 计算并打印各主成分的方差解释率
prop.var <- iris.pca$sdev^2 / sum(iris.pca$sdev^2)
print(prop.var)

4. 可视化PCA结果

我们可以将PCA的结果可视化,以直观地展示数据点在主成分空间中的分布。

# 绘制前两个主成分
plot(iris.pca$x[,1:2], col=iris$Species, pch=19, xlab="PC1", ylab="PC2")
legend("topright", legend=levels(iris$Species), col=1:3, pch=19)

这段代码将数据点根据它们的种类在由第一和第二主成分构成的平面上进行了绘制。

总结

使用R语言进行PCA是一个直观且有效的方法来降低数据维度并探索数据结构。通过上述步骤,我们可以不仅看到数据在主成分上的投影,而且可以量化每个主成分的重要性。PCA在许多领域都有广泛的应用,包括基因组学、金融和市场研究等,它是任何数据科学家工具箱中的重要工具之一。


http://www.ppmy.cn/embedded/23163.html

相关文章

燃冬之yum、vim和你

了解了很多指令和权限&#xff0c;搞点真枪实弹来瞅瞅 学Linux不是天天就在那掰扯指令玩&#xff0c;也不是就研究那个权限 准备好迎接Linux相关工具的使用了么码农桑~ yum 软件包 什么是软件包呢&#xff1f; 首先来举个生活中常见点的例子&#xff1a;比如我的手机是华为…

ThreeJs模拟工厂生产过程八

这节算是给这个车间场景收个尾&#xff0c;等了几天并没有人发设备模型给我&#xff0c;只能自己找了一个凑合用了。加载模型之前&#xff0c;首先要把货架上的料箱合并&#xff0c;以防加载模型之后因模型数量多出现卡顿&#xff0c;方法和之前介绍的合并传送带方法相同&#…

TensorFlow框架介绍-深度学习

TensorFlow是一个开源机器学习框架&#xff0c;由Google开发并维护。它是用于构建和训练机器学习模型的一个强大工具。TensorFlow的核心概念是张量&#xff08;Tensor&#xff09;和计算图&#xff08;Graph&#xff09;。 张量是多维数组的一种泛化形式&#xff0c;可以是标量…

【Leetcode 377】组合总和 Ⅳ —— 动态规划

377. 组合总和 Ⅳ 给你一个由 不同 整数组成的数组nums&#xff0c;和一个目标整数target。请你从nums中找出并返回总和为target的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3], target 4 输出&#xff1a;7 …

Github Action Bot 开发教程

Github Action Bot 开发教程 在使用 Github 时&#xff0c;你可能在一些著名的开源项目&#xff0c;例如 Kubernetes&#xff0c;Istio 中看到如下的一些评论&#xff1a; /lgtm /retest /area bug /asssign xxxx ...等等&#xff0c;诸如此类的一些功能性评论。在这些评论出…

php反序列化以及相关例题

目录 一、什么是序列化和反序列化&#xff1f; 二、相关函数 serialize()函数&#xff1a; unserialize()函数&#xff1a;反序列化 三、PHP序列化格式 四、序列化与反序列化的作用 五、各种数据类型序列化后的效果 六、魔术方法 七、反序列化的一些绕过 八…

elasticsearch-8.1.0安装记录

目录 零、版本说明一、安装二、使用客户端访问 零、版本说明 centos [rootnode1 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)elasticsearch elasticsearch-8.1.0-linux-x86_64一、安装 systemctl stop firewalld.servicesystemctl disable firewal…

STM32 float浮点数转换成四个字节

float浮点数转换成四个字节 在C或C中&#xff0c;联合体&#xff08;union&#xff09;是一种特殊的数据结构&#xff0c;它允许在相同的内存位置存储不同的数据类型。联合体中的所有成员共享同一块内存区域&#xff0c;这意味着同一时间内&#xff0c;联合体只能保存其中一个…