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

Sklearn多项式回归实现异常,请求问题排查指导

问题排查与修正

你的代码生成混乱折线图的核心原因是绘图时使用的X未按升序排列,plt.plot会严格按照输入数据的顺序连接点,而原始数据集里的X值是无序的,导致线条交叉错乱。另外degree=6的多项式容易出现过拟合问题,也需要注意。

修正步骤与代码

  1. 对X进行排序,确保绘图时按x轴递增顺序生成拟合线
  2. 调整多项式阶数,避免过拟合(可根据效果调整)

修正后的代码:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# 导入数据集
df = pd.read_csv('data.csv')

X = df.values[:, 0:1]
y = df.values[:, 1:2]

# 多项式特征转换(先尝试degree=2,可按需调整)
poly_reg = PolynomialFeatures(degree=2)
X_poly = poly_reg.fit_transform(X)
lin_reg_poly = LinearRegression().fit(X_poly, y)

# 生成有序X值用于绘制平滑拟合线
X_sorted = np.sort(X, axis=0)
# 用已拟合的多项式特征转换器生成特征并预测
y_pred = lin_reg_poly.predict(poly_reg.transform(X_sorted))

plt.scatter(X, y, color='blue')
plt.plot(X_sorted, y_pred, color='r')
plt.show()

关键说明

  • X排序的必要性:原始数据集的X值不是从小到大排列的,直接用原X绘图会导致折线在x轴上来回跳跃,排序后才能得到连续平滑的拟合曲线。
  • 多项式阶数选择:degree=6的模型复杂度太高,很容易在训练数据上过度拟合,导致模型泛化能力差。建议从低阶(2-3)开始尝试,通过拆分训练/测试集、查看均方误差等方式评估拟合效果。
  • 避免重复拟合:绘图时只需用poly_reg.transform()转换排序后的X即可,不需要再次fit_transform(),因为转换器已经在训练数据上完成拟合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:05:27