機器學習入門 9-4 實現邏輯回歸演算法

  • 2020 年 2 月 26 日
  • 筆記

把現在的工作做好,才能幻想將來的事情,專註於眼前的事情,對於尚未發生的事情而陷入無休止的憂慮之中,對事情毫無幫助,反而為自己憑添了煩惱。

全文字數:864字

閱讀時間:8分鐘

前言

本系列是《玩轉機器學習教程》一個整理的影片筆記。本小節主要依據sklearn的設計理念封裝我們自己的邏輯回歸演算法,最後在jupyter中調用並實現。

a

實 現 邏 輯 回 歸 算 法

在之前的小節中詳細推導了邏輯回歸演算法的損失函數。由於邏輯回歸演算法沒有解析解,只能通過梯度下降演算法更新迭代求解,因此我們又詳細推導了損失函數相應的梯度向量以及向量化的梯度表達式。

通過之前的學習我們知道邏輯回歸演算法和線性回歸演算法有很多相似之處,我們完全可以在原來實現的LinearRegression基礎上修改成LogisticRegression。

接下來就具體的實現我們自己的邏輯回歸演算法:

  • 導入相應的模組

由於邏輯回歸演算法解決的是分類問題,所以通過accuracy_score準確率來評估模型的好壞。

在這裡我們仿照sklearn中的設計模式,將LogisticRegression封裝成類,通過在類中定義方法實現相應的演算法邏輯。

  • 初始化類的方法
  • 實現批量梯度下降法

邏輯回歸沒有數學解析解,所以只能通過梯度下降演算法來求解。在本小節先不實現隨機梯度下降法,只實現批量梯度下降法。

相對於線性回歸來說,添加了私有的Sigmoid函數,更改了計算損失函數的J函數以及計算梯度值的dJ函數。

  • 實現預測方法

邏輯回歸能夠判斷樣本屬於某一個類別的概率值,為了得到概率值創建一個新的predict_proba函數,它的功能是給定待預測數據集X_predict,返回表示X_predict結果的概率向量。

  • 評估模型準確度函數

完整的邏輯回歸LogisticRegression類:

接下來就可以在jupyter中調用我們封裝好的LogisticRegression了。

b

調 用 封 裝 好 的 LogisticRegression

分類準確度為1,表示模型把測試樣本都分類正確了。當然這是因為鳶尾花數據集太簡單了。

模型對於每一個測試樣本都有一個概率值,我們可以直接調用封裝好的predict_proba函數來得到概率值向量。對於一個樣本,模型估計的概率值越接近於1,模型越傾向於將這個樣本劃分成"類別1",模型評估的概率值越接近於0,模型越傾向於將這個樣本劃分成"類別0"。