引:为什么需要调和平均数?
我们先从一个现实生活中的问题出发:在我上初中的时候,初一结束,需要重新分班,现在一共有6个班,假设只有12名学生,12名学生的成绩按从高到低排序,按照Z字型进行分配,1班:1、12(表示分到的是第一名和第十二名,其他的类似) 2班:2、11 3班:3、10 4班:4、9 5班:5、8 6班:6、7,请问有没有什么评价准则得出哪个班的学生最优质?(此处为两个同学的名次之和是一个常数的情况)
显而易见的是,加法或者乘法都无法得到一个正确的结果。某天晚上,我突然做梦梦见了一个简单的算法,算式如下:
。从式子来看,如果a和b的乘积比较大的话,结果就是比较大。所以本质上的确是期望的结果。
使用Python来使用这个式子进行计算,具体结果如下所示:
def score(*args):
l = args
sum = 0
for i in l:
sum += 1/i
return 2/sum
所以通过该算法得出6班的学生相对来说最优质。
后来我查阅了一下资料,我的式子和调和平均数的式子比较像,少了一个系数n,具体公式如下所示:
当然,如果N个同学的名次之和不是常数的话,使用上述的公式就会出现错误。
调和平均数,归根结底它就是一种平均数,也就是说求的是参数的均衡,而不是偏重某个参数的结果。
F1 score的表示方式
我们发现F1 score本质上就是调和平均数。大家看一下,调和平均数还有个很巧妙的性质,就是它属于[0, 1]的区间。如果不乘以2的话,它的值域就会是[0, 1/2]。
对于F1 score没有使用算术平均数,而使用了调和平均数,这个还需要继续学习。如果有准确的答案,我会及时更新的。
先写一点自己的思考吧,
a = 0.2
b = 0.3
2/(1/a + 1/b) = 0.24
(a + b) / 2 = 0.25
a = 1
b = 0.2
2/(1/a + 1/b) = 0.33333
(a + b) / 2 = 0.6
就是当a和b很接近的时候,调和平均数和算术平均数很接近,但是两者偏离的话,就远小于算术平均数了。
F1 score本质上是对precision和recall更加严格的均衡。如果用平均数来计算,可能就会因为大的值把小的值给平均了。就跟统计收入,往往用中位数会比平均值很精确。
注:谢谢群友提醒,修改了一下错误。