【问题标题】:Building PCA components on arrays在阵列上构建 PCA 组件
【发布时间】:2020-06-02 19:15:36
【问题描述】:

我正在尝试在跨多列的数组行上构建主成分-

import pandas as pd
import numpy as np
from sklearn import preprocessing
from sklearn.decomposition import PCA

df = pd.DataFrame(np.random.randn(5, 10), columns=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'])
df['arr1'] = df[['a', 'b', 'c', 'd', 'e']].values.tolist()
df['arr2'] = df[['f', 'g', 'h', 'i', 'j']].values.tolist()

df['arr1'] = [preprocessing.scale(row) for row in df['arr1']]
df['arr2'] = [preprocessing.scale(row) for row in df['arr2']]
df

X = df.loc[:, 'arr1':'arr2']
pca = PCA(.95)
pca.fit(X)
pca.transform(X)

这给出了错误-

ValueError: setting an array element with a sequence.

我尝试通过np.array(list(df.arr1)) 转换 arr1 和 arr2 但这只是保留了每个数组的第一个值。

在我的真实数据集中,每个数组有 200-300 个元素。

【问题讨论】:

  • 我猜错误出现在df[['a', 'b', 'c', 'd', 'e']].values.tolist() 行上,这是一个序列,因此您无法为其设置数据框列。多描述一下你的数据。这些列是什么?您想通过df[['a', 'b', 'c', 'd', 'e']].values.tolist() 实现什么目标?
  • 尝试使用df[['a', 'b', 'c', 'd', 'e']].values 而不是df[['a', 'b', 'c', 'd', 'e']].values.tolist()。你会得到一个二维数组而不是一个列表。
  • @manu190466 给出错误-ValueError: 传递的项目数错误 5,位置意味着 1

标签: python pandas numpy pca


【解决方案1】:

fittransform 需要一个二维数组输入,你传递的不是一个。 这有效:

arr = [X.loc[0]['arr1'].tolist(), X.loc[0]['arr2'].tolist()]
pca.fit(arr)
pca.transform(arr)

【讨论】:

  • 感谢您的回答,但是如何在数组中跨多个列构建组件?在我的真实数据集中,每个数组有 200-300 个元素,15 个这样的列和约 1000 行。我可以使用 pca.transform(np.array(list(df.arr1))) 在每个单独的列上构建 pc。但我想一次将所有列收集到 1 个变量 (X) 中并为每一列执行 pca。
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 2020-12-22
  • 2012-05-29
  • 1970-01-01
  • 2011-09-28
相关资源
最近更新 更多