假设我有一个整数向量,其中每个整数对应一个类别:
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
?
感谢您的帮助。 弗朗西斯
答案 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
的东西是什么意思,因为我不知道你的数据是什么样的。您可能想为此打开一个单独的问题。