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處進行評估,所以 –