我的数据有一个名为level的功能,数据可能有级别(-1,0,1,2,3),但我的数据现在只有2级0和-1。我使用python进行二进制分类。如何对所有级别进行单热编码?处理这个问题的正确方法是什么?我可以在测试数据中包含我可能期望的所有级别吗?或者我应该只使用2个级别?
答案 0 :(得分:0)
如果 X = [ - 1,0,1,2,3] ,对于onehot
,您可以尝试:
from sklearn.preprocessing import OneHotEncoder
one_hot_enc=OneHotEncoder()
X_onehot=one_hot_enc.fit_transform(X.reshape(-1,1)) #reshape to convert 1-d array to 2-d array
print(X_onehot.toarray())
由于您的班级中有 -1 等负值,因此尝试one_hot
会抛出
ValueError: X needs to contain only non-negative integers.
为此你可以先尝试标签编码:
from sklearn.preprocessing import LabelEncoder
enc=LabelEncoder()
x_new=enc.fit_transform(X)
print(x_new.classes_)
将 x_new 代替 X 至OneHotEncoder
答案 1 :(得分:0)
让我在这个块中重写它。
列车数据的级别:
(-1, 0)
测试数据中的级别:
(-1, 0, 1, 2, 3)
我认为最好的方法是:
因此,您通常会有2个级别(对于值== -1和值== 0)和第3级,其中一个热编码向量中的所有值都将等于零。