【发布时间】:2020-04-01 00:07:02
【问题描述】:
我的训练数据包含负样本的多数类和正样本的少数类。我使用 LabelBinarizer() 将文本标签转换为二进制,并希望将正样本编码为 1,将负样本编码为 0。我读到默认情况下,多数类应编码为 0,但我观察到相反的情况。
Y_train = ['normal', 'normal', 'normal', 'normal', 'malware']
lb = LabelBinarizer()
Y_train= np.array([number[0] for number in lb.fit_transform(Y_train)])
print Y_train.tolist()
我得到的结果是:
[1, 1, 1, 1, 0]
我预计:
[0, 0, 0, 0, 1]
有人能指出错误吗?谢谢
更新:
根据https://github.com/scikit-learn/scikit-learn/issues/6723,
正标签被赋予具有较大值的类(即 以后按字典顺序排列)。
这解释了我的情况下的编码。但是,我仍然希望将“恶意软件”编码为 1,将“正常”编码为 0。我想我必须手动进行吗?
【问题讨论】:
-
你在哪里读到
majority class should get encoded to 0?似乎哪个类在标签列表中排在第一位得到0。你可以试试看。 -
这里:github.com/scikit-learn/scikit-learn/issues/6723 这对我来说也很有意义,因为通常大多数样本在许多应用程序中都是阴性的
-
是的。没有提到什么被认为是消极的,什么是积极的。应该定义。
-
我得到了
[0, 0, 0, 0, 1]的奇怪运行确切代码。 sklearn 的版本是多少?
标签: python scikit-learn classification