Sklearn分类报告support值(类别样本数)显示错误问题求助
问题原因
- 模型预测偏倚:数据集总样本量极小,正类占比更高(58.3%),线性SVM未调整类别权重时,会优先保障整体准确率,将所有样本预测为占比更高的正类,导致
y_pred中完全没有负类预测结果,classification_report无法输出负类相关指标。 - 单次划分的随机波动:24条样本按30%比例拆分后测试集仅7条,其中负类仅3条,哪怕分层逻辑生效,也容易出现模型刚好将全部负类测试样本判为正类的极端情况。
- 报告调用参数错误:如果调用
classification_report时手动设置labels参数仅传入正类标签,会直接导致报告不展示负类指标。
解决办法
- 先验证真实标签和预测结果的取值,执行以下代码确认问题来源:
import numpy as np print("测试集真实标签取值:", np.unique(y_test)) print("模型预测标签取值:", np.unique(y_pred))
如果输出显示y_test存在负类标签但y_pred没有,说明是模型预测偏倚问题。
- 给SVM添加类别权重配置,修改模型初始化代码,让模型自动根据各类样本量调整惩罚权重,降低对多数类的偏向:
clf = svm.SVC(kernel = 'linear', C = 1, class_weight='balanced')
- 调整数据集划分规则:总样本量过小的场景下,降低测试集占比到20%,同时改用K折交叉验证代替单次划分评估,避免单次划分的随机波动干扰结果。
- 检查classification_report的调用方式,使用无额外标签限制的标准调用:
from sklearn.metrics import classification_report print(classification_report(y_test, y_pred))
不要手动添加labels参数仅指定正类标签。
- 适当调整正则化参数C:增大C值降低模型正则化强度,避免模型过于保守全部预测为多数类。
内容的提问来源于stack exchange,提问作者jmero
相关产品推荐
相关产品推荐

