如果训练数据没有得到所有预期的类别,如何处理分类数据?

时间:2018-01-31 06:39:05

标签: python machine-learning categorical-data

我的数据有一个名为level的功能,数据可能有级别(-1,0,1,2,3),但我的数据现在只有2级0和-1。我使用python进行二进制分类。如何对所有级别进行单热编码?处理这个问题的正确方法是什么?我可以在测试数据中包含我可能期望的所有级别吗?或者我应该只使用2个级别?

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列将有1,其中值== -1,否则为0;第2列将有1,其中值== 0,否则为0)
  • 测试数据中的组(1,2,3)
  • 执行与第一个项目符号相同的编码,但对于组,您将在第一列中为0,在第二列中为0

因此,您通常会有2个级别(对于值== -1和值== 0)和第3级,其中一个热编码向量中的所有值都将等于零。