迴歸模型coef問題
plt.figure()
wine=datasets.load_wine()
x_train, x_test, y_train, y_test = train_test_split(wine.data, wine.target, test_size=0.2, random_state=4)
for i,j in zip([0.0001,0.001,0.01,0.1],[1,2,3,4]):
model=linear_model.Ridge(alpha=i)
model.fit(x_train,y_train)
y_pred=model.predict(x_test)
print("Mean Square Error:{}".format( mean_squared_error(y_test, y_pred)))
print("cofficient:",np.reshape(model.coef_,(-1,1)))
plt.subplot(2,2,j)
plt.scatter(x_test,x_test)
plt.plot(x_test,y_pred)
想問一下就是請問coef_這邊是只回歸之後每個變數的係數?
然後想問一下這是這張圖有什麼意涵可以解讀嗎?
(程式碼寫得不夠精簡請見諒)
回答列表
-
2020/04/11 上午 00:12李子明贊同數:0不贊同數:0留言數:1
對,也就是模型中的權值向量。
綠線的部分,應該是用來呈現測試集輸入與預測輸出的關係,這裏會因為預測輸出的值太小了,所以讓整條線變成一條水平線,主要是藍點的Y刻度太大的關係。
藍點的部分,可以用來看測試集的輸入分佈,但意義好像不大,四個子圖的內容都會是一樣的,每個子圖都畫一次的用意看起來像是為了與綠線的部分進行比較,雖然這樣子的比較意義好像也不大。
整個來講,藍點的部分,把Y值改為實值,即y_test,這樣會有比較好的內涵,因為可以用來比較模型預測與真實值的差異,如果你想要這樣改的話,最後兩行程式碼應該像下面這樣子寫:
plt.scatter(x_test,y_test)
plt.plot(x_test,y_pred)
-
2020/04/12 上午 01:55張維元 (WeiYuan)贊同數:0不贊同數:0留言數:1
嗨,柏勳,以下簡單回覆你的問題:
「想問一下就是請問coef_這邊是只回歸之後每個變數的係數?」
=> 依照慣例,先附上 文件 ,當中就有提到模型產出當中的 coef 是 Weight vector(s),也就是模型的權重值。線性回歸時根據資料找出一個線性方程式,用來預測新的資料應該在哪個位置。如果是二維的資料的話,那麼此時的回歸方程式就是一條線。基本的原則是這樣,將現有的點與方程式的距離稱為誤差函數。目標是最小化誤差函數,求出方程式的權重。誤差的計算一般是選擇 Least Square,也就是最小平方誤差。以二維來說,利用 Linear Regression 畫出的線,代表現有資料趨勢最接近的線。
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃
-
2020/04/12 上午 01:57張維元 (WeiYuan)贊同數:0不贊同數:0留言數:1
嗨,柏勳,以下簡單回覆你的問題:
「然後想問一下這是這張圖有什麼意涵可以解讀嗎?」
=> 這邊我們可以先看一下,這個圖是由 for loop 中產生的:
```
for i,j in zip([0.0001,0.001,0.01,0.1],[1,2,3,4])
```
再來,我們看一下 for 迴圈中的 i, j 會出現在:
```
model=linear_model.Ridge(alpha=i)
plt.subplot(2,2,j)
```
所以這邊的意涵是將 i 當作不同的模型參數,訓練模型,然後畫成四張圖。
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃