网站首页 > 资源文章 正文
前天介绍了PCA主成分分析,使用的是Python进行案例的演示,今天继续使用R语言再来一遍,以便不同的人可以有不同的选择。为了不来回跳动,今天还是大概写一下完整的流程。
【什么是PCA】
PCA(Principal Component Analysis,主成分分析)是一种统计技术,用于将高维数据投影到低维空间,同时保留尽可能多的信息。PCA通过寻找数据中方差最大的方向(即主成分),帮助我们理解和简化数据结构。
【为什么需要PCA】
主要有以下四点:
- 降维:在处理高维数据时,PCA可以减少特征数量,降低计算复杂度;
- 数据压缩:通过减少特征数量,降低数据存储需求;
- 去除噪声:通过保留主要成分,去除对结果影响较小的噪声;
- 数据可视化:将高维数据转换为2D或3D,便于可视化和理解数据。
【数据预处理】
因为PCA对数据的尺度敏感,如果特征在不同的尺度上,方差较大的特征会主导主成分。所以最好是先进行标准化处理,这里就使用R语言里面大家最熟悉的iris数据集演示↓
data(iris)
# 移除分类标签,只保留数值特征
iris_data <- iris[, -5]
# 进行标准化
iris_scaled <- scale(iris_data)
# 查看标准化后的数据
head(iris_scaled)
可以看到数据前后,已经被标准化了,标准化后的数据每个特征的均值为0,标准差为1,可以通过以下代码验证↓
mean(iris_scaled[,1]) # 应该接近0
sd(iris_scaled[,1]) # 应该接近1
> mean(iris_scaled[,1])
[1] -4.484318e-16
> sd(iris_scaled[,1])
[1] 1
【协方差矩阵】
协方差矩阵显示了每对特征之间的协方差,值越大表示特征间的线性关系越强,下面计算一下协方差矩阵值↓
# 计算协方差矩阵
cov_matrix <- cov(iris_scaled)
# 查看协方差矩阵
print(cov_matrix)
> print(cov_matrix)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 1.0000000 -0.1175698 0.8717538 0.8179411
Sepal.Width -0.1175698 1.0000000 -0.4284401 -0.3661259
Petal.Length 0.8717538 -0.4284401 1.0000000 0.9628654
Petal.Width 0.8179411 -0.3661259 0.9628654 1.0000000
从结果可以看到,还是有几组协方差值非常大的,说明有部分特征之间还是有很强的线性关系。
【特征值和特征向量】
特征值和特征向量是描述协方差矩阵的关键,它们决定了主成分的方向和重要性。
特征值(Eigenvalues):特征值是一个标量,表示一个线性变换在特征向量方向上的伸缩因子。在PCA中,特征值表示主成分的方差大小,即该主成分对数据变化的贡献度。特征值越大,表示对应的主成分解释的数据方差越多。因此,可以通过比较特征值的大小,选择保留的主成分数量。
特征向量(Eigenvectors):特征向量是一个向量,表示数据在特征空间的方向。在PCA中,特征向量定义了新的坐标轴(主成分)的方向。
# 计算特征值和特征向量
eig <- eigen(cov_matrix)
eig_values <- eig$values
eig_vectors <- eig$vectors
# 查看特征值和特征向量
print(eig_values)
print(eig_vectors)
> print(eig_values)
[1] 2.91849782 0.91403047 0.14675688 0.02071484
> print(eig_vectors)
[,1] [,2] [,3] [,4]
[1,] 0.5210659 -0.37741762 0.7195664 0.2612863
[2,] -0.2693474 -0.92329566 -0.2443818 -0.1235096
[3,] 0.5804131 -0.02449161 -0.1421264 -0.8014492
[4,] 0.5648565 -0.06694199 -0.6342727 0.5235971
第一个特征值:2.918,解释了最多的方差。第二个特征值:0.914,解释了次多的方差。第三个特征值:0.147,解释了较少的方差。第四个特征值:0.021,解释了最少的方差。
第一个主成分(对应第一个特征值):[0.521, -0.269, 0.58, 0.564]
该向量的各个分量表示原始特征在第一个主成分方向上的权重。
第二个主成分(对应第二个特征值):[-0.377, -0.923, -0.024, -0.066]
该向量的各个分量表示原始特征在第二个主成分方向上的权重。后面以此类推。
【主成分选择】
通过累计方差解释率,选择累计方差解释率达到一个阈值的主成分数。然后还可以通过碎石图直观判断,碎石图显示了每个主成分的累积方差,选择拐点前的主成分数↓
explained_variance <- eig_values / sum(eig_values)
cumulative_variance <- cumsum(explained_variance)
# 绘制碎石图
plot(cumulative_variance, type='b', xlab='数量', ylab='累积解释方差', main='碎石图')
> cumulative_variance
[1] 0.7296245 0.9581321 0.9948213 1.0000000
前面两个维度就已经解释了95.8的信息了,所有这里选择两个主成分就行了。
【主成分二维可视化】
使用R语言进行PCA的编程实现,展示如何使用常用的R包prcomp和ggplot2进行PCA分析和可视化↓
pca_result <- prcomp(iris_data, center=TRUE, scale.=TRUE)
# 查看PCA结果
summary(pca_result)
# 提取主成分得分
pca_scores <- pca_result$x
# 将PCA结果与原始标签结合
pca_data <- data.frame(pca_scores, Species=iris$Species)
# 使用ggplot2进行可视化
library(ggplot2)
ggplot(pca_data, aes(x=PC1, y=PC2, color=Species)) +
geom_point(size=3) +
labs(title="PCA主成分分析二维图", x="主成分1", y="主成分2")
通过降维,我们就从思维的数据降到了二维,并可以直观的在二维平面上可视化展示了。
最后还要说明一下PCA的局限性。一是线性假设,PCA假设特征之间的关系是线性的,无法捕捉非线性关系。二是噪声敏感:PCA对异常值和噪声较为敏感,可能影响结果。使用的数据需要先进行数据的检验。
链接是我使用PowerBI整合的历史文章,按类型分类,可以根据需求查询:Microsoft Power BI↓
https://app.powerbi.com/view?r=eyJrIjoiNjI2NWQ3NjktYjU0ZC00ZWZhLTgzMDgtMGI4ZTk1ZDlkODM3IiwidCI6IjI3NDQ3MWQ0LTM4ZDQtNDVlZS1hMmJkLWU1NTVhOTBkYzM4NiJ9
End
猜你喜欢
- 2024-09-18 实例了解特征值和特征向量应用于降维 (PCA)
- 2024-09-18 13张动图助你彻底看懂马尔科夫链、PCA和条件概率!
- 2024-09-18 PCA的概念及适应症(下)(pca用于什么病人)
- 2024-09-18 【Python特征工程系列】教你使用PCA进行特征分析与降维(案例)
- 2024-09-18 PCA(主成分分析)应用于人脸图像(pca主成分分析用什么软件画)
- 2024-09-18 数据降维:PCA的原理与应用场景(pca降维图)
- 2024-09-18 使用Python深入了解PCA(主成分分析)
- 2024-09-18 主成分分析及EXCEL中操作实例(PCA)
- 2024-09-18 线性降维算法PCA和LDA有哪些区别?
- 2024-09-18 主成分分析(PCA)的数学原理(主成分分析pca步骤)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)