假设我有一个整数向量,每个整数对应一个类别:
A = [1, 2, 2, 3, 3, 1, 2, 4, 4, 1]
我知道有多少个类别。这个向量是我X数据集中的一列,最终将用于逻辑回归模型中。
是否可以使用scikit-learn的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
的输入需要是二维的,而不是一维的(它期望是一组样本)。
>>> X = [[1, 2, 2, 3, 3, 1, 2, 4, 4, 1]]
假设你的分类特征都可以取四个值:
>>> n_values = np.repeat(4, len(X[0]))>>> n_valuesarray([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
是什么意思,因为我不知道你的数据是什么样的。你可能需要为此打开一个单独的问题。