- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 PCA 可视化 5 个特征数据集。我同时使用 matlab 和 R。在 R 中我使用 prcomp() 命令,在 matlab 中我使用 pca() 命令。两者都使用 SVD 来获得主成分,但我在 matlab 和 R 之间的每个主成分中得到了巨大的方差差异。在 matlab 中,我在第一个成分中收到 95% 的方差,在第二个成分中收到 3% 的方差,而在 R 中第一个分量的方差约为 42%,第二个分量的方差约为 28%。他们怎么变化这么大?
我还可以提到,我计划稍后将这些数据用于机器学习模型,并希望使用主成分来降低维度。我应该使用 matlab 还是 R 的结果?
旁注:我使用 fviz_eig() 显示 R 中每个组件的方差。
编辑:
R 代码:
res.pca <- prcomp(dataset, scale=TRUE)
fviz_eig(res.pca)
Matlab代码:
[coeff, score,~,~,var, mean] = pca(dataset,'algorithm','SVD');
bar(var)
“数据集”是一个包含 5 个特征的 csv 文件,每个特征包含 257493 个观测值。
最佳答案
正如 @Lyngbakr 在评论中指出的,观察到的差异的可能原因是您在 R 代码中而不是在 matlab 代码中指定了要缩放的变量。
这是 R 中的一个示例:
生成不同大小的变量(不同大小的随机均匀噪声):
x1 <- runif(100, 200, 500)
x2 <- runif(100, 20, 50)
x3 <- runif(100, 2, 5)
x4 <- runif(100, 0.2, 0.5)
mat <- cbind(x1, x2, x3, x4)
在不缩放的情况下进行 PCA:
pca1 <- prcomp(mat)
pca1$sdev
[1] 80.27564312 8.15330049 0.82751057 0.08491903
标准差反射(reflect)了变量的不同范围
如果仅将变量居中,则保留方差不变,这通常称为“基于协方差的 PCA”:
cov(mat)
x1 x2 x3 x4
x1 6444.144562 11.149336032 9.70055864 -1.191862833
x2 11.149336 66.495763487 0.06598063 -0.001822713
x3 9.700559 0.065980626 0.69928547 0.007559200
x4 -1.191863 -0.001822713 0.00755920 0.007560817
如果您还将变量标准化为方差 = 1,这通常称为“基于相关性的 PCA”。
pca2 <- prcomp(mat, scale = TRUE)
pca2$sdev
[1] 1.1308637 1.0205627 0.9624318 0.8679425
当数据缩放时,主成分的标准差讲述了不同的故事。
cov(scale(mat))
x1 x2 x3 x4
x1 1.00000000 0.017032146 0.144506324 -0.170749431
x2 0.01703215 1.000000000 0.009675918 -0.002570615
x3 0.14450632 0.009675918 1.000000000 0.103959503
x4 -0.17074943 -0.002570615 0.103959503 1.000000000
all.equal(cov(scale(mat)), cor(mat))
[1] TRUE
一张图片说一千个字:
library(ggbiplot)
library(cowplot)
plot_grid(ggbiplot(pca1),
ggbiplot(pca2),
labels = c("not scaled", "scaled"))
具有缩放功能的prcomp
应该类似于matlab
中的加权PCA
,其中在执行主成分时使用逆变量方差作为权重分析。
[coeff,~,latent,~,explained] = pca(dataset,...'VariableWeights','variance')
我没有 matlab 来测试。
关于r - 使用 matlab 和 R 计算数据集的 PCA,但每个组件的方差不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50236177/
我尝试用 PCA 构建一个定向边界框。在图片中您可以看到我的结果: 红点:点云 蓝色向量:PCA 分量 我尝试将点投影到向量上,以获得最小值、最大值和平均值。 但是我现在如何定义我的盒子呢?有什么想法
我们如何将 PCA 应用于一维数组? double[][] data = new double [1][600]; PCA pca = new PCA(data, 20); data = pca.ge
我知道PCA和ICA都用于降维,并且在PCA中主成分是正交的(不一定独立),但在ICA中它们是独立的。有人能澄清一下什么时候使用 ICA 而不是 PCA 更好吗? 最佳答案 ICA 不是一种降维技术。
我正在使用 scikit-learning 做一些降维任务。 我的训练/测试数据采用 libsvm 格式。它是一个有 50 万列的大型稀疏矩阵。 我使用 load_svmlight_file 函数加载
我一直在尝试使用 PCA 进行降维。我目前有一个大小为 (100, 100) 的图像,我正在使用一个由 140 个 Gabor 滤波器组成的滤波器组,其中每个滤波器都会给我一个响应,这又是一个 (10
我使用以下简单代码在具有 10 个特征的数据框上运行 PCA: pca = PCA() fit = pca.fit(dfPca) pca.explained_variance_ratio_ 的结果显示
我正在使用 scikit-learn PCA查找具有大约 20000 个特征和 400 多个样本的数据集的主要成分。 但是,与Orange3 PCA相比应该使用 scikit-learn PCA,我得
Sklearn PCA 是 pca.components_ 的 loadings?我很确定是这样,但我正在尝试遵循一篇研究论文,但我从他们的加载中得到了不同的结果。我在 sklearn 文档中找不到它
我有一个包含 50 多个变量的数据框 data,我正在尝试使用 caret 包在 R 中执行 PCA。 library(caret) library(e1071) trans <- preProces
我正在使用 PCA 来降低 N 维数据集的维数,但我想增强对大异常值的稳健性,因此我一直在研究 Robust PCA 代码。 对于传统的 PCA,我使用的是 python 的 sklearn.deco
我正在降低 Spark DataFrame 的维度与 PCA带有 pyspark 的模型(使用 spark ml 库)如下: pca = PCA(k=3, inputCol="features", o
我在 matlab 和 python 中生成相同的矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13
概述 主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和特征提取技术,用于将高维数据转换为低维的特征空间。其目标是通过线性变换将原始特征转化为
目录 计算过程 投影分量计算 假设你有一家理发店,已经记录了过去一年中所有顾客的头发长度和发型偏好的数据。现在你想从这些数据中提取一些主要的信息,比如顾客最常
我正在考虑使用 PCA(TruncatedSVD) 来减少我的稀疏矩阵的维数。 我将我的数据拆分为训练和测试拆分。 X_train , X_test, y_train, y_test = train_
我有来自四个群体、四个处理和三个重复的个体数据集。每个个体仅在一个群体、处理和重复组合中。我对每个人进行了四次测量。我想对每个种群、底物和重复组合的这些测量进行 PCA。 我知道如何对所有个体进行 P
在考虑均值时,数字 1 和 2 背后的直觉是什么?这将如何影响性能和准确性? 1号: pca = decomposition.PCA(n_components=4) X_centere
我正在使用来自 here 的输入数据(见第 3.1 节)。 我正在尝试使用 scikit-learn 重现它们的协方差矩阵、特征值和特征向量。但是,我无法重现数据源中显示的结果。我也在别处看到过这个输
我要做的事情如下:我有一套 Vektors v1-vn对于这些,我需要协方差矩阵(我在做 pca 时得到的)。我还需要协方差矩阵的特征值和特征向量。我按降序对特征值进行排序,然后根据相应的特征值对特征
给定 http://docs.opencv.org/modules/core/doc/operations_on_arrays.html PCA 应该可以通过传递一个矩阵来初始化。 cv::Mat m
我是一名优秀的程序员,十分优秀!