使用 Scikit-Learn 在 Python 中绘制多项式回归

Posted

技术标签:

【中文标题】使用 Scikit-Learn 在 Python 中绘制多项式回归【英文标题】:Plot polynomial regression in Python with Scikit-Learn 【发布时间】:2018-02-16 04:36:18 【问题描述】:

我正在编写一个 python 代码来调查使用 [0,1] 范围内的函数 sin(2.pi.x) 的过度拟合。我首先通过使用 mu=0 和 sigma=1 的高斯分布添加一些随机噪声来生成 N 个数据点。我使用第 M 多项式拟合模型。这是我的代码

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

# generate N random points
N=30
X= np.random.rand(N,1)
y= np.sin(np.pi*2*X)+ np.random.randn(N,1)

M=2
poly_features=PolynomialFeatures(degree=M, include_bias=False)
X_poly=poly_features.fit_transform(X) # contain original X and its new features
model=LinearRegression()
model.fit(X_poly,y) # Fit the model

# Plot
X_plot=np.linspace(0,1,100).reshape(-1,1)
X_plot_poly=poly_features.fit_transform(X_plot)
plt.plot(X,y,"b.")
plt.plot(X_plot_poly,model.predict(X_plot_poly),'-r')
plt.show()

Picture of polynomial regression

我不知道为什么我有 M=2 行第 m 多项式行?我认为不管M如何,它都应该是1行。你能帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

多项式特征变换后的数据为 (n_samples,2)。 所以 pyplot 正在用两列绘制预测变量。

将绘图代码更改为

plt.plot(X_plot_poly[:,i],model.predict(X_plot_poly),'-r')
where i your column number

【讨论】:

现在可以使用了。非常感谢你。据我所知,我应该是 0,对吧?因为我想根据 X 画图,而不是更高的多项式。 i 可以是 0 或 1。如果要使用原始数据集绘制图形,即在使用多项式特征生成之前,则应使用代码中定义的变量 X_plot。如果它解决了您的问题,请接受答案。 @ashwinids:我接受了。但是,当我尝试使用 M=0 时,代码没有编码。你知道我该如何处理这个问题吗?因为我也需要在 M=0 时进行评估 M 应该至少为 2。如果 M=0,您将有一个空的 numpy 数组,而 M=1 将返回输入而不做任何更改。我建议你应该先阅读文档。 @ashwinids:非常感谢。我知道 M 必须不同于 0。我的意思是,你知道我怎样才能用 wo=const 的直光来拟合模型吗?因为我不能应用多项式回归。

以上是关于使用 Scikit-Learn 在 Python 中绘制多项式回归的主要内容,如果未能解决你的问题,请参考以下文章

使用 Scikit-Learn 在 Python 中绘制随机森林的树

如何在 scikit-learn 的 SVM 中使用非整数字符串标签? Python

使用 Python 3 在 scikit-learn 上进行大数据序列化

使用 Scikit-Learn 在 Python 中绘制多项式回归

将 PMML 模型导入 Python (Scikit-learn)

想要在不使用 Scikit-Learn 的情况下在 python 中构建支持向量机的真正建议 [关闭]