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

Scikit-learn回归模型计算评分时触发维度错误,求解决方案

Scikit-learn SVR模型score方法报错:期望2D数组却得到1D数组的原因与解决

错误原因

  • 参数传递完全错误:Scikit-learn中回归模型的score()方法定义是model.score(X, y_true, sample_weight=None),第一个参数是测试集特征矩阵X,第二个是真实标签y_true,而你错误地传入了y_test(真实标签,1D数组)作为第一个参数,y_pred(预测值)作为第二个参数。
  • 当score()方法接收到y_test作为X时,内部会调用model.predict(X),而模型的predict()方法要求输入的特征矩阵必须是2D数组,但y_test是1D的,因此触发维度不匹配的ValueError。

解决方法

有两种正确的实现方式:

方式1:正确调用model.score()

直接传入测试集特征x_test和真实标签y_test,方法内部会自动完成预测并计算R²得分:

for regressor in regression_models:
    name = regressor[0]
    regressor = regressor[1]

    print("Model Name:", name)
    model = regressor.fit(x_train, y_train)
    y_pred = model.predict(x_test)
    # 正确的score调用方式
    score = model.score(x_test, y_test)
    print(score)

方式2:手动调用metrics.r2_score

如果需要基于已有的y_pred计算得分,可以直接调用sklearn的评估函数:

from sklearn.metrics import r2_score

for regressor in regression_models:
    name = regressor[0]
    regressor = regressor[1]

    print("Model Name:", name)
    model = regressor.fit(x_train, y_train)
    y_pred = model.predict(x_test)
    # 手动计算R²得分
    score = r2_score(y_test, y_pred)
    print(score)

两种方式得到的结果完全一致,因为model.score()内部就是调用r2_score实现的。

内容的提问来源于stack exchange,提问作者taga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:42:23