2

假设我有一个整数向量,其中每个整数对应一个类别:

A = [1, 2, 2, 3, 3, 1, 2, 4, 4, 1]

我知道我有多少类别。这个向量是我的 X 数据集的列之一,它将以逻辑回归模型结束。

是否可以使用 sciki-tlearn 函数onehotencoder来获得类似的东西:

0 0 0 1(当 1)
0 0 1 0(当 2)
0 1 0 0(当 3)
1 0 0 0(当任何时候)

甚至更好

0 0 0
0 0 1
0 1 0
1 0 0

?

当我尝试将这样的向量传递给 onehotencoder 时,我收到此错误:need more than 1 value to unpack.

此外:我想如果我有“NULL”记录,我应该首先将它们转换为一个数字:有没有一种快速的方法来做到这一点,比如A(find(A=='NULL'))=123

谢谢您的帮助。弗朗切斯科

4

1 回答 1

3

OneHotEncoder输入需要是二维的,而不是一维的(它需要一组样本)。

>>> X = [[1, 2, 2, 3, 3, 1, 2, 4, 4, 1]]

假设您的分类特征都可以采用四个值:

>>> n_values = np.repeat(4, len(X[0]))
>>> n_values
array([4, 4, 4, 4, 4, 4, 4, 4, 4, 4])

然后OneHotEncoder工作正常:

>>> oh = OneHotEncoder(n_values=n_values)
>>> Xt = oh.fit_transform(X)
>>> Xt.toarray()
array([[ 0.,  1.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  1.,  0.,  0.,
         0.,  0.,  1.,  0.,  0.,  0.,  1.,  0.,  1.,  0.,  0.,  0.,  0.,
         1.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  1.,  1.,  0.,
         0.]])
>>> Xt.shape
(1, 40)

它为每个输入变量产生了一个太多的虚拟变量,这有点浪费。我不知道你所说的这些NULL东西是什么意思,因为我不知道你的数据是什么样的。您可能想为此打开一个单独的问题。

于 2014-02-08T12:13:03.403 回答