我正在做多标签分类,我使用 MultiLabelBinarizer 将标签列表转换为零和一。
我可以使用 inverse_transform 获取标签,这是超级的。然而,如果我想根据类的概率对类进行排名,即概率越高,即使(仅)其概率小于 0.5,对标签的判断也越好。
如何根据概率取回标签的排序列表?
我认为
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
或类似的东西,在这种情况下,可以以不同的方式进行展平和排序。