從零開始利用Python建立邏輯迴歸分類模型
假設申請人向你提供成績,你根據成績對其進行分類,目標是根據分數將申請人分為兩類,如果申請人可以進入大學,則分為1級,如果申請人不能被錄取,則分為0級。使用線性迴歸可以解決這個問題嗎?讓我們一起來看看。
注意:閱讀本文的前提是瞭解線性迴歸!
目錄
-
什麼是邏輯迴歸?
-
資料集視覺化
-
假設和成本函式
-
從頭開始訓練模型
-
模型評估
-
Scikit-learn實現
什麼是邏輯迴歸?
回想一下線性迴歸,它被用於確定一個連續因變數的值。邏輯迴歸通常用於分類目的。與線性迴歸不同,因變數只能採用有限數量的值,即因變數是分類的。當可能結果的數量只有兩個時,它被稱為二元邏輯迴歸。
讓我們看看邏輯迴歸如何被用於分類任務。
線上性迴歸中,輸出是輸入的加權和。邏輯迴歸是廣義線性迴歸,在某種意義上,我們不直接輸出輸入的加權和,但我們透過一個函式來傳遞它,該函式可以對映0到1之間的任何實數值。
如果我們將輸入的加權和作為輸出,就像我們線上性迴歸中做的那樣,那麼該值可以大於1,但我們想要一個介於0和1之間的值。這也是為什麼線性迴歸不能用於分類任務的原因。
從下圖可以看出,線性迴歸的輸出透過一個啟用函式傳遞,該函式可以對映0到1之間的任何實數值。
所使用的啟用函式稱為sigmoid函式。sigmoid函式的曲線如下圖所示
我們可以看到sigmoid函式的值總是介於0和1之間。在X = 0時,該值恰好為0.5。我們可以使用0.5作為機率閾值來確定類。如果機率大於0.5,我們將其分類為Class-1(Y = 1)或者歸類為Class-0(Y = 0)。
在我們構建模型之前,讓我們看一下邏輯迴歸所做的假設
-
因變數必須是絕對的
-
自變數(特徵)必須是獨立的(以避免多重共線性)
資料集
本文中使用的資料來自吳恩達在Coursera上的機器學習課程。資料可以從這裡下載。()該資料包括100名申請人的兩次考試分數。目標值採用二進位制值1,0。1表示申請人被大學錄取,0表示申請人未被錄取。它目標是建立一個分類器,可以預測申請是否將被大學錄取。
讓我們使用read_csv函式將資料載入到pandas Dataframe中。我們還將資料分為錄取的和未錄取的,以使資料視覺化。
現在我們已經清楚地瞭解了問題和資料,讓我們繼續構建我們的模型。
假設和成本函式
到目前為止,我們已經瞭解瞭如何使用邏輯迴歸將例項分類到不同的類中。在本節中,我們將定義假設和成本函式。
線性迴歸模型可以用等式表示。
然後,我們將sigmoid函式應用於線性迴歸的輸出
sigmoid函式表示為,
然後邏輯迴歸的假設為,
如果輸入的加權和大於零,則預測的類為1,反之亦然。因此,透過將輸入的加權和設定為0,可以找到將兩個類分開的決策邊界。
成本函式
與線性迴歸一樣,我們將為模型定義成本函式,目標是最小化成本。
單個訓練示例的成本函式可以透過以下方式給出:
成本函式直覺
如果實際的類是1並且模型預測為0,我們應該懲罰它,反之亦然。從下圖中可以看出,對於h(x)接近1的情況-log(h(x)),成本為0,當h(x)接近0時,成本為無窮大(即我們對模型進行嚴重懲罰)。類似地,對於繪圖-log(1-h(x)),當實際值為0並且模型預測為0時,成本為0並且當h(x)接近1時成本變為無窮大。
我們可以使用以下兩個方程組合:
由J(θ)表示的所有訓練樣本的成本可以透過取所有訓練樣本的成本的平均值來計算
其中m是訓練樣本的數量。
我們將使用梯度下降來最小化成本函式。梯度w.r.t任何引數都可以由該方程給出
該方程類似於我們線上性迴歸中所獲得的方程,在這兩種情況下只有h(x)不同。
訓練模型
現在我們已經擁有了構建模型所需的一切。讓我們在程式碼中實現它。
讓我們首先為我們的模型準備資料。
我們將定義一些將用於計算成本的函式。
接下來,我們定義成本和梯度函式。
我們還定義擬合函式,該函式將用於查詢最小化成本函式的模型引數。在這篇文章中,我們編寫了梯度下降法來計算模型引數。 在這裡,我們將使用scipy庫中的fmin_tnc函式。它可用於計算任何函式的最小值。它將引數作為:
-
func:最小化的函式
-
x0:我們想要查詢的引數的初始值
-
fprime:'func'定義的函式的梯度
-
args:需要傳遞給函式的引數
模型引數為[-25.16131856 0.20623159 0.20147149]
為了瞭解我們的模型有多好,我們將繪製決策邊界。
繪製決策邊界
由於我們的資料集中有兩個特徵,因此線性方程可以表示為,
如前所述,可以透過將輸入的加權和設定為0來找到決策邊界。將h(x)等於0,
我們將在我們用於視覺化資料集的圖上方繪製決策邊界。
看起來我們的模型在預測課程方面做得不錯。但它有多準確?讓我們來看看。
模型的準確性
該模型的準確率為89%。
讓我們使用scikit-learn實現我們的分類器,並將它與我們從頭開始構建的模型進行比較。
scikit-learn實現
模型引數為[[-2.85831439,0.05214733,0.04531467]],精度為91%。
為什麼模型引數與我們從頭開始實現的模型有很大不同?如果你看一下sk-learn的邏輯迴歸實現的文件,你就會發現其中考慮了正則化。基本上,正則化是用於防止模型過度擬合資料的。 在本文中,我不會深入討論正規化的細節。
此文章中使用的完整程式碼可以在此GitHub中找到。()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545819/viewspace-2217707/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從零開始學習邏輯迴歸邏輯迴歸
- 從零開始學機器學習——邏輯迴歸機器學習邏輯迴歸
- Re:從零開始的機器學習 - Machine Learning(二) 邏輯迴歸LR機器學習Mac邏輯迴歸
- 邏輯迴歸模型邏輯迴歸模型
- 利用Tensorflow實現邏輯迴歸模型邏輯迴歸模型
- Python邏輯迴歸Python邏輯迴歸
- 分類演算法-邏輯迴歸與二分類演算法邏輯迴歸
- 分類演算法(1)-LR邏輯迴歸演算法邏輯迴歸
- 三、邏輯迴歸logistic regression——分類問題邏輯迴歸
- 從零開始學機器學習——瞭解迴歸機器學習
- 機器學習之邏輯迴歸:模型訓練機器學習邏輯迴歸模型
- 機器學習筆記-多類邏輯迴歸機器學習筆記邏輯迴歸
- 利用TensorFlow實現多元邏輯迴歸邏輯迴歸
- COMP 330正則化邏輯迴歸分類邏輯迴歸
- 機器學習入門 - 快速掌握邏輯迴歸模型機器學習邏輯迴歸模型
- 機器學習中的邏輯迴歸模型簡介機器學習邏輯迴歸模型
- 機器學習筆記(3):多類邏輯迴歸機器學習筆記邏輯迴歸
- 資料探勘—邏輯迴歸分類—信用卡欺詐分析邏輯迴歸
- 邏輯斯蒂迴歸與最大熵模型初探熵模型
- 機器學習 | 線性迴歸與邏輯迴歸機器學習邏輯迴歸
- 機器學習之使用Python完成邏輯迴歸機器學習Python邏輯迴歸
- 機器學習之邏輯迴歸機器學習邏輯迴歸
- 機器學習整理(邏輯迴歸)機器學習邏輯迴歸
- 淺談邏輯迴歸邏輯迴歸
- 從零開始學機器學習——初探分類器機器學習
- 機器學習(三):理解邏輯迴歸及二分類、多分類程式碼實踐機器學習邏輯迴歸
- 機器學習演算法(一): 基於邏輯迴歸的分類預測機器學習演算法邏輯迴歸
- 【機器學習】---邏輯迴歸從初識到應用機器學習邏輯迴歸
- 對數機率迴歸(邏輯迴歸)原理與Python實現邏輯迴歸Python
- 邏輯迴歸:使用Python的簡化方法邏輯迴歸Python
- 機器學習之邏輯迴歸(純python實現)機器學習邏輯迴歸Python
- 從零開始學機器學習——線性和多項式迴歸機器學習
- scikit-learn 邏輯迴歸類庫使用小結邏輯迴歸
- 機器學習筆記(6):多類邏輯迴歸-使用gluon機器學習筆記邏輯迴歸
- 機器學習筆記(4):多類邏輯迴歸-使用gluton機器學習筆記邏輯迴歸
- 從零開始學機器學習——分類器詳解機器學習
- 邏輯迴歸演算法邏輯迴歸演算法
- 邏輯迴歸原理小結邏輯迴歸