数值错误:形状不匹配:如果categories是一个数组,它必须具有形状(n_features,)。

12

我已经创建了一个简单的代码来实现OneHotEncoder

from sklearn.preprocessing import OneHotEncoder
X = [[0, 'a'], [0, 'b'], [1, 'a'], [2, 'b']]
onehotencoder = OneHotEncoder(categories=[0])
X = onehotencoder.fit_transform(X).toarray()
我只想使用名为fit_transform的方法来处理索引为0X,这意味着对于[0, 0, 1, 2]这样的X。但它会导致如下错误:

ValueError: Shape mismatch: if categories is an array, it has to be of shape (n_features,).

有人能解决这个问题吗?我被卡住了。

2个回答

21
您需要使用ColumnTransformer来指定列索引,而不是使用categories参数。
构造函数参数categories用于明确告知不同类别的值。例如,您可以显式地提供[0, 1, 2],但auto将确定它。此外,您可以使用slice()对象。
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer

X = [[0, 'a'], [0, 'b'], [1, 'a'], [2, 'b']]

ct = ColumnTransformer(
    [('one_hot_encoder', OneHotEncoder(categories='auto'), [0])],   # The column numbers to be transformed (here is [0] but can be [0, 1, 3])
    remainder='passthrough'                                         # Leave the rest of the columns untouched
)

X = ct.fit_transform(X)

1

pandas.get_dummies() 方法也可以用以下方式实现:

import numpy as np
import pandas as pd
X = np.array([[0, 'a'], [0, 'b'], [1, 'a'], [2, 'b']])
X = np.array(pd.concat([pd.get_dummies(X[:, 0]), pd.DataFrame(X[:, 1])], axis = 1))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接