Python中散点图与回归线无法正确绘制问题求助
解决线性回归绘图异常的问题
看起来你遇到的绘图异常,大概率是两个原因导致的:变量顺序搞反,或者绘图时未对特征变量排序。我来一步步帮你排查:
1. 先检查特征与目标变量的逻辑顺序
你当前的代码是用Room.Board(住宿费)来预测Accept(录取人数),但从业务逻辑来看,通常是学校的招生规模(录取人数)会影响住宿费,而不是反过来。如果你的分析目标是探究录取人数和住宿费的关系,可能搞反了X和y的位置。
调整代码中的数据拆分部分,把目标变量和特征变量调换:
# 把原来的roomBoard和accStudent调换位置 X_train, X_test, y_train, y_test = train_test_split(accStudent, roomBoard, test_size=0.3, random_state=7)
之后重新训练模型再绘图,看看是否符合预期。
2. 绘图时对特征变量排序,避免回归线混乱
即使变量顺序正确,随机拆分后的X_test是无序的,直接用ax.plot(X_test, model.predict(X_test))会按照原始数据的顺序连接预测点,导致线条看起来杂乱(甚至可能呈现出“回归线在顶部”的错觉)。
修改你的drawLine函数,先对X_test排序再绘制回归线:
def drawLine(model, X_test, y_test, title, R2): fig = plt.figure() ax = fig.add_subplot(111) # 对特征变量排序,确保回归线是平滑的直线 X_sorted = X_test.sort_values(by=X_test.columns[0]) y_pred_sorted = model.predict(X_sorted) ax.scatter(X_test, y_test, c='g', marker='o') ax.plot(X_sorted, y_pred_sorted, color='orange', linewidth=1, alpha=0.7) title += " R2: " + str(R2) ax.set_title(title) print(title) print("Intercept(s): ", model.intercept_) print("Coefficients: ", model.coef_) # 新增打印系数,方便你分析模型的趋势 plt.show()
3. 额外的小建议
- 规范导入库的格式,每行导入一个库,提升代码可读性:
import pandas as pd import numpy as np import matplotlib import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from sklearn import linear_model from sklearn.model_selection import train_test_split
- 打印模型的系数(
model.coef_)可以帮你快速判断变量之间的相关性方向(正相关还是负相关),更容易理解回归线的趋势。
你可以先尝试调整变量顺序,再用修改后的绘图函数,应该就能解决散点和回归线分离的问题了。
内容的提问来源于stack exchange,提问作者Hackore
相关产品推荐
相关产品推荐

