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

Scikit-learn多项式回归绘图错误求助

解决Scikit-learn多项式回归绘图的常见问题

嘿,我看到你刚开始接触多项式回归,在用Scikit-learn绘图时遇到了问题。先别着急,咱们从你给出的线性回归代码出发,一步步把多项式回归的正确写法和绘图逻辑理清楚——很多新手都会在特征转换和绘图细节上踩坑。

首先明确:多项式回归的核心是把原始特征转换成多项式特征,再用线性回归模型去拟合。你提到的sklearn.preprocessing里的PolynomialFeatures就是干这个的,这也是最容易出错的环节。

先确认你的线性回归代码合理性

你的线性回归代码是没问题的,逻辑完整且能正常生成图像:

# Linear regression
from sklearn import linear_model
clf = linear_model.LinearRegression()
x = data.loc[:, ['col1']]
y = data.loc[:, ['col2']]
clf.fit(x, y)
plt.scatter(x, y)
plt.plot(x, clf.predict(x))
plt.show()

这里因为x是线性特征,即使不排序也不会影响绘图效果,但多项式回归对数据顺序的要求就高多了。

完整的多项式回归+绘图代码(附关键踩坑提示)

下面是修正后的完整代码,我标注了新手最容易出错的细节:

# 导入所有必要库
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt

# 假设你的data已经是加载好的DataFrame
x = data.loc[:, ['col1']]
y = data.loc[:, ['col2']]

# 1. 生成多项式特征(以2次多项式为例,可修改degree调整次数)
# 关键参数include_bias=False:避免与LinearRegression自带的偏置项重复
poly_features = PolynomialFeatures(degree=2, include_bias=False)
x_poly = poly_features.fit_transform(x)

# 2. 拟合多项式回归模型(本质还是线性回归,只是特征是多项式形式)
clf_poly = linear_model.LinearRegression()
clf_poly.fit(x_poly, y)

# 3. 绘图:最容易出错的一步!必须先对x排序
# 原因:原始数据的x可能是无序的,直接plot会按原始顺序连线,导致曲线混乱
x_sorted = x.sort_values(by='col1')  # 按col1列排序
x_sorted_poly = poly_features.transform(x_sorted)  # 对排序后的x生成多项式特征

# 绘制原始数据散点和多项式回归曲线
plt.scatter(x, y, label='原始数据点')
plt.plot(x_sorted, clf_poly.predict(x_sorted_poly), color='#ff4444', label='2次多项式回归线')
plt.xlabel('col1')
plt.ylabel('col2')
plt.legend()
plt.show()

常见错误排查清单

  • 忘记转换特征:直接把原始x传入LinearRegression,拟合的还是线性模型,根本不是多项式回归
  • 绘图时未排序x:这是最常见的绘图错误,无序的x会让折线图看起来杂乱无章,完全不是预期的平滑曲线
  • include_bias参数误用:如果保留默认的include_bias=True,LinearRegression会额外拟合一个偏置项,可能导致模型冗余,建议设为False

如果需要尝试更高次的多项式,只需要修改PolynomialFeatures的degree参数即可(比如设为3就是3次多项式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:15:23