sklearn PCA 如何在数据帧上工作?

Posted

技术标签:

【中文标题】sklearn PCA 如何在数据帧上工作?【英文标题】:Hows does sklearn PCA works on dataframes? 【发布时间】:2017-09-21 13:57:13 【问题描述】:

我有以下数据框:

      A       B      C      D
0     4       1      1     78
1    82       2     58     41
2    53       3     31     76
3     1      45      4     12
5     5       2      4     87
6     1      74      6     11
7     1       1      6     47
8     1       1      6      8

我要申请的:

 sklearn.decomposition.PCA

为了将列数从 4 减少到 2 而且我无法理解 PCA 将哪个维度:rowscolumns 用作向量的数量。

因为如果我执行以下操作:

    df=
          A       B      C      D
    0     4       1      1     78

pca=PCA(n_components=3)
pca.fit(df.T)

它会返回以下错误:

ValueError: n_components=3 必须介于 0 和 n_features=1 之间 svd_solver='满'

即使每个向量中只有 1 个数据,我仍然应该能够将向量的数量从 4 个减少到 3 个。

【问题讨论】:

所以如果我理解正确,您想使用 PCA 将 ABCD 减少到 AB 是的。或者在第二个例子中ABCDABC PCA 将数据转换为新维度。说 PCA 将 ABCD 减少到 ABC 在技术上是不正确的。它将ABCD 减少为一些新的XYZ 【参考方案1】:

这就是使用PCA 的方式,注意我也在标准化这些值。

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

vals = df.ix[:, :4].values

vals_std = StandardScaler().fit_transform(vals)

sklearn_pca = PCA(n_components = 'however many you want')

vals_pca = sklearn_pca.fit_transform(vals_std)

然后根据您确定的多少维度,您可以将其添加回您的数据框。

【讨论】:

如果 df 只有 1 行数据,这是我的情况。 它对我有用,使用您提供的示例数据框 但如果你这样做,你最终会得到 1 台 PC,而我想要 3 台 PC,我有 4 列。 Arty,PCA 不适用于只有一行的数据集。 PCA 的想法是减少数据集中的特征数量,因此它基于计算数据集的“方差”并找到最能捕捉数据所有方差的正交。因此,仅计算 1 次观察的方差在技术上是不可能的。 正要说这个^^ @Arty

以上是关于sklearn PCA 如何在数据帧上工作?的主要内容,如果未能解决你的问题,请参考以下文章

Sklearn:如何在庞大的数据集上应用降维?

具有 200 个特征的 DataFrame 上的 PCA 结果异常高

sklearn - PCA 的标签点

sklearn的PCA

sklearn PCA 不工作

sklearn.decomposition.PCA 的简单特征向量图