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

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

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

最佳答案

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

关于python - 使用scikit onehotencoder在向量上的虚拟变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21634198/

10-12 23:17