【问题标题】:Hows does sklearn PCA works on dataframes?sklearn PCA 如何在数据帧上工作?
【发布时间】: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

标签: python pandas dataframe scikit-learn pca


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2015-09-27
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2018-09-11
  • 2020-12-22
  • 2022-06-11
相关资源
最近更新 更多