目录
假设我们要训练一个模型来区分猫和狗的图片:
- 正例:猫的图片(假设我们想识别猫)。
- 负例:狗的图片。
1. 数据标签
通常,正例和负例会被标注为:
- 正例标签:1(或“True”)。
- 负例标签:0(或“False”)。
2. 正例在评估指标中的关键作用
在分类任务中,正例和负例直接影响模型的性能指标(如召回率、精确率)。以下是关键概念:
2.1 四种基本结果
模型预测后,样本会被分为四类:
类别 | 含义 |
---|---|
真正例(TP) | 模型预测为正例,且实际是正例。 |
假反例(FN) | 模型预测为负例,但实际是正例(漏报,模型漏掉了正例)。 |
假正例(FP) | 模型预测为正例,但实际是负例(误报,模型错误地认为是正例)。 |
真反例(TN) | 模型预测为负例,且实际是负例。 |
假设你参加了一次判断题考试,共有 100 道题,题目分为两类:
- 正例(Positive):正确答案(如题目正确,应答“对”)。
- 负例(Negative):错误答案(如题目错误,应答“错”)。
你回答后,老师统计了以下结果:
- 实际正确答案(正例):共有 80 道题(TP + FN = 80)。
- 实际错误答案(负例):共有 20 道题(TN + FP = 20)。
你的回答结果如下:
- 你答对的正确题(TP):70 道(正确题目中你答对了 70 题)。
- 你答错的正确题(FN):10 道(正确题目中你漏掉了 10 题)。
- 你答对的错误题(TN):15 道(错误题目中你正确判断为错的题)。
- 你误判的错误题(FP):5 道(错误题目中你错误地答为对的题)。
2.2 精确率 vs 召回率在考试中的含义
2.3精确率(Precision)
- 类比:你认为自己答对的题目中,实际真正确题的比例。
- 公式:
Precision=TPTP + FP=7070+5=93.3%Precision=TP + FPTP=70+570=93.3%
- 含义:
- 你一共认为自己答对了 75 题(TP=70 + FP=5)。
- 其中 70 题 是真正确题,5 题 是误判的错误题。
- 精确率 93.3% 表示:“你认为答对的题中,约 93% 是真正确题”。
2.4 召回率(Recall)
- 类比:所有真正确题中,你正确答对的比例。
- 公式:
Recall=TPTP + FN=7070+10=87.5%Recall=TP + FNTP=70+1070=87.5%
- 含义:
- 总共有 80 道真正确题。
- 你正确答对了 70 题,漏掉了 10 题。
- 召回率 87.5% 表示:“所有真正确题中,你找到了 87.5%”。
提高召回率的核心目标是尽可能多地捕捉所有实际存在的正例(Positive Examples),即使这意味着会增加一些误判的负例(False Positives)。以下是具体方法和策略,结合理论和实践示例,帮助你系统性地提升召回率:
3. 数据层面优化
3.1 处理类别不平衡
当正例(目标类别)远少于负例时,模型容易偏向预测多数类(负例),导致召回率低。以下是解决方案:
-
# 使用SMOTE过采样 from imblearn.over_sampling import SMOTE X_resampled, y_resampled = SMOTE().fit_resample(X_train, y_train)
- 欠采样(Undersampling):随机删除部分负例,使类别分布平衡。
- 调整类别权重(Class Weight):在训练时给正例更高的权重,迫使模型更关注正例。
# 示例:在Scikit-learn中设置class_weight model = LogisticRegression(class_weight='balanced') model.fit(X_train, y_train)
3.2 收集更多正例数据
- 方法:通过人工标注或外部数据源获取更多正例样本。
- 数据增强:对现有正例进行变换生成新样本(如图像旋转、文本同义词替换)。
模型侧面我后面再补充