logistic regression 邏輯回歸
1 一句話了解邏輯回歸
邏輯回歸是一種非常常用的機器學習演算法,屬於線性回歸的一種(不像SVM那樣可以應對非線性問題)Logistic回歸的因變數可以是二分類的,也可以是多分類的,但是二分類的更為常用,也更加容易解釋。用於監督學習,所以實際中最常用的就是二分類的Logistic回歸。
自變數既可以是連續的,也可以是分類的,但一般都需要對連續的自變數進行離散化處理。
2 如何理解邏輯回歸
2.1 邏輯回歸的前身-線性回歸
線性回歸是利用數理統計中回歸分析,來確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法,運用十分廣泛。其表達形式為y = wx+e,e為誤差服從均值為0的正態分布。
當然,我們最直接的想法是,既然能夠用線性回歸預測出連續值結果,那根據結果設定一個閾值是不是就可以解決這個問題了呢?事實是,對於很標準的情況,確實可以的,這裡我們套用Andrew Ng老師的課件中的例子,下圖中X為數據點腫瘤的大小,Y為觀測結果是否是惡性腫瘤。通過構建線性回歸模型,如hθ(x)所示,構建線性回歸模型後,我們設定一個閾值0.5,預測hθ(x)≥0.5的這些點為惡性腫瘤,而hθ(x)<0.5為良性腫瘤。
但很多實際的情況下,我們需要學習的分類數據並沒有這麼精準,比如說上述例子中突然有一個不按套路出牌的數據點出現,如下圖所示:
從以上這個例子來看,似乎線性回歸也能很好的解決分類問題。現在,我們對以上問題稍作一些改動。
將橫軸向右擴展,並且增加一個訓練樣本,如下:此時,我們使用線性回歸,會得到一條新的直線:
此時,我們再用0.5作為閾值來預測腫瘤的良性與否,就不合適了。
為了應對這種情況,邏輯回歸就誕生了。它的核心思想是,如果線性回歸的結果輸出是一個連續值,而值的範圍是無法限定的,那我們有沒有辦法把這個結果值映射為可以幫助我們判斷的結果呢。而如果輸出結果是 (0,1) 的一個概率值,這個問題就很清楚了。我們在數學上找了一圈,還真就找著這樣一個簡單的函數了,就是很神奇的sigmoid函數(如下):如果把sigmoid函數圖像畫出來,是如下的樣子:
Sigmoid Logistic Function
從函數圖上可以看出,函數y=g(z)在z=0的時候取值為1/2,而隨著z逐漸變小,函數值趨於0,z逐漸變大的同時函數值逐漸趨於1,而這正是一個概率的範圍。 所以我們定義線性回歸的預測函數為Y=WTX,那麼邏輯回歸的輸出Y= g(WTX),其中y=g(z)函數正是上述sigmoid函數(或者簡單叫做S形函數)。4 決策邊界
4.1 初識決策邊界
為了把不同類型的數據給分割開來,我們引入一個決策邊界的概念,它像一條「三八線」,把不同類型的數據分割開來
決策邊界由參數向量θ來確定,決策邊界不是訓練集的屬性,而是假設本身及其參數的屬性。只要我們給定了參數向量θ,決策邊界就確定了。
首先,我們來看看幾種常見的決策邊界類型,感受一下:它可能是這樣的
這樣的
甚至說這樣的
下面左圖是一個線性的決策邊界,右圖是非線性的決策邊界。
對於線性邊界的情況,邊界形式如下:
理論上說,只要我們的hθ(x)設計足夠合理,準確的說是g(θTx)中θTx足夠複雜,我們能在不同的情形下,擬合出不同的判定邊界,從而把不同的樣本點分隔開來。
4.2 具體舉例
這裡我們借用Andrew Ng教授的例子來講述決策邊界的問題。回到sigmoid函數,我們來探討一下兩種不同的情況
當$$h_ heta(x) ge 0.5$$也就是說$$ heta^Txge0$$時我們把y標記為1,相反,我們把y標記為0,以下是Andrew NG大神的筆記
4.3 代價函數
我們通過對判定邊界的說明,知道會有合適的參數θ使得θTx=0成為很好的分類判定邊界,那麼問題就來了,我們如何判定我們的參數θ是否合適,有多合適呢?更進一步,我們有沒有辦法去求得這樣的合適參數θ呢?
這就是我們要提到的代價函數與梯度下降了。所謂的代價函數Cost Function,其實是一種衡量我們在這組參數下預估的結果和實際結果差距的函數,比如說線性回歸的代價函數定義為:
當然我們可以和線性回歸類比得到一個代價函數,實際就是上述公式中hθ(x)取為邏輯回歸中的g(θTx),但是這會引發代價函數為「非凸」函數的問題,簡單一點說就是這個函數有很多個局部最低點,如下圖所示:
而我們希望我們的代價函數是一個如下圖所示,碗狀結構的凸函數,這樣我們演算法求解到局部最低點,就一定是全局最小值點。
因此,上述的Cost Function對於邏輯回歸是不可行的,我們需要其他形式的Cost Function來保證邏輯回歸的成本函數是凸函數。
我們跳過大量的數學推導,直接出結論了,我們找到了一個適合邏輯回歸的代價函數:
Andrew Ng老師解釋了一下這個代價函數的合理性,我們首先看當y=1的情況:
如果我們的類別y = 1, 而判定的hθ(x)=1,則Cost = 0,此時預測的值和真實的值完全相等,代價本該為0;而如果判斷hθ(x)→0,代價->∞,這很好地懲罰了最後的結果。
而對於y=0的情況,如下圖所示,也同樣合理:對數似然損失函數
下面我們說說梯度下降,梯度下降演算法是調整參數θ使得代價函數J(θ)取得最小值的最基本方法之一。從直觀上理解,就是我們在碗狀結構的凸函數上取一個初始值,然後挪動這個值一步步靠近最低點的過程,如下圖所示:我們先簡化一下邏輯回歸的代價函數:
從數學上理解,我們為了找到最小值點,就應該朝著下降速度最快的方向(導函數/偏導方向)邁進,每次邁進一小步,再看看此時的下降最快方向是哪,再朝著這個方向邁進,直至最低點。 用迭代公式表示出來的最小化J(θ)的梯度下降演算法如下:
邏輯回歸函數其實是一個一層的人工神經網路,如果需要訓練的參數數量不多,則所有訓練人工神經網路的方法都適用。同時它和@最大熵函數在函數值和形態上有著共性,訓練最大熵模型的IIS方法可以直接用於訓練邏輯回歸函數的參數
常用的收斂方法:
《數學之美》牛頓法,梯度下降法迭代演算法GIS和改進的迭代演算法IIS等Andrew Ng的介紹的其他收斂方法
常規步驟
Regression問題的常規步驟為:
1 尋找h函數(即hypothesis);2 構造J函數(損失函數);3 想辦法使得J函數最小並求得回歸參數(θ)構造損失函數
構造預測函數h
Logistic回歸雖然名字裡帶「回歸」,但是它實際上是一種分類方法,主要用於兩分類問題(即輸出只有兩種,分別代表兩個類別),所以利用了Logistic函數(或稱為Sigmoid函數),函數形式
Sigmoid 函數在有個很漂亮的「S」形,如下圖所示(引自維基百科):
構造預測函數為:
函數的值有特殊的含義,它表示結果取1的概率,因此對於輸入x分類結果為類別1和類別0的概率分別為:
帶入到這樣定義了的代價函數中時,我們得到的代價函數將是一個非凸函數(non-convex function)。
-log (取對數,因為對數是單調),方便計算
def sigmoid(inX) return 1.0/(1+exp(-inx))def loadDataSet() dataMat=[]; labelMat=[] fr = open(testSet.txt) for line in fr.readlines(): lineArr =line.strip().split()
邏輯回歸可以這麼應用:
- 《數學之美》的作者吳軍博士曾經作為資深研究院和副總裁分別任職於Google公司和騰訊公司。他指出目前Google 和騰訊的廣告系統在預估點擊率都採用了邏輯回歸函數。
- 尋找危險因素:尋找某一疾病的危險因素;根據危險因素預測某疾病發生的l概率,等等。例如,想探討胃癌發生的危險因素,可以選擇兩組人群,一組是胃癌組,一組是非胃癌組,兩組人群肯定有不同的體征和生活方式等。這裡的因變數就是是否胃癌,即「是」或「否」,自變數就可以包括很多了,例如年齡、性別、飲食習慣、幽門螺桿菌感染等。自變數既可以是連續的,也可以是分類的。
- 預測:根據模型,預測在不同的自變數情況下,發生某病或某種情況的概率有多大;
- 判別:實際上跟預測有些類似,也是根據模型,判斷某人屬於某病或屬於某種情況的概率有多大,也就是看一下這個人有多大的可能性是屬於某病
擴展閱讀
邏輯回歸常常用於分類,回歸一詞從何而來:
假設現在有一些數據點,我們用一條直線對這些點進行擬合(該線稱為最佳擬合直線),這個擬合過程就稱作回歸。利用Logistic回歸進行分類的主要思想是:根據現有數據對分類邊界線建立回歸公式,以此進行分類。這裡的「回歸」一詞源於最佳擬合,表示要找到最佳擬合參數集。
推薦閱讀:
※數據結構: B-Tree 簡介及插入
※時間複雜度和空間複雜度
※刷題的日常Day1--從尾到頭列印鏈表
※刷題的日常Day2--斐波那契數列
※刷題的日常Day1--重建二叉樹