同一批预测可以得到两种不同准确率:普通准确率每条样本权重相同,加权准确率会按事先定义的样本权重重新汇总。下面训练一个总预测多数类的教学模型,逐项核对正确数、权重和分母,说明数值差异从哪里来。
准备环境与教学数据
以下代码已在 Windows 的 Python 3.11 独立环境运行。文中数据是人为构造或库自带的教学样本,不代表任何业务系统的效果;例子不调用在线大模型。

在空目录安装依赖,把完整代码保存为 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