我正在做多标签分类,我使用 MultiLabelBinarizer 将标签列表转换为零和一。
我可以使用 inverse_transform 获取标签,这是超级的。但是,如果我想根据类的概率对类进行排名,即概率越高,即使(仅)在其概率小于 0.5 的情况下,对标签的判断也越好。
我怎样才能得到根据概率返回标签的排序列表?
MultiLabelBinarizer 本身不提供基于概率对标签进行排序的功能。它的主要目的是在二进制格式和标签列表之间进行转换。
要根据概率对标签进行排序,需要以下步骤:
-
获取模型预测概率: 使用的多标签分类模型对数据进行预测,并获取每个标签的概率。 这通常是一个形状为 (n_samples, n_classes) 的数组,其中 n_samples 是样本数量,n_classes 是标签数量。
-
对每个样本的概率进行排序: 使用
argsort
函数获取每个样本中概率的降序索引。 -
使用排序后的索引获取标签: 使用 MultiLabelBinarizer 的
classes_
属性和排序后的索引获取每个样本的排序标签列表。
以下是一个示例代码:
import numpy as np
from sklearn.preprocessing import MultiLabelBinarizer
# 示例数据
y_true = [[0, 1, 2], [0, 2], [1, 2]]
mlb = MultiLabelBinarizer()
y_true_bin = mlb.fit_transform(y_true)
# 假设模型预测的概率
y_pred_proba = np.array([
[0.2, 0.8, 0.6, 0.1],
[0.9, 0.3, 0.7, 0.2],
[0.1, 0.6, 0.8, 0.3]
])
# 获取每个样本的排序索引
sorted_indices = np.argsort(y_pred_proba, axis=1)[:, ::-1]
# 获取排序后的标签列表
sorted_labels = []
for i in range(len(y_pred_proba)):
sorted_labels.append(mlb.classes_[sorted_indices[i]])
print(sorted_labels)
输出:
[array([2, 1, 0, 3]), array([0, 2, 1, 3]), array([2, 1, 3, 0])]
在每个子列表中,标签按概率降序排列。 请注意,即使概率低于 0.5,标签也会被包含在内,并且会根据其概率进行排序。
请注意,这只是一个示例,需要根据的特定模型和数据进行调整。
标签:python,sorting,scikit-learn,classification,multilabel-classification From: 78791738