F1
F1度量是基于Precision和recall的调和平均定义的:
定义
1 | def f1_score(precision, recall): |
对于一个训练好的模型,用于测试样本上得到测试样本的预测值,和真实值一起,计算出P&R。代入F1定义,得这个模型的F1值:
代入不同的P&R组合,看看对应F1:
1 | print(f1_score(0.9, 0.8)) # 0.8470588235294118 |
根据这些结果可以看出调和平均值的特点:当P&R值都较大时,对应F1也较大。当P&R一大一小差别很大时,对应F1接近较小值。当P&R值很平均时,F1接近两者的平均值。
F1是综合考虑了P值和R值,一般地,F1值越大表示模型性能越好。但是,如上一篇笔记所述,不同的实际应用场景对于P和R的重视程度是不同的。如,在推荐系统中,为了尽可能精准推荐,P就相对重要;逃犯系统中,为了不漏掉任何一个罪犯,哪怕一个很可疑但无辜的嫌疑人,先认为他是罪犯,抓起来再说。此时R相对重要。对于冤枉的,进一步审问就好了;而对于实际是罪犯,但被模型漏掉了,此情况代价是很高的。
所以对于具体问题,使用F-beta度量。
F-beta
F-beta是F1的更一般形式,它表达出对P&R的不同偏好:
定义
把训练好的样本用于测试集y_test
后,得到的预测值y_predict
,代入F-beta定义:
1 | from sklearn.metrics import fbeta_score |
beta>0为前提条件。beta为1时,退化为F1。beta<1,P影响大,beta>1,R影响大。
不同的beta值代表不同的应用场景,一个训练好的模型有它实用的场景。