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
相关产品推荐
相关产品推荐

