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

使用sklearn线性回归绘图时拟合线未正常绘制的原因是什么?

问题原因

你的代码核心问题是输入数据的形状不符合scikit-learn的拟合要求:

  • 你生成的X是(1, 样本数)的二维数组,会被模型识别为「1个样本,n个特征」,完全不符合单特征回归的输入规则
  • 你生成的LEFT_Y是(1, 样本数)的二维数组,会被模型识别为「1个样本对应n个标签」,拟合逻辑完全错误
  • 形状不对导致predict输出结果的维度也不符合绘图要求,因此拟合线无法正常显示

修复方案

只需要调整X和标签数组的形状即可,修改后完整代码如下:

import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

def main():
    # 加载文件
    arr = np.genfromtxt("data.csv", dtype=float, delimiter=";", names=True)

    # 电压 调整为 (样本数, 1) 的二维数组,符合单特征输入要求
    X = np.array([i[0] for i in arr]).reshape(-1, 1)
    print("Voltage")
    print(X)

    # 左轮转速 调整为 (样本数,) 的一维数组
    LEFT_Y = np.array([i[1] for i in arr])
    print("Left wheel")
    print(LEFT_Y)

    # 右轮转速
    RIGHT_Y = np.array([i[2] for i in arr])
    print("Right wheel")
    print(RIGHT_Y)

    model = LinearRegression()
    model.fit(X, LEFT_Y)

    plt.scatter(X, LEFT_Y, color='blue')
    # 可选:如果X是乱序的,先排序再绘图保证线条平滑
    # X_sorted = np.sort(X, axis=0)
    # plt.plot(X_sorted, model.predict(X_sorted), color='red')
    plt.plot(X, model.predict(X), color='red')
    plt.show()

if __name__ == "__main__":
    main()

补充说明

如果你的原始数据中电压列不是按升序排列的,直接用原始X绘图会出现拟合线来回弯折的情况,取消代码中排序相关的注释即可解决。

内容的提问来源于stack exchange,提问作者CuriousPan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:01