You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SKLearn MLPClassifier预测0-10图书评分返回无意义值的修复方案

问题根因

你拿到索引数组的直接原因是错误调用了ndarray.nonzero()方法,这个方法的作用是返回数组中非零元素的位置索引,完全不是预测结果本身。除此之外你还存在两个逻辑隐患:

  • 若将0-10的整数评分作为分类任务目标,必须保证训练集标签Y_train的原始取值就是0-10的整数,不能对标签做标准化或额外编码,否则MLPClassifier无法输出正确的评分值。
  • 若需要预测可带小数的连续评分值,你选错了模型类型:MLPClassifier是分类模型,无法输出连续值,需要改用回归模型。
修正方案

场景1:预测0-10的整数评分(分类任务)

模型训练代码无需调整,仅需删除预测阶段多余的.nonzero()调用即可,同时确认标签未做错误处理:

  • 前置检查:确认Y_train是未经过标准化、LabelEncoder编码的原始标签,取值范围为0-10的整数
  • 预测代码修改为:
Y_pred = clf.predict(X_test)
# 直接输出Y_pred即可,每个元素都是对应样本的0-10整数评分

场景2:预测0-10的连续评分(回归任务)

如果需要输出非整数的连续评分,将分类模型替换为MLP回归模型即可:

from sklearn.neural_network import MLPRegressor

# 替换为回归器初始化和训练
reg = MLPRegressor(
    hidden_layer_sizes=(50,50,50),
    max_iter=2000,
    activation='tanh',
    solver='adam'
).fit(X_train, Y_train)

Y_pred = reg.predict(X_test)
# 若预测值偶尔超出0-10区间,可手动截断到合法范围
Y_pred = Y_pred.clip(0, 10)

注意:你对特征列做LabelEncoder编码、StandardScaler标准化的处理逻辑是正确的,这部分不需要改动,仅需注意绝对不要对预测目标rating列做标准化处理。

内容的提问来源于stack exchange,提问作者Rafael Silva de Oliveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:06:26