线性回归MSE和RMSE计算方法及sklearn实现报错问题咨询
报错根因
你代码里的Y_NEW是用0到200范围内生成的100个新X值(X_NEW)预测得到的结果,样本量为100;而真实标签Y是原始5个训练样本的标签,样本量为5,二者数量不匹配自然会报样本数不一致的错误。
正确计算MSE/RMSE的方法
计算指标时,预测值必须和真实值一一对应,属于同一份样本集。如果要计算训练集上的MSE/RMSE,你应该用原始训练的X输入模型做预测,而不是用画图用的扩展X序列。
修改后的sklearn代码核心部分
# 省略前面加载依赖、定义训练数据、训练模型的代码,保持不变 # --------------- 修改部分开始 --------------- # 计算训练集的预测值,和原始Y数量一致,都是5 predicted_train = model.predict(X) true_val = Y predicted_val = predicted_train # --------------- 修改部分结束 --------------- mse = mean_squared_error(true_val, predicted_val) rmse = math.sqrt(mse) print('Mean square error:',mse) print('Root mean square error:',rmse) # 原来的画图代码不用改,Y_NEW还是用来画拟合线的,不参与指标计算 x_new_min = 0.0 x_new_max = 200.0 X_NEW = np.linspace(x_new_min, x_new_max, 100) X_NEW = X_NEW[:,np.newaxis] Y_NEW = model.predict(X_NEW) plt.plot(X_NEW, Y_NEW, color='coral', linewidth=3) # 省略后面画图的代码,保持不变
补充说明
- 如果后续有测试集,就用测试集的X输入模型得到预测值,再和测试集的真实标签计算指标即可,核心要求就是真实值和预测值的样本顺序、数量完全对应。
- 你之前用scipy计算时,预测值就是用原始5个X算出来的,和真实值数量一致,所以不会报错,逻辑和上面修改后的sklearn代码完全一致。
内容的提问来源于stack exchange,提问作者Jerzy
相关产品推荐
相关产品推荐

