调和平均数在F1上的应用

引:为什么需要调和平均数?

我们先从一个现实生活中的问题出发:在我上初中的时候,初一结束,需要重新分班,现在一共有6个班,假设只有12名学生,12名学生的成绩按从高到低排序,按照Z字型进行分配,1班:1、12(表示分到的是第一名和第十二名,其他的类似) 2班:2、11 3班:3、10 4班:4、9 5班:5、8 6班:6、7,请问有没有什么评价准则得出哪个班的学生最优质?(此处为两个同学的名次之和是一个常数的情况)

显而易见的是,加法或者乘法都无法得到一个正确的结果。某天晚上,我突然做梦梦见了一个简单的算法,算式如下:
{\cfrac{1}{\cfrac{1}{a} + \cfrac{1}{b}}} = {\cfrac{a * b}{a + b}} 。从式子来看,如果a和b的乘积比较大的话,结果就是比较大。所以本质上的确是期望的结果。

使用Python来使用这个式子进行计算,具体结果如下所示:

def score(*args):
    l = args
    sum = 0
    for i in l:
        sum += 1/i
    return 2/sum
image.png

所以通过该算法得出6班的学生相对来说最优质。
后来我查阅了一下资料,我的式子和调和平均数的式子比较像,少了一个系数n,具体公式如下所示:
H_n = {\cfrac{n}{\cfrac{1}{\Sigma x_i}}}

当然,如果N个同学的名次之和不是常数的话,使用上述的公式就会出现错误。

调和平均数,归根结底它就是一种平均数,也就是说求的是参数的均衡,而不是偏重某个参数的结果。

F1 score的表示方式

F1 score

{\cfrac{2}{\cfrac{1}{precision} + \cfrac{1}{recall}}} = {2 * \cfrac{precision * recall}{precision + recall}}

我们发现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很接近的时候,调和平均数和算术平均数很接近,但是两者偏离的话,就远小于算术平均数了。

image.png

F1 score本质上是对precision和recall更加严格的均衡。如果用平均数来计算,可能就会因为大的值把小的值给平均了。就跟统计收入,往往用中位数会比平均值很精确。

注:谢谢群友提醒,修改了一下错误。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。