绘制线性回归最佳拟合线失败,遇x与y尺寸不匹配ValueError
线性回归拟合线绘制报错问题
我参考了两篇Stack Overflow帖子,尝试为我的线性回归问题绘制最佳拟合线。
我的数据形状如下:
[数据形状截图:X_test为30行1列的DataFrame,Y_test为30个元素的Series]
我用于绘制最佳拟合线的代码如下:
plt.scatter(X_test.values, Y_test.values, color="black") # 此行触发错误 plt.plot(Y_test, y_pred, color="blue", linewidth=3) plt.xticks(()) plt.yticks(()) plt.show()
执行代码时触发错误:
ValueError: x and y must be the same size
更新后的输出截图如下:
[输出截图:仅显示一条蓝色拟合线,无散点数据,坐标轴无刻度]
问题原因与解决方法
1. 散点图报错根源
X_test.values是二维数组(形状为(30,1)),而Y_test.values是一维数组(形状为(30,)),plt.scatter要求x和y的维度完全匹配。只需将X的二维数组转为一维即可解决。
2. 拟合线逻辑错误
原代码用Y_test作为拟合线的x轴输入,这不符合线性回归拟合线的绘制逻辑——拟合线应该基于特征X的取值来绘制对应的预测值y_pred,这样才能和散点图的x轴保持一致。
修正后的完整代码:
# 将X_test转为一维数组,与Y_test维度匹配 plt.scatter(X_test.values.squeeze(), Y_test.values, color="black") # 用X_test作为x轴,y_pred作为预测值绘制拟合线 plt.plot(X_test.values.squeeze(), y_pred, color="blue", linewidth=3) plt.xticks(()) plt.yticks(()) plt.show()
替代方案
如果X_test是pandas DataFrame,也可以直接取第一列的一维数据:
plt.scatter(X_test.iloc[:, 0], Y_test.values, color="black") plt.plot(X_test.iloc[:, 0], y_pred, color="blue", linewidth=3)
修改后,散点图会正确展示测试数据的分布,拟合线也会对应特征X的取值范围绘制,与散点数据匹配。
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

