【发布时间】:2018-01-31 16:28:06
【问题描述】:
我的数据有一个称为级别的功能,数据可能有级别(-1,0,1,2,3),但我的数据现在只有 2 个级别 0 和 -1。我正在使用 python 进行二进制分类。如何对所有级别进行 one-hot-encoding?处理这个问题的正确方法是什么?我可以在测试数据中包含我可能期望的所有级别吗?还是应该只使用 2 个级别?
【问题讨论】:
标签: python machine-learning categorical-data
我的数据有一个称为级别的功能,数据可能有级别(-1,0,1,2,3),但我的数据现在只有 2 个级别 0 和 -1。我正在使用 python 进行二进制分类。如何对所有级别进行 one-hot-encoding?处理这个问题的正确方法是什么?我可以在测试数据中包含我可能期望的所有级别吗?还是应该只使用 2 个级别?
【问题讨论】:
标签: python machine-learning categorical-data
让我在这个块中重写它。
训练数据中的级别:
(-1, 0)
测试数据中的水平:
(-1, 0, 1, 2, 3)
我认为最好的方法是:
因此,您通常会有 2 个级别(对于 value == -1 和 value == 0)和第 3 个级别,其中 one-hot-encoded 向量中的所有值都将等于 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
【讨论】: