Scikit-learn主成分分析(PCA)用于降维

9
我想要进行主成分分析以实现数据降维和集成。
我有三个特征(变量)和五个样本,如下所示。我希望通过转换它们(计算第一主成分)将它们集成为一维(一个特征)输出。我希望使用转换后的数据进行进一步的统计分析,因为我相信它显示了三个输入特征的“主要”特征。
我首先使用scikit-learn在python中编写了一个测试代码,如下所示。这是一个简单的情况,其中3个特征的值都是相等的。换句话说,我对三个相同向量[0,1,2,1,0]应用了PCA。
代码:
import numpy as np
from sklearn.decomposition import PCA
pca = PCA(n_components=1)
samples = np.array([[0,0,0],[1,1,1],[2,2,2],[1,1,1],[0,0,0]])
pc1 = pca.fit_transform(samples)
print (pc1)

输出

[[-1.38564065]
[ 0.34641016]
[ 2.07846097]
[ 0.34641016]
[-1.38564065]]
  1. 在降维后,首先进行第一主成分分析是否是数据整合的适当方法?

1-2. 例如,如果特征如下[功率排名,速度排名],并且功率与速度有负相关性,当为二维特征时,我想知道哪些样本同时具有“高功率”和“高速度”。比较[功率1,速度1]和[功率2,速度2]是很容易决定的,但像[功率4,速度2]与[功率3,速度3]这样的情况就很难了。因此,我想对二维的'功率和速度'数据集应用PCA并提取第一主成分,然后使用'第一主成分'的排名。这种方法仍然适用吗?

  1. 在这种情况下,我认为输出结果也应该是 [0, 1, 2, 1, 0],与输入相同。但是输出却是 [-1.38564065, 0.34641016, 2.07846097, 0.34641016, -1.38564065]。代码存在问题还是输出结果正确?
2个回答

6
  1. 是的,它也被称为数据降维。
  2. 输出结果是根据训练数据进行中心化和归一化的。结果是正确的。

如果只有5个样本,我认为运行任何统计方法都不明智。如果您相信您的特征是相同的,只需检查维度之间的相关性接近于1,然后您可以忽略其他维度。


谢谢您的回答。实际上,那些(相同的)特征和(小的)样本只是一个例子,但我明白结果是正确的。如果您不介意,我想再问一个问题。我添加了一些细节(1-2)的额外问题。这也是您提到的“数据投影”的适当方式吗? - z991
无论是正相关还是负相关,如果存在强相关性,特征本质上是相同的,因为协方差矩阵会变得退化。观看这个短视频,它将帮助您掌握此概念。 - igrinis
感谢您的评论。您建议的视频非常令人印象深刻。 - z991

2

对于这个小数据集来说,不需要使用PCA。而对于PCA,你的数组应该进行缩放。

无论如何,你只有3个维度:你可以用眼睛看点并观察,你可以计算距离(使用某种最近邻算法)。


非常感谢您的评论。数据是排名数组,因此我认为缩放是可以的。我认为PCA是寻找表达具有最低距离(误差)的数据的线(2D数据的第一主成分)或平面(3D数据的第一和第二主成分)的最常见方法之一。您是指其他距离算法更有效吗? - z991
1
只有一个更正:对于2D数据,您将获得2条线(2个轴),对于3D,则为3个轴。然后,您可以查看哪个轴的方差较小并将其排除。我不确定效率如何,但我认为聚类和获取群集中心可能也是一个不错的方法。无法确定距离度量,因为这取决于您的数据。这只是关于PCA的问题:当您仅具有3个分量时,减少它们意味着失去相当大量的信息。 - avchauzov
非常感谢您的回答。很抱歉我的解释不够清晰,但我所说的线和平面是通过最小方差主成分分析降维后的轴。我同意减少1/3或1/2的特征将导致信息的大量丢失,但我不确定是否有更好的降维(或数据整合)选项来最小化信息损失。您对此工作有更好的建议吗? - z991
让我问你:你为什么需要执行PCA?你所说的“想要使用转换后的数据进行进一步的统计分析”是什么意思? - avchauzov
我想将特征空间降至一维以便于预测,虽然不一定需要使用PCA。在我的问题1-2的二维示例中,有两个特征称为“功率排名”和“速度排名”,但是直接判断“功率3和速度3”是否比“功率4和速度2”更好是困难的。因此,我尝试通过PCA(取第一个主成分)将二维数据转换为一维,并通过这个线性的第一个主成分来确定“总排名”。 - z991
啊,抱歉,我现在对这种情况没有好的想法。 - avchauzov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接