我正在进行多标签分类,评估由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。在
Scikit learn首先计算列表集合([1,1,0,0],[1,0,0,1],[1,1,1,1])中每个项目的精确度、召回率和谐波F度量。然后计算这些精度值的平均值、召回值的平均值和f度量值的平均值,并返回这些平均值。这些是您在上面报告的P、R和F值。在
计算列表中单个项目的精度、召回率和f度量值很有帮助。要计算列表中第三项的P、R和F值,可以运行:
运行此代码将给您
^{pr2}$0.4 (0.25, 1.0, 0.40000000000000002)
。括号内的值表示分类的精度、召回率和f度量(按顺序)。如您所见,f测量值是精确度和召回率之间的谐波平均值:通过将前两个列表交换到上面的代码中,您可以计算数据集中三个项目的精度、召回率和谐波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计算每个分类事件的调和平均值,它只是返回这些调和平均值的平均值。在相关问题 更多 >
编程相关推荐