1

私は[0,1]の範囲で関数sin(2πx)を使って過剰フィットを調べるためのPythonコードを書いています。私は最初に、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のラインを持っている理由私にはわからないのですか?私はMに関係なく1行でなければならないと思います。この問題を理解するのを助けてください。

答えて

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

iは0または1にすることができます。元のデータセットでグラフをプロットする場合、つまり多項式フィーチャ生成を使用する前に、コードで定義された変数X_plotを使用する必要があります。問題が解決したら、その答えを受け入れてください。 – ashwinids

+0

@ ashwinids:私は受け入れました。しかし、M = 0で試してみると、コードはコード化されません。この問題をどうやって解決できるかご存知ですか? M = 0で評価する必要があるので、 –

関連する問題