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

Scikit-learn principal component analysis (PCA) for dimension reduction

我想做主成分分析降维数据整合

我有 3 个特征(变量)和 5 个样本,如下所示。我想通过转换它们(计算第一台 PC)将它们集成到一维(1 个特征)输出中。我想使用转换后的数据进行进一步的统计分析,因为我相信它显示了 3 个输入特征的 'main' 特征。

我首先用 python 使用 scikit-learn 编写了一个测试代码,如下所示。这是简单的情况,即 3 个特征的值都相等。换句话说,我将 PCA 应用于三个相同的向量,[0, 1, 2, 1, 0].

代码

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. 降维后采用第一次 PCA 是否是数据集成的正确方法?

1-2。例如,如果特征类似于 [power rank, speed rank],并且当它是 2-feature 情况时,power 与 speed 大致呈负相关。我想知道同时具有 'high power' 和 'high speed' 的示例。很容易判断 [power 1, speed 1] 优于 [power 2, speed 2],但很难判断 [power 4, speed 2] vs [power 3, speed 3]。 所以我想将 PCA 应用于二维 'power and speed' 数据集,并取第一台 PC,然后使用“第一台 PC”的等级。这种做法还合适吗?

  1. 在这种情况下,我认为输出也应该是 [0, 1, 2, 1, 0] 与输入相同。但是输出是 [-1.38564065, 0.34641016, 2.07846097, 0.34641016, -1.38564065]。代码有问题,还是正确答案?
  1. 是的。也叫数据投影(向低维度)
  2. 结果输出居中,normalized根据训练数据。结果正确。

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

这个小数据集不需要使用PCA。对于 PCA,你的数组应该被缩放。

无论如何,你只有 3 个维度:你可以绘制点并用眼睛看,你可以计算距离(在最近邻算法上做一些事情)。