假设我有一个整数向量,其中每个整数都对应一个类别:
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/