这个坑值得记一笔。回归集里正类标 1、负类标 0,新换的标注工具导出时整体加一,变成 2 和 1,评测脚本按 0 和 1 判正负,算出来准确率 0.48,人工抽查明明九成是对的。
刚开始盯着「混入了字符串标签,比较时恒为 False」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。不同工具导出的标签基准不一样,没有做归一;脚本用 if label 判真值,2 也被当成正类;评测集合并时字段被覆盖,原始标签丢了。
上来先统计标签取值分布
python -c "import pandas as pd;print(pd.read_csv('eval.csv').label.value_counts())"
随后统一映射到 0 和 1 后再算指标
python norm_labels.py --map '1:0,2:1' --in eval.csv --out eval_fix.csv
再往下用混淆矩阵核对每类数量
python -c "from sklearn.metrics import confusion_matrix;print(confusion_matrix([0,1,1],[0,1,0]))"
末了把标签校验加进回归前置检查
pytest tests/test_eval_data.py -q
改完先别撤,确认这几项。同一批样本的准确率回到 0.9 以上,混淆矩阵两类数量与标注统计一致。
容易忽略的是,指标突然对折时先看标签分布,这类问题比模型退化常见得多。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
