Python scikit learn多类别多标签性能指标?

7
我为多类别、多标签输出变量运行了随机森林分类器,得到以下输出结果。
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.]]

现在我想检查分类器的性能。我发现对于多类多标签,"汉明损失或杰卡德相似度得分"是一个好指标。我尝试计算它,但出现了值错误。

Error:
ValueError: multiclass-multioutput is not supported

我尝试了以下这行代码:

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

Thanks,


如果库中不支持此功能,自己实现应该不难。 - Zafi
1个回答

7
为了计算多类/多标签的不支持汉明损失,您可以执行以下操作:
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

你还可以这样获取每个标签的混淆矩阵:
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

2
这种语法不适用于多类别-多输出。我得到了一个错误 ValueError:不支持多类别-多输出。 - niranjan
谢谢,这很有用。 - niranjan
如果这个回答没有解决你的问题,需要更多信息,请告诉我。 - Stefan
我已经添加了一个示例,演示如何计算第一个标签的“recall_score”。 - Stefan
如果您的问题得到解决,请随意接受我的答案。 - Stefan
显示剩余4条评论

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