當前位置:
首頁 > 科技 > 機器學習演算法:從頭開始構建邏輯回歸模型

機器學習演算法:從頭開始構建邏輯回歸模型

原作:Rohith Gandhi

郭一璞 編譯自 Hacher Noon

量子位 出品 | 公眾號 QbitAI

邏輯回歸是繼線性回歸之後最著名的機器學習演算法。

在很多方面,線性回歸和邏輯回歸是相似的,不過最大的區別在於它們的用途,線性回歸演算法用於預測,但邏輯回歸用於分類任務。

分類任務很常見,比如把電子郵件分為垃圾郵件和非垃圾郵件、把腫瘤分為惡性或者良性、把網站分為危險站點或正常站點,機器學習演算法就可以完成這些任務。

其中,邏輯回歸演算法就是一種分類演算法,簡單粗暴,但有用。

現在,開始深入研究邏輯回歸。

Sigmoid函數(Logistic函數)

邏輯回歸演算法使用具有獨立預測因子的線性方程來預測,預測值可以是從負無窮到正無窮之間的任何值。

我們需要讓演算法的輸出為類變數,比如用0表示非,用1表示是。

因此,我們將線性方程的輸出壓縮到[0,1]的範圍內。

為了壓縮0和1之間的預測值,我們使用sigmoid函數:

線性方程和sigmoid函數

壓縮輸出-h

我們取線性方程的輸出(z)並給出返回壓縮值h的函數g(x),h將位於0到1的範圍內。為了理解sigmoid函數如何壓縮,我們畫出了sigmoid函數的圖形:

sigmoid函數圖形

如圖可見,sigmoid函數當x>0時,y逐漸向1靠近;當x

成本函數(cost function)

由於我們試圖預測類別值,不能使用和線性回歸演算法中相同的成本函數。

所以,我們使用損失函數的對數來計算錯誤分類的成本。

考慮到計算上面這個函數的梯度實在太難了,,我們把它寫成下面這個樣子:

計算梯度

我們取相對於每個參數(θ_0,θ_1,…)的成本函數的偏導數來獲得梯度,有了這些梯度,我們可以更新θ_0,θ_1,…的值。

現在,開始召喚微積分大法:

梯度

如果看懂了,那你的微積分學得棒棒的。

不過,如果微積分大法召喚失敗……就直接照著上面的式子做吧。

寫代碼

現在方程終於搞定了,開始寫代碼。

我們用NumPy來從頭構建模型,用IRIS(鳶尾花)數據集來訓練和測試演算法。

我們用pandas來載入數據。

IRIS數據集有三個目標值,分別是弗吉尼亞鳶尾、山鳶尾、變色鳶尾。但是因為要實現的是二進位的分類演算法,所以此處先把弗吉尼亞鳶尾剔除。

變色鳶尾(左)和山鳶尾(右),圖源百度百科

現在,只剩下兩個目標值用來分類了。

之後,從數據集中提取獨立變數和因變數,現在可以繼續準備訓練集和測試集了。

我們清洗了數據,並且把它們分為了訓練集和測試集,訓練集中有90個數據,測試集中有10個數據。由於數據集中有四個預測因子,所以我們提取每個特徵並將其存儲在各個向量中。

我們用0來初始化參數(θ_0,θ_1,…)。當我們使用線性方程來計算這些值時,這些值將被壓縮到0到1的範圍內。

然後計算成本。

可以用成本函數計算每個參數的梯度,並通過將梯度與α相乘來更新它們的值,α是演算法的學習率。一萬次之後,我們的演算法會收斂到最小值。

現在,終於可以找出那10個測試集的數據,開始測試了。

提前準備好的測試集和訓練集的特徵十分相似,但是因為測試示例的數量只有10個,所以我們把θ_0,θ_1,θ_2,θ_3和θ_4的值從90×1剪切到10×1,計算了測試類別並檢查模型的精確度。

哎呦不錯

完美!模型準確度100%!

雖然邏輯回歸演算法非常強大,但我們使用的數據集並不是很複雜,所以我們的模型能夠達到100%的準確度。

我們還可以畫出一萬次訓練的成本函數圖:

您的成本函數請查收

不過,現在你可能覺得這個演算法的代碼太多了。為了縮短代碼行數,我們用上了scikit學習庫。scikit學習庫有一個內置的邏輯回歸類別,我們可以直接接入使用。

看,代碼已經被縮減到10行以內了。用scikit學習庫,我們的模型準確率依然100%。

https://hackernoon.com/introduction-to-machine-learning-algorithms-logistic-regression-cbdd82d81a36

活動報名

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 量子位 的精彩文章:

阿里AI智能音箱現在有了視覺能力,跟人交互時表情豐富
首個香港AI實驗室成立,阿里商湯聯手,內地應用輸出

TAG:量子位 |