Scikit Learn多标签分类,从MultiLabelBinarizer获取标签

5
在多标签分类问题中,我使用MultiLabelBinarizer将我的20个文本标签转换为由0和1组成的二进制列表。
预测后,我得到了一个由20个二进制值组成的列表,并且我想输出相应的文本标签。
我只是想知道MultiLabelBinarizer()是否提供了回转转换,还是我需要手动执行。

顺便提一下,MultiLabelBinarizer().classes_ 会储存转换列表中标签的顺序。因此只需要一个 for 循环来打印与我的预测相对应的 MultiLabelBinarizer().classes_ 中的索引,虽然有些麻烦。 - sono
1个回答

6
是的,MultiLabelBinarizer提供了一个名为inverse_transform()的方法,可以将二值化的标签转换回在fit()期间提供给它的原始名称。 http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MultiLabelBinarizer.html#sklearn.preprocessing.MultiLabelBinarizer.inverse_transform

inverse_transform(yt)

Transform the given indicator matrix into label sets
Parameters:   

yt : array or sparse matrix of shape (n_samples, n_classes)

    A matrix containing only 1s ands 0s.

Returns:  

y : list of tuples

    The set of labels for each sample such that y[i] consists of classes_[j] for each yt[i, j] == 1.

1
太好了,它可以工作。总结一下:1)mlb = MultiLabelBinarizer() 2)y = mlb.fit_transform(labels) 3)print mlb.inverse_transform(clf.predict(test[0])) - sono
是的,那是正确的。 - Vivek Kumar
1
当我们使用predict_proba()而不是predict()时,如何进行inverse_transform()操作? - loving_guy
1
@loving_guy inverse_transform() 只能用于原始值(目标值)。如果您使用了 predict_proba,那么您首先需要决定阈值,以便为该样本分配特定的目标类。一旦对所有值完成此操作,然后使用 inverse_transform() - Vivek Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接