我正在编写一个python代码,用于使用[0,1]范围内使用函数sin(2.pi.x)进行过度贴合。我首先通过使用MU = 0的高斯分布添加一些随机噪声来生成N数据点,而Sigma = 1。我使用M-th多项式拟合模型。这是我的代码
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()
多项式回归的图片
我不知道为什么我有M = 2行的多项式线?我认为不管M.您能帮助我找出这个问题吗?
多项式特征转换后的数据是形状(N_Samples,2)。因此,Pyplot绘制了两个列的预测变量。
将情节代码更改为
plt.plot(X_plot_poly[:,i],model.predict(X_plot_poly),'-r')
where i your column number