Scikit学习用于降维的主成分分析(PCA)



我想执行主成分分析以进行降维和数据集成。

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

我首先用python编写了一个测试代码,使用scikit学习如下。这是一个简单的情况,即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. 降维后进行第一次PCA是否是数据集成的正确方法

1-2.例如,如果特征类似于[功率等级,速度等级],并且功率与速度大致呈负相关,则在2个特征的情况下。我想知道既有"高功率"又有"高速"的样品。很容易确定[功率1,速度1]比[功率2,速度2]好,但对于[功率4,速度2]与[功率3,速度3]这样的情况来说很困难。因此,我想将主成分分析应用于二维"功率和速度"数据集,并取第一个PC,然后使用"第一个PC"的秩。这种方法还合适吗?

  1. 在这种情况下,我认为输出也应该是[0,1,2,1,0],这与输入相同。但输出为[1-38564065、0.34641016、2.07846097、0.3464016、-138564065]。代码有问题吗,还是正确的答案
  1. 是。它也被称为数据投影(到较低维度)
  2. 根据列车数据对结果输出进行集中和归一化。结果是正确的

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

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

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

最新更新