在传染媒介的假的变量与scikit onehotencoder

时间:2014-02-07 17:32:41

标签: python machine-learning scikit-learn categorization

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

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

感谢您的帮助。 弗朗西斯

1 个答案:

答案 0 :(得分:3)

OneHotEncoder输入需要是2-d,而不是1-d(它需要一组样本)。

>>> 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的东西是什么意思,因为我不知道你的数据是什么样的。您可能想为此打开一个单独的问题。