在Sklearn中,基于实例的fscore比精确性和召回率小

2024-06-01 00:56:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在进行多标签分类,评估由precision_recall_fscore_support和{}完成:

predict = array(([1,1,0,0], [1,0,0,1], [1,1,1,1]))
expect = array(([1,1,1,1], [1,1,1,0], [1,0,0,0]))
smp_report = precision_recall_fscore_support(expect, predict, average = 'samples')
f_report = f1_score(expect, predict, average = 'samples')

在这个例子中有三个实例,二进制值代表相应的四个类的存在。在

然后smp_report和{}分别给我(0.58333333333333337, 0.61111111111111105, 0.48888888888888893, None)和{}。在

f分数不等于2*smp_report[0]*smp_report[1]/(smp_report[0]+smp_report[1])的结果,这是准确度和召回率的调和平均值。在

谁能告诉我Sklearn是如何实现这一点的?我使用的版本是0.15.0。在


Tags: reportsupport分类标签arraypredictprecisionsmp
1条回答
网友
1楼 · 发布于 2024-06-01 00:56:05

Scikit learn首先计算列表集合([1,1,0,0],[1,0,0,1],[1,1,1,1])中每个项目的精确度、召回率和谐波F度量。然后计算这些精度值的平均值、召回值的平均值和f度量值的平均值,并返回这些平均值。这些是您在上面报告的P、R和F值。在

计算列表中单个项目的精度、召回率和f度量值很有帮助。要计算列表中第三项的P、R和F值,可以运行:

import numpy as np
from sklearn import metrics

predict = np.array([[1,1,1,1]])
expect = np.array([[1,0,0,0]])
smp_report = metrics.precision_recall_fscore_support(expect, predict, beta=1, average = 'samples')
f_report = metrics.f1_score(expect, predict, average = 'samples')

print f_report, smp_report

运行此代码将给您0.4 (0.25, 1.0, 0.40000000000000002)。括号内的值表示分类的精度、召回率和f度量(按顺序)。如您所见,f测量值是精确度和召回率之间的谐波平均值:

^{pr2}$

通过将前两个列表交换到上面的代码中,您可以计算数据集中三个项目的精度、召回率和谐波f度量:

第一项值: 0.666666666667 (1.0, 0.5, 0.66666666666666663)

第二项值 0.4 (0.5, 0.33333333333333331, 0.40000000000000002)

第三项值 0.4 (0.25, 1.0, 0.40000000000000002)

然后,SK计算这些精度值之间的平均精度(即1+.5+.25/3=.5833333333333333)、这些召回值中的平均召回率(.5+.333+1/3=0.61111111111111105),以及这些f度量值之间的平均f度量值(.666+.4+.4/3=0.48888888888888893),并返回这些平均值。这些是您在上面报告的值。SK计算每个分类事件的调和平均值,它只是返回这些调和平均值的平均值。在

相关问题 更多 >