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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:47:51