【问题标题】:Put results of PCA into DataFrame将 PCA 的结果放入 DataFrame
【发布时间】:2019-04-08 22:04:33
【问题描述】:

我已经执行了 PCA。

我想将这些结果放入数据框中。更具体地说,我想创建一个包含两行两列的数据框(在 wc_accounts 上进行 PCA 后的主要组件)

我试过了:

pca = PCA(n_components=2)
principalComponents = pca.fit(wc_accounts)
data = pca.components_
print(data)
principalDf = pd.DataFrame(data , columns = ['principal component 1', 'principal component 2'])

但是,最后一行给出了错误:ValueError: Shape of passed values is (828, 2), indices imply (2, 2)

因为它太大了,我无法完整打印数据。本质上它是一个由两个浮点数组(长度为 828)组成的数组:

[[-1.57759323e-02 -1.57759323e-02 -0.00000000e+00 ... -1.57759323e-02
  -3.15518646e-02  1.57759323e-02]
 [-9.99844616e-01  2.06534552e-04  0.00000000e+00 ...  2.06534552e-04
   4.13069105e-04 -2.06534552e-04]]

【问题讨论】:

  • 请显示数据变量的样本。
  • 不,这可行,假设 data 具有此处指示的形状
  • 是不是假设每一对数据都是PCA1和PCA2?如果您想以这种方式阅读列表,则每个列表都应包含 2 个元素。
  • 我想创建一个两行两列的数据框(在 wc_accounts 上进行 PCA 后的主要组件)

标签: python pandas dataframe pca


【解决方案1】:

在您的情况下,您想使用转换数据而不是“pca.components_”,其中包含定义主成分的单位向量。 有关您希望实现的目标的示例,请参见此处。

from sklearn.decomposition import PCA
df = pd.DataFrame(data=np.random.normal(0, 1, (50, 8)))
df.head()

pca     = PCA(n_components=4).fit(df)
columns = ['pca_comp_%i' % i for i in range(4)]
df_pca  = pd.DataFrame(pca.transform(df), columns=columns, index=df.index)
df_pca.head()

【讨论】:

    【解决方案2】:

    看起来data 的方向相对于pd.DataFrame 的预期方向发生了转置。

    所以,你可以改用index,然后转置:

    principalDf = pd.DataFrame(data, index=['principal component 1', 'principal component 2']).T
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多