機器學習入門 - 快速掌握邏輯迴歸模型

dicksonjyl560101發表於2019-01-15


主要內容

一、邏輯迴歸的原理

二、極大似然估計

三、邏輯迴歸的極大似然估計

四、Python中的邏輯迴歸

預告:

本文將會帶領大家一步步理解邏輯迴歸的原理,並且會用幾行程式碼快速實現一個邏輯迴歸模型訓練和預測的例子。

之後,我計劃專門用一篇文章來演示 如何評估邏輯迴歸模型的表現以及如何調優 ,這部分內容會更加 偏重於實戰 ,感興趣的同學 歡迎關注 後續的更新!

目前來看,邏輯迴歸這一經典演算法的應用極為廣泛。如果要按照應用廣度來做個排名的話,它很可能就是一哥了。從垃圾郵件分類到廣告點選預測,從商品推薦到信用欺詐檢測,到處都是它的身影。

它能得到如此廣泛的應用,除了其分類效果良好之外,最大的原因就是在輸出分類的結果時,它還能給出樣本屬於預測分類的機率,這就給了模型極好的解釋性。很多分類模型類似黑盒,我們只能知道調整了某些引數之後分類效果可能明顯提升了或者下降了,但是並不清楚某一個樣本為什麼被分到了某一類,而邏輯迴歸則不存在這一問題。今天我們就從理論到應用來扒掉邏輯迴歸的外衣,嘿嘿。

一、邏輯迴歸的原理

首先,我們知道線性迴歸的輸出值域為負無窮到正無窮,因此它不太適合直接應用於分類,一個很好的辦法就是透過一個函式,將大於0的值對映為1,小於0的值對映為0,這樣我們就可以達到分類的目的。

我們先將線性迴歸模型寫作:

機器學習入門|快速掌握邏輯迴歸模型

現在我們要對線性迴歸的值做一個變換,即:

機器學習入門|快速掌握邏輯迴歸模型

一種方法是令g(z)為單位階躍函式,即:

機器學習入門|快速掌握邏輯迴歸模型


但是我們發現,它並不連續,也就不滿足單調可導的性質。因此我們找到了更好的替代品:對數機率函式,即:

機器學習入門|快速掌握邏輯迴歸模型


對數機率函式的分佈形態為:

機器學習入門|快速掌握邏輯迴歸模型

可以看到,對數機率函式是一種“Sigmoid”函式,它將z值轉化為一個接近0或1的y值,且當z值遠離0時,y值迅速靠近0或1。

如果我們將y視為樣本x作為正例的可能性,則1-y就是其作為反例的可能性,兩者的比值被稱作“機率”(odds,又名發生比、優勢比等),反映了x作為正例的 相對可能性 。對數機率則是對機率取對數:

機器學習入門|快速掌握邏輯迴歸模型


我們可以將(2)式中的y視為類後驗機率估計p(y=1|x),於是(2)可以重寫為:

機器學習入門|快速掌握邏輯迴歸模型


從(1)中我們知道:

機器學習入門|快速掌握邏輯迴歸模型


於是:

機器學習入門|快速掌握邏輯迴歸模型


也就是說,線性函式(0)中z的值越接近正無窮,機率就越大,樣本屬於正例的機率值就越接近1;反之,z的值越接近負無窮,樣本屬於正例的機率就越接近0。

二、極大似然估計

我們用極大似然估計法(Maximum Likelihood Estimate)來估計邏輯迴歸模型的引數,這裡我們有必要先簡單解釋一下極大似然估計。

極大似然估計的原理是找出與樣本分佈最接近的機率分佈模型,似然是指在已知結果的前提下,隨機變數分佈的最大可能。我們用經典的拋硬幣例子來理解極大似然估計。

假如我們拋了10次硬幣,其中6次為正,4次為反,那麼發生這一事件的機率為:

機器學習入門|快速掌握邏輯迴歸模型


這裡等號右邊的部分就是似然函式,極大似然估計就是找到這樣一個P正,使得似然函式的值最大。我們用下圖來觀察隨著P正取值的變化,似然函式大小的變化趨勢:

機器學習入門|快速掌握邏輯迴歸模型

可以看到,當P正為0.6時,似然函式達到最大,因此我們估計的P正就是0.6。這就是極大似然估計的過程。

一般來說,對於引數θ和訓練資料集X,似然函式的一般形式為:

機器學習入門|快速掌握邏輯迴歸模型


不過在實際的計算過程中,我們常對似然函式取對數,得到對數似然函式:

機器學習入門|快速掌握邏輯迴歸模型


我們的資料集往往由大小為N的特徵集X與目標集(分類變數)Y組成,因此(10)更常被寫作如下形式:

機器學習入門|快速掌握邏輯迴歸模型


而極大似然估計的一般形式為:

機器學習入門|快速掌握邏輯迴歸模型


三、邏輯迴歸的極大似然估計

我們根據(10)來寫出邏輯迴歸的對數似然函式:

機器學習入門|快速掌握邏輯迴歸模型


其中,

機器學習入門|快速掌握邏輯迴歸模型


可以看到,不管yi是0還是1,式(13)都成立(代入一下就知道了)。然後我們把(4)(5)代入(13),然後再整體代入(12),得到:

機器學習入門|快速掌握邏輯迴歸模型


在最後一步,分別考慮yi=0和yi=1的情況即可得到。到了這一步以後,我們就可以透過梯度下降法、牛頓法等數值最佳化演算法來對(14)式求解得到引數(w,b)了。關於數值最佳化演算法這裡就不再贅述,接下來我們看一下如何在Python中完成邏輯迴歸模型的訓練和預測。

四、Python中的邏輯迴歸

這裡我們仍然選擇經典的iris資料集(鳶尾花)來演示如何在Python中應用邏輯迴歸模型。需要注意的是,雖然我們上邊演示的推導過程為二元邏輯迴歸,但是其推導是可以推廣到多元邏輯迴歸過程的。這裡的鳶尾花資料集中,目標變數有三種分類水平,就是一個多元邏輯迴歸的例子,而強大的sklearn對於多元邏輯迴歸提供了原生的支援。

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
logr = LogisticRegression(solver='newton-cg', multi_class='multinomial')
logr.fit(X_train, y_train)
y_pred = logr.predict(X_test)
acc = sum(y_pred == y_test)/len(y_pred)
print('準確率:{0:.2f}%'.format(acc * 100))

輸出為:

準確率:97.37%


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2558236/,如需轉載,請註明出處,否則將追究法律責任。

相關文章