logo
Loading...

迴歸模型coef問題 - Cupoy

plt.figure()wine=datasets.load_wine()x_train, x_te...

迴歸模型coef問題

2020/04/10 下午 01:07
機器學習共學討論版
江柏勳
觀看數:229
回答數:3
收藏數:0

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 😃😃😃