2017-03-27 111 views
0

我對這個coursera當然線性迴歸(https://www.coursera.org/specializations/machine-learning線性迴歸的過度擬合

我已經解決使用graphlab訓練,但想嘗試的經驗和學習sklearn追求課程2。我爲此使用了sklearn和熊貓。

該模型過度適用於數據。我怎樣才能解決這個問題?這是代碼。

這些是我得到的係數。

[-3.33628603e-13 1.00000000e + 00]

poly1_data = polynomial_dataframe(sales["sqft_living"], 1) 
poly1_data["price"] = sales["price"] 
model1 = LinearRegression() 
model1.fit(poly1_data, sales["price"]) 
print(model1.coef_) 
plt.plot(poly1_data['power_1'], poly1_data['price'], '.',poly1_data['power_1'], model1.predict(poly1_data),'-') 
plt.show() 

繪製的線是這樣的。如你所見,它連接每個數據點。 enter image description here ,這是輸入數據 enter image description here

+3

也許你想問你的問題上stats.stackexchange,因爲它是不是一個真正的編程問題。 避免在線性迴歸中避免過度使用損失函數,通常使用Ridge或Lasso迴歸。 最後,如果你的訓練和測試集之間有完美的相關性,我建議檢查一下你是否使用相同的數據爲兩者;) – LoicM

+0

感謝您的建議,將在那裏提出我的問題。另外,我只是試圖從訓練模型的係數中畫出線。但是創建的這條線甚至不是一條直線。這是如何發生的?給定一個截距和一個斜坡。 –

+0

請爲此提出一個單獨的問題,說明您使用的代碼,捕獲您獲得的內容以及它與預期結果的差異。 我(和其他很多人)會很樂意幫助! – LoicM

回答

2

我不會稱之爲過度擬合的曲線。我會說你沒有做你認爲你應該做的事。特別是,你忘了的1的列添加到您的設計矩陣,十,例如:

# generate some univariate data 
x = np.arange(100) 
y = 2*x + x*np.random.normal(0,1,100) 
df = pd.DataFrame([x,y]).T 
df.columns = ['x','y'] 

你做以下幾點:

model1 = LinearRegression() 
X = df["x"].values.reshape(1,-1)[0] # reshaping data 
y = df["y"].values.reshape(1,-1)[0] 
model1.fit(X,y) 

導致:

plt.plot(df['x'].values, df['y'].values,'.') 
plt.plot(X[0], model1.predict(X)[0],'-') 
plt.show() 

enter image description here

相反,你要1周的一列添加到您的設計矩陣(X):

X = np.column_stack([np.ones(len(df['x'])),df["x"].values.reshape(1,-1)[0]]) 
y = df["y"].values.reshape(1,-1) 
model1.fit(X,y) 

和(後一些整形),您將獲得:

plt.plot(df['x'].values, df['y'].values,'.') 
plt.plot(df['x'].values, model1.predict(X),'-') 
plt.show() 

enter image description here

+0

謝謝!這是我試圖完成的練習,因爲我只是開始迴歸。我看到我出錯的地方。 –