1

我正在编写一个python代码,用于在[0,1]范围内使用函数sin(2.pi.x)来检查over-fiting。我首先通过使用mu = 0和sigma = 1的高斯分布添加一些随机噪声来生成N个数据点。我用M次多项式拟合模型。这里是我的代码使用Scikit-Learn绘制Python中的多项式回归

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个多项式线的M = 2行?我认为它应该是1行,不管M是多少。你能帮我弄清楚这个问题。

回答

0

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

更改剧情代码

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

现在的工作。非常感谢你。据我所知,我应该是0,对吧?因为我想根据X绘制一张图片,而不是更高的多项式。 –

+0

我可以是0或1.如果要用原始数据集绘制图形,即在使用多项式特征生成之前,则应使用代码中定义的变量X_plot。如果它解决了你的问题,请接受答案。 – ashwinids

+0

@ ashwinids:我接受。但是,当我尝试使用M = 0时,代码不会编码。你知道我该如何处理这个问题?因为我需要在M = 0处进行评估,所以 –