【问题标题】:Value error: setting an array element with a sequence data preprocessing值错误:使用序列数据预处理设置数组元素
【发布时间】:2021-05-24 01:39:32
【问题描述】:
dataset = pd.read_csv('train_data.csv')
X = dataset.iloc[:, 1:-1].values
y = dataset.iloc[:, -1].values
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(),[0,1,2,3,4,5,6,7,8,9,10,11,12])],remainder='passthrough')
X = np.array(ct.fit_transform(X))
from sklearn.ensemble import RandomForestRegressor
regressor = RandomForestRegressor(n_estimators = 10, random_state = 0)
regressor.fit(X, y)                 #Error is thrown here

TypeError Traceback(最近一次调用最后一次) TypeError: float() 参数必须是字符串或数字,而不是 'csr_matrix'

上述异常是以下异常的直接原因: ValueError Traceback(最近一次调用最后一次) ValueError: 使用序列设置数组元素。

【问题讨论】:

  • 欢迎来到 StackOverflow!以防万一可能很快没有答案弹出,代码似乎缺少导入语句,所以它似乎不是一个自包含的 sn-p。如果您让其他人更容易直接运行它并在本地查看错误,则在可能的情况下,您会增加获得好答案的机会。

标签: python matrix regression data-processing csr


【解决方案1】:

您的错误来自此 np.array(ct.fit_transform(X)) 。从一个热点你得到一个稀疏矩阵(类型 csr),你不需要再把它放在一个 numpy 数组中。您可以使用以下方法将其转换为密集:

ct.fit_transform(X).todense()

但这在内存上确实很昂贵并且没有必要,因为回归器可以采用稀疏矩阵。你可以简单的传入,下面我用一个示例数据集来说明:

dataset = pd.DataFrame(np.random.choice(['A','B','C'],(50,13)),
columns=["v"+ str(i) for i in range(13)])
dataset['v14'] = np.random.uniform(0,1,50)
dataset['y'] = np.random.normal(0,1,50)

X = dataset.iloc[:, 1:-1].values
y = dataset.iloc[:, -1].values
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(),
[0,1,2,3,4,5,6,7,8,9,10,11,12])],remainder='passthrough')

我们现在转换X,保持稀疏:

X = ct.fit_transform(X)
type(X)
scipy.sparse.csr.csr_matrix

然后回归:

from sklearn.ensemble import RandomForestRegressor
regressor = RandomForestRegressor(n_estimators = 10, random_state = 0)
regressor.fit(X, y)

以上不会报错

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2018-11-10
    • 2016-10-30
    • 2016-01-01
    • 2015-08-10
    相关资源
    最近更新 更多