Python scikit 学习多类多标签性能指标?

Posted

技术标签:

【中文标题】Python scikit 学习多类多标签性能指标?【英文标题】:Python scikit learn multi-class multi-label performance metrics? 【发布时间】:2016-12-06 11:35:16 【问题描述】:

我为我的多类多标签输出变量运行了随机森林分类器。我得到了以下输出。

My y_test values


     Degree  Nature
762721       1       7                              
548912       0       6
727126       1      12
14880        1      12
189505       1      12
657486       1      12
461004       1       0
31548        0       6
296674       1       7
121330       0      17


predicted output :

[[  1.   7.]
 [  0.   6.]
 [  1.  12.]
 [  1.  12.]
 [  1.  12.]
 [  1.  12.]
 [  1.   0.]
 [  0.   6.]
 [  1.   7.]
 [  0.  17.]]

现在我想检查我的分类器的性能。我发现对于多类多标签“汉明损失或 jaccard_similarity_score”是很好的指标。我试图计算它,但我得到了值错误。

Error:
ValueError: multiclass-multioutput is not supported

我尝试了以下行:

print hamming_loss(y_test, RF_predicted)
print jaccard_similarity_score(y_test, RF_predicted)

谢谢,

【问题讨论】:

如果库不支持的话,自己实现应该不难。 【参考方案1】:

要计算多类/多标签不支持的汉明损失,您可以:

import numpy as np
y_true = np.array([[1, 1], [2, 3]])
y_pred = np.array([[0, 1], [1, 2]])
np.sum(np.not_equal(y_true, y_pred))/float(y_true.size)

0.75

您还可以像这样为两个标签中的每一个获取confusion_matrix

from sklearn.metrics import confusion_matrix, precision_score
np.random.seed(42)

y_true = np.vstack((np.random.randint(0, 2, 10), np.random.randint(2, 5, 10))).T

[[0 4]
 [1 4]
 [0 4]
 [0 4]
 [0 2]
 [1 4]
 [0 3]
 [0 2]
 [0 3]
 [1 3]]

y_pred = np.vstack((np.random.randint(0, 2, 10), np.random.randint(2, 5, 10))).T

[[1 2]
 [1 2]
 [1 4]
 [1 4]
 [0 4]
 [0 3]
 [1 4]
 [1 3]
 [1 3]
 [0 4]]

confusion_matrix(y_true[:, 0], y_pred[:, 0])

[[1 6]
 [2 1]]

confusion_matrix(y_true[:, 1], y_pred[:, 1])

[[0 1 1]
 [0 1 2]
 [2 1 2]]

您也可以像这样计算precision_score(或以类似方式计算recall_score):

precision_score(y_true[:, 0], y_pred[:, 0])

0.142857142857

【讨论】:

谢谢。是否可以获得此类输出的混淆矩阵。 此语法不适用于多类多输出。我收到一个错误 ValueError: multiclass-multioutput is not supported 我已经更新了答案,以展示如何获得两个标签中的每一个的混淆矩阵。 sklear.metrics 目前都不支持开箱即用的多输出多类分类。 谢谢,很有用 如果这不能回答您的问题并且您需要更多信息,请告诉我。

以上是关于Python scikit 学习多类多标签性能指标?的主要内容,如果未能解决你的问题,请参考以下文章

错误:分类指标无法处理多类多输出和多标签指标目标的混合

Python Sklearn“ValueError:分类指标无法处理多类多输出和二进制目标的混合”错误

为多类多标签分类构建混淆矩阵

如何使用 lstm 执行多类多输出分类

多类多标签混淆矩阵,其中预测和标签是多热向量

具有分类和连续属性的多类多输出分类,无需在 python 中编码 [关闭]