MultiLabelBinarizer:inverse_transform 如何获得根据概率排序的标签列表?

问题描述 投票:0回答:1

我正在做多标签分类,我使用 MultiLabelBinarizer 将标签列表转换为零和一。

我可以使用 inverse_transform 获取标签,这是超级的。然而,如果我想根据类的概率对类进行排名,即概率越高,即使(仅)其概率小于 0.5,对标签的判断也越好。

如何根据概率取回标签的排序列表?

python sorting scikit-learn classification multilabel-classification
1个回答
0
投票

我认为

MultiLabelBinarizer
首先不会记录该信息,因为它只检查标签是否存在。

你需要自己计算概率,这是一种方法:

import itertools
from sklearn.preprocessing import MultiLabelBinarizer

a = [["sci-fi", "fantasy", "action"], ["sci-fi", "romance", "action"], ["action"]]
mlb = MultiLabelBinarizer()
labels = mlb.fit_transform(a)

flat = list(itertools.chain(*a))

probabilities = [(c, flat.count(c) / len(mlb.classes_)) for c in mlb.classes_}
>>> probabilities
[('action', 0.75), ('fantasy', 0.25), ('romance', 0.25), ('sci-fi', 0.5)]

还有一种按概率对它们进行排序的方法:

from operator import itemgetter
>>> sorted(probabilities, key=itemgetter(1))
[('fantasy', 0.25), ('romance', 0.25), ('sci-fi', 0.5), ('action', 0.75)]

当然,您可能正在使用

numpy
pandas
或类似的东西,在这种情况下,可以以不同的方式进行展平和排序。

© www.soinside.com 2019 - 2024. All rights reserved.