【问题标题】:LabelBinarizer encodes majority class as 1 instead of 0LabelBinarizer 将多数类编码为 1 而不是 0
【发布时间】: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


【解决方案1】:

我认为您正在寻找的可以通过使用label_binarize来完成:

from sklearn.preprocessing import label_binarize
Y_train = ['normal', 'normal', 'normal', 'normal', 'malware']
# note the order of "classes" defines which gets 1 and which gets 0
Y_train = label_binarize(Y_train, classes = ['normal', 'malware']).flatten()

【讨论】:

    猜你喜欢
    • 2021-04-15
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2013-02-09
    • 2017-01-03
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多