gpt4 book ai didi

python - 了解 Python 中的 scikitlearn PCA.transform 函数

转载 作者:行者123 更新时间:2023-12-04 23:52:46 24 4
gpt4 key购买 nike

所以我目前正在从事一个涉及使用主成分分析或 PCA 的项目,并且我正在尝试快速学习它。幸运的是,Python 有一个来自 scikitlearn.decomposition 的非常方便的模块,它似乎为您完成了大部分工作。不过,在我真正开始使用它之前,我正试图弄清楚它到底在做什么。

我一直在测试的数据框如下所示:

   0  1
0 1 2
1 3 1
2 4 6
3 5 3

当我调用 PCA.fit() 然后查看我得到的组件时:
array([[ 0.5172843 ,  0.85581362],
[ 0.85581362, -0.5172843 ]])

根据我对 PCA 相当有限的了解,我有点理解这是如何计算的,但是当我调用 PCA.transform 时,我迷失了方向。这是它给我的输出:
array([[-2.0197033 , -1.40829634],
[-1.84094831, 0.8206152 ],
[ 2.95540408, -0.9099927 ],
[ 0.90524753, 1.49767383]])

有人可能会引导我了解它如何获取原始数据框和组件并将其转换为这个新数组吗?我希望能够理解它正在做的确切计算,这样当我扩大规模时,我会对正在发生的事情有更好的了解。谢谢!

最佳答案

当您调用 fit PCA 时,将计算一些向量,您可以将数据投影到这些向量上,以减少数据的维度。由于数据的每一行都是二维的,因此最多可以将数据投影到 2 个向量上,并且每个向量都是二维的。 PCA.components_ 的每一行是一个向量,事物被投影到其上,它的大小与训练数据中的列数相同。因为你做了一个完整的 PCA,你得到了 2 个这样的向量,所以你得到了一个 2x2 矩阵。这些向量中的第一个将最大化投影数据的方差。第二个将最大化第一次投影后剩余的方差。通常传递一个值 n_components这小于输入数据的维度,因此您返回的行数更少,并且您有一个宽但不高的 components_大批。

当您调用 transform您要求 sklearn 实际进行投影。也就是说,您要求它将数据的每一行投影到 fit 时学习的向量空间中。被称为。对于您传递给 transform 的每一行数据您将在输出中有 1 行,该行中的列数将是在 fit 中学习的向量数。阶段。换句话说,列数将等于 n_components 的值。你传递给构造函数。

当源数据有很多列并且您希望减少列数同时保留尽可能多的信息时,通常会使用 PCA。假设您有一个包含 100 行的数据集,每行有 500 列。如果你构建了一个像 PCA(n_components = 10) 这样的 PCA然后调用fit你会发现 components_有 10 行,一个用于您请求的每个组件,以及 500 列,因为这是输入维度。如果您随后调用 transform您的所有 100 行数据都将投影到这个 10 维空间中,因此输出将有 100 行(输入中的每行 1 行),但只有 10 列,从而减少了数据的维度。

如何做到这一点的简短答案是 PCA 计算奇异值分解,然后只保留其中一个矩阵的一些列。 Wikipedia有更多关于这背后的实际线性代数的信息——StackOverflow 的答案有点长。

关于python - 了解 Python 中的 scikitlearn PCA.transform 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42167907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com