1. F1 指标概述与课程目标
说起药物关系预测,很多人上手就跑到模型搭建上去了。
模型跑完,拿着一堆数字发懵,不知道该怎么评估。
我个人习惯,在做任何分类任务之前,先把评估指标想清楚。尤其是 F1,它几乎贯穿了整个药物关系预测的评估环节。
为什么需要 F1?
先问你一个问题:如果我们预测两种药物之间有没有相互作用,数据里 95% 都是“无关”样本,只有 5% 是“有关”。
这时候你写个模型,只管输出“无关”,准确率直接 95%。
看着挺高对吧?但对真正有用的那 5%,你一个都没抓住。
这其实就是 数据不平衡 带来的陷阱。
我在项目中遇到过好几次类似的情况。第一次做药物相互作用预测时,我拿到一个公开数据集,好家伙,正负样本比例接近 1:10。我当时只看了准确率,觉得模型不错,结果后来一查召回率,惨不忍睹。
从那以后,我就养成了习惯:用 F1 来压舱。
F1 到底是什么?
F1 说白了就是 精确率(Precision) 和 召回率(Recall) 的调和平均。
你想想看:精确率管的是“我预测为正的那些,有多大比例是对的”;召回率管的是“真正的正样本里,我抓出来了多少”。
单独看哪一个都有偏颇,F1 把它们揉在一起,给你一个相对均衡的判断。
公式写出来很简单:
F1 = 2 * (Precision * Recall) / (Precision + Recall)
嗯,这里要注意,调和平均数对极端值很敏感。如果精确率或召回率有一个特别低,F1 就会掉得很难看。
换句话说,你只能在两个指标上同时表现好,F1 才好看。耍不了小聪明。
核心观点: F1 不是万能药,但在药物关系预测这种正负样本往往严重不平衡的场景下,它是最实用的单一评估指标之一。
课程目标,我们来拆一下
这门课一共 30 章,我把内容捋成了三个层次,你大概有个数:
| 层次 | 包含章节 | 核心任务 |
|---|---|---|
| 基础篇 | 第 1-8 章 | 搞清楚 F1 到底怎么算的,混淆矩阵、精确率、召回率,以及它们为什么在药物领域容易变样 |
| 实战篇 | 第 9-22 章 | 用真实数据集的例子,跑通 F1 的计算流程,处理多分类、阈值选择、置信度校准这些实际坑 |
| 进阶篇 | 第 23-30 章 | 多标签预测下的 F1 变体、跨数据集评估、统计显著性检验——让你能拿 F1 去发论文或做竞品分析 |
每一章我尽量都会带上我在 DrugBank 和 DDInter 数据集上踩过的坑。
有些经验你可能在其他地方看不到,比如为什么有些论文里 F1 看着很高,但在你的数据上一跑就现原形。
一个简单的 F1 计算例子
我们先别急着上框架,先用手动算一次。
假设你的模型对一批药物对做了预测,得到了下面这个混淆矩阵:
| 实际为正 | 实际为负 | |
|---|---|---|
| 预测为正 | 80 (TP) | 20 (FP) |
| 预测为负 | 10 (FN) | 890 (TN) |
精确率 = 80 / (80+20) = 0.8
召回率 = 80 / (80+10) ≈ 0.889
F1 = 2 * 0.8 * 0.889 / (0.8+0.889) ≈ 0.842
看着还不错,0.842。如果我只看准确率呢?
准确率 = (80+890)/1000 = 0.97
0.97 比 0.842 漂亮多了吧?但刚才说过,这里负样本占了 891 条,模型在正样本上的表现其实没那么神。
F1 把这个水分挤掉了。我建议你以后报告指标时,把 F1、精确率、召回率都亮出来,不要只扔一个准确率。
为什么我选择把这个流程画成图
为了让你在进入后面章节之前有个整体框架,下面这张 SVG 图展示了 F1 在药物关系预测评估中的核心地位,以及它跟其他要素的连接关系。
一个容易踩的坑
我曾经被一个新手同事问过:“F1 是不是越高越好?”
嗯,理论上是的。但这里有个细节:F1 和阈值强相关。同一套模型,你把判断为正类的概率阈值从 0.5 改成 0.3,F1 可能会有明显变化。
你想想看,阈值降低后,召回率通常上升,但精确率会下降。F1 能否提升,要看两者变化的幅度。
小经验: 实践里我喜欢画 Precision-Recall 曲线,然后选那个让 F1 最大的阈值点。不要直接用默认的 0.5,尤其在药物数据这种不平衡场景下。
课前的心理准备
这门课不会一股脑丢给你一堆数学公式,然后让你自己琢磨。
我的做法是:每章的代码和例子,你都能在自己电脑上跑一遍。
我会用 Python 和 scikit-learn 做演示,偶尔会用到一些自定义函数,但都是你能看懂的那种。
还有一点——我提到的“药物关系预测”泛指所有判断药物之间是否具有某种关系(相互作用、副作用、协同作用等)的二分类或多标签任务。如果你研究的领域不同,但也是不平衡分类,大部分内容可以直接迁移过来。
注意: 不要拿着本课程的 F1 去套生成式任务的评估,那是另一回事。F1 在分类任务上才算得好使。