同一模型为什么出现两种准确率?用 sample_weight 核对加权与未加权评估

同一批预测可以得到两种不同准确率:普通准确率每条样本权重相同,加权准确率会按事先定义的样本权重重新汇总。下面训练一个总预测多数类的教学模型,逐项核对正确数、权重和分母,说明数值差异从哪里来。

同一批预测可以得到两种不同准确率:普通准确率每条样本权重相同,加权准确率会按事先定义的样本权重重新汇总。下面训练一个总预测多数类的教学模型,逐项核对正确数、权重和分母,说明数值差异从哪里来。

准备环境与教学数据

以下代码已在 Windows 的 Python 3.11 独立环境运行。文中数据是人为构造或库自带的教学样本,不代表任何业务系统的效果;例子不调用在线大模型。

同一模型为什么出现两种准确率?用 sample_weight 核对加权与未加权评估

在空目录安装依赖,把完整代码保存为 demo.py,运行 python demo.py。使用现有 Python 环境时,先核对依赖版本。

python -m pip install numpy==2.4.6 scikit-learn==1.9.1

先确认权重代表什么

示例训练集有4个类别0和2个类别1,DummyClassifier(strategy=most_frequent) 学到总预测0。测试集共有8条,6条类别0、2条类别1,因此未加权时正确6条。为了演示“目标人群中类别1更重要”的评分口径,仅在报告环节人为给类别1每条权重3,其他为1;这不是从测试结果反向调出的正式业务权重。

加权准确率的分子是正确样本权重之和,分母是全部样本权重之和。两条类别1都预测错误,未加权分数为6/8,加权分数为6/12。代码用 accuracy_score(sample_weight=…) 和手工算式交叉核对。

同时报告原始量和目标口径

如果只发布加权分数,读者可能不知道样本数和总体组成;若只发布未加权分数,又可能与事先约定的目标分布不一致。保留权重定义、样本数、正确数、总权重和两种指标,才能解释同一个模型为何出现两种结果。

样本权重不能弥补错标签或非独立测试集。若训练时也使用 class_weight 或 sample_weight,那是另一项建模决定;本文只改变测试报告口径,没有重训模型。

完整可运行代码

import numpy as np
from sklearn.dummy import DummyClassifier
from sklearn.metrics import accuracy_score

X_train = np.arange(6).reshape(-1, 1)
y_train = np.array([0, 0, 0, 0, 1, 1])
X_test = np.arange(8).reshape(-1, 1)
y_test = np.array([0, 0, 0, 0, 0, 0, 1, 1])
model = DummyClassifier(strategy="most_frequent").fit(X_train, y_train)
prediction = model.predict(X_test)
weights = np.where(y_test == 1, 3.0, 1.0)
correct = prediction == y_test
plain = accuracy_score(y_test, prediction)
weighted = accuracy_score(y_test, prediction, sample_weight=weights)
manual = weights[correct].sum() / weights.sum()
assert np.isclose(weighted, manual)
assert int(correct.sum()) == 6 and weights.sum() == 12
print("correct_rows_total_rows", int(correct.sum()), len(y_test))
print("correct_weight_total_weight", float(weights[correct].sum()),
      float(weights.sum()))
print("accuracy_plain_weighted", round(float(plain), 3),
      round(float(weighted), 3))

运行结果与核对

下列是本文代码在上述环境的实际输出。更换运行环境时,先核对输入、代码和断言,再比较输出数值。

correct_rows_total_rows 6 8
correct_weight_total_weight 6.0 12.0
accuracy_plain_weighted 0.75 0.5

输出应能逐项还原为6/8=0.75与6/12=0.5。若真实数据两种结果不同,先检查测试行与权重行是否按稳定编号对齐,权重是否非负且总和大于零,然后复核权重是评估前定义的业务口径。

适用边界

8条测试记录与权重均为人工教学设定,0.5和0.75不是任何实际模型的性能。给某类更大权重是评分政策,不自动提高少数类召回,也不证明模型公平或适合上线。

常见问题

报告加权准确率后还要看召回率吗?

需要。加权准确率只把单条对错按权重求平均,无法告诉你少数类漏掉多少;还应按任务查看分组样本数、召回率和实际错误代价。

参考资料

以下接口行为依据官方文档核对于 2026 年 10 月 1 日;本文的运行结果仅覆盖上述教学输入。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31757.html

赞 (0)
AI小管家的头像AI小管家
分类模型调参工具怎么选?同一搜索预算比较 GridSearchCV 与 RandomizedSearchCV
上一篇 2小时前
模型分数是否高于随机标签?用 permutation_test_score 做教学置换检验
下一篇 2小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部