python中的多类分类
Posted
技术标签:
【中文标题】python中的多类分类【英文标题】:Mutli-class classification in python 【发布时间】:2018-08-03 03:18:23 【问题描述】:我正在将二进制分类问题转换为多标签分类程序。代码是用python写的。
以下是现有代码:
positive_labels = [[0, 1] for _ in positive_examples]
negative_labels = [[1, 0] for _ in negative_examples]
现在我想把它转换成一个多标签,比如 3 个类 - 0,1,2
positive_labels = [[1,0,0] for _ in positive_examples]
neutral_labels = [[0,1,0] for _ in neutral_examples]
negative_labels = [[0,0,1] for _ in negative_examples]
这是正确的吗?如果不能,请告诉我该怎么做?
请帮忙。
【问题讨论】:
你用positive_lebels做什么?目前它们只是列表列表(丢失了他们拥有的任何其他信息),您如何使用将决定您的解决方案是否正确。 【参考方案1】:您可以为此在 scikit-learn 中使用 MultiLabelBinarizer
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
# to fit transform you pass the rows of labels
mlb.fit_transform([(0,), (1,),(1,2)])
你会得到如下所示的输出
array([[1, 0, 0],
[0, 1, 0],
[0, 1, 1]])
fit_transform 方法实现了 TransformerMixin (http://scikit-learn.org/stable/modules/generated/sklearn.base.TransformerMixin.html)。它适合学习,然后转换它。一旦你调用了fit_transform,就不需要再次调用fit,你只需调用transform,如下所示
mlb.transform([(1,2),(0,1)])
array([[0, 1, 1],
[1, 1, 0]])
【讨论】:
感谢您的帮助。以上是关于python中的多类分类的主要内容,如果未能解决你的问题,请参考以下文章
为啥对于 Keras 中的多类分类, binary_crossentropy 比 categorical_crossentropy 更准确?