如何对LinearRegression使用accuracy_score?出现分类指标报错原因是什么?
报错原因解释
报错直接原因
这个ValueError本质是分类评估指标accuracy_score对输入的真实标签、预测标签的类别匹配度校验失败导致的,具体触发逻辑如下:
- 你的真实标签
y_test经过OrdinalEncoding处理后只有1~6共6个固定类别,scikit-learn会将其识别为标准的多分类(multiclass)目标 - 线性回归
LinearRegression是回归模型,输出的是连续浮点值,哪怕你做了四舍五入、转整数处理,依然可能出现超出1~6范围的预测值(比如预测结果为0.4四舍五入得到0、6.7四舍五入得到7等),这些不在原有标签范围内的值会被识别为「未知目标(unknown targets)」 - 当
accuracy_score同时收到类别完全匹配的多分类真实标签、包含未知类别的预测标签时,就会抛出你遇到的这个错误。
临时修复方案
如果你暂时想保留现有逻辑验证效果,可以在转整数之后加一步截断操作,把预测值限制在1~6的范围内,即可解决报错:
y_pred = np.round(y_pred) y_pred = y_pred.astype(int) # 新增截断逻辑 y_pred = np.clip(y_pred, a_min=1, a_max=6) y_test = np.array(y_test) print(accuracy_score(y_pred, y_test))
更合理的实现方案
线性回归本身是为回归任务(预测连续值)设计的,并不适合处理有序分类任务,哪怕做截断处理得到的准确率参考价值也很低。你可以直接更换为适配有序分类的模型,比如有序回归模型、随机森林分类器、支持向量分类器等,从根源避免预测值越界的问题。
内容的提问来源于stack exchange,提问作者NewCoder1423
相关产品推荐
相关产品推荐

