PCA主成分分析 (R语言)

PCA主成分分析 (R语言)前天介绍了 PCA 主成分分析 使用的是 Python 进行案例的演示 今天继续使用 R 语言再来一遍 以便不同的人可以有不同的选择 为了不来回跳动 今天还是大概写一下完整的流程

大家好,欢迎来到IT知识分享网。

前天介绍了PCA主成分分析,使用的是Python进行案例的演示,今天继续使用R语言再来一遍,以便不同的人可以有不同的选择。为了不来回跳动,今天还是大概写一下完整的流程。

PCA主成分分析 (R语言)

【什么是PCA】

PCA(Principal Component Analysis,主成分分析)是一种统计技术,用于将高维数据投影到低维空间,同时保留尽可能多的信息。PCA通过寻找数据中方差最大的方向(即主成分),帮助我们理解和简化数据结构。

【为什么需要PCA】

主要有以下四点:

  1. 降维:在处理高维数据时,PCA可以减少特征数量,降低计算复杂度;
  2. 数据压缩:通过减少特征数量,降低数据存储需求;
  3. 去除噪声:通过保留主要成分,去除对结果影响较小的噪声;
  4. 数据可视化:将高维数据转换为2D或3D,便于可视化和理解数据。

【数据预处理】

因为PCA对数据的尺度敏感,如果特征在不同的尺度上,方差较大的特征会主导主成分。所以最好是先进行标准化处理,这里就使用R语言里面大家最熟悉的iris数据集演示↓

data(iris) # 移除分类标签,只保留数值特征 iris_data <- iris[, -5] # 进行标准化 iris_scaled <- scale(iris_data) # 查看标准化后的数据 head(iris_scaled)
PCA主成分分析 (R语言)

可以看到数据前后,已经被标准化了,标准化后的数据每个特征的均值为0,标准差为1,可以通过以下代码验证↓

mean(iris_scaled[,1]) # 应该接近0 sd(iris_scaled[,1]) # 应该接近1
> mean(iris_scaled[,1]) [1] -4.e-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. 0. 0. Sepal.Width -0. 1.0000000 -0. -0. Petal.Length 0. -0. 1.0000000 0. Petal.Width 0. -0. 0. 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. 0. 0. 0.0 > print(eig_vectors) [,1] [,2] [,3] [,4] [1,] 0. -0. 0. 0. [2,] -0. -0. -0. -0. [3,] 0. -0.0 -0. -0. [4,] 0. -0.0 -0. 0.

第一个特征值: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. 0. 0. 1.0000000
PCA主成分分析 (R语言)

前面两个维度就已经解释了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主成分分析 (R语言)

通过降维,我们就从思维的数据降到了二维,并可以直观的在二维平面上可视化展示了。

最后还要说明一下PCA的局限性。一是线性假设,PCA假设特征之间的关系是线性的,无法捕捉非线性关系。二是噪声敏感:PCA对异常值和噪声较为敏感,可能影响结果。使用的数据需要先进行数据的检验。

链接是我使用PowerBI整合的历史文章,按类型分类,可以根据需求查询:Microsoft Power BI↓

PCA主成分分析 (R语言)

https://app.powerbi.com/view?r=eyJrIjoiNjI2NWQ3NjktYjU0ZC00ZWZhLTgzMDgtMGI4ZTk1ZDlkODM3IiwidCI6IjI3NDQ3MWQ0LTM4ZDQtNDVlZS1hMmJkLWU1NTVhOTBkYzM4NiJ9

PCA主成分分析 (R语言)

End

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/109165.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信