前幾章分別講了多元線性回歸的推理思路和求解過程(解析解求解和梯度下降求解),文章并不以代碼和公式推導過程為重點,目的是跟大家一起理解算法.前兩章的內容是學習算法的基礎,所以本章會在前兩章的基礎上討論邏輯回歸(logistics regression).邏輯回歸也屬于有監督機器學習.
之前我們了解到了多元線性回歸是用線性的關系來擬合一個事情的發生規律,找到這個規律的表達公式,將得到的數據帶入公式以用來實現預測的目的,我們習慣將這類預測未來的問題稱作回歸問題.機器學習中按照目的不同可以分為兩大類:回歸和分類.今天我們一起討論的邏輯回歸就可以用來完成分類任務.
本文將通過以下幾部分來講解邏輯回歸:
一.分類和回歸任務的區別
二.邏輯回歸不是回歸
三.如果是你,你要怎么做
四.把回歸函數掰彎
五.選定閾值
六.最大似然估計
七.求解交叉熵損失函數
一.分類和回歸任務的區別
我們可以按照任務的種類,將任務分為回歸任務和分類任務.那這兩者的區別是什么呢?按照較官方些的說法,輸入變量與輸出變量均為連續變量的預測問題是回歸問題,輸出變量為有限個離散變量的預測問題成為分類問題.
通俗一點講,我們要預測的結果是一個數,比如要通過一個人的飲食預測一個人的體重,體重的值可以有無限多個,有的人50kg,有的人51kg,在50和51之間也有無限多個數.這種預測結果是某一個確定數,而具體是哪個數有無限多種可能的問題,我們會訓練出一個模型,傳入參數后得到這個確定的數,這類問題我們稱為回歸問題.預測的這個變量(體重)因為有無限多種可能,在數軸上是連續的,所以我們稱這種變量為連續變量.
我們要預測一個人身體健康或者不健康,預測會得癌癥或者不會得癌癥,預測他是水瓶座,天蝎座還是射手座,這種結果只有幾個值或者多個值的問題,我們可以把每個值都當做一類,預測對象到底屬于哪一類.這樣的問題稱為分類問題.如果一個分類問題的結果只有兩個,比如'是'和'不是'兩個結果,我們把結果為'是'的樣例數據稱為'正例',講結果為'不是'的樣例數據稱為'負例',對應的,這種結果的變量稱為離散型變量.
二.邏輯回歸不是回歸
從名字來理解邏輯回歸.在邏輯回歸中,邏輯一詞是logistics [l?'d??st?ks]的音譯字,并不是因為這個算法是突出邏輯的特性.
至于回歸,我們前一段講到回歸任務是結果為連續型變量的任務,logistics regression是用來做分類任務的,為什么叫回歸呢?那我們是不是可以假設,邏輯回歸就是用回歸的辦法來做分類的呢.跟上思路.
三.如果是你,你要怎么做
假設剛剛的思路是正確的,邏輯回歸就是在用回歸的辦法做分類任務,那有什么辦法可以做到呢,此時我們就先考慮最簡單的二分類,結果是正例或者負例的任務.
按照多元線性回歸的思路,我們可以先對這個任務進行線性回歸,學習出這個事情結果的規律,比如根據人的飲食,作息,工作和生存環境等條件預測一個人'有'或者'沒有'得惡性腫瘤,可以先通過回歸任務來預測人體內腫瘤的大小,取一個平均值作為閾值,假如平均值為y,腫瘤大小超過y為惡心腫瘤,無腫瘤或大小小于y的,為非惡性.這樣通過線性回歸加設定閾值的辦法,就可以完成一個簡單的二分類任務.如下圖:
上圖中,紅色的x軸為腫瘤大小,粉色的線為回歸出的函數
預測腫瘤大小還是一個回歸問題,得到的結果(腫瘤的大小)也是一個連續型變量.通過設定閾值,就成功將回歸問題轉化為了分類問題.但是,這樣做還存在一個問題.
我們上面的假設,依賴于所有的腫瘤大小都不會特別離譜,如果有一個超大的腫瘤在我們的例子中,閾值就很難設定.加入還是取平均大小為閾值,則會出現下圖的情況:
從上邊的例子可以看出,使用線性的函數來擬合規律后取閾值的辦法是行不通的,行不通的原因在于擬合的函數太直,離群值(也叫異常值)對結果的影響過大,但是我們的整體思路是沒有錯的,錯的是用了太'直'的擬合函數,如果我們用來擬合的函數是非線性的,不這么直,是不是就好一些呢?
所以我們下面來做兩件事:
1-找到一個辦法解決掉回歸的函數嚴重受離群值影響的辦法.
2-選定一個閾值.
四:把回歸函數掰彎
沒錯,本小節用來解決上邊說的第一個問題.開玩笑了,無論如何我也不可能掰彎這個函數.我們能做的呢,就是換一個.原來的判別函數我們用線性的y =
公式中,e為歐拉常數(是常數,如果不知道,自行百度),Z就是我們熟悉的多元線性回歸中的
就像我們說多元線性回歸的判別函數為
sigmod函數的圖像如下:
該函數具有很強的魯棒性(魯棒是Robust的音譯,也就是健壯和強壯的意思),并且將函數的輸入范圍(∞,-∞)映射到了輸出的(0,1)之間且具有概率意義.具有概率意義是怎么理解呢:將一個樣本輸入到我們學習到的函數中,輸出0.7,意思就是這個樣本有70%的概率是正例,1-70%就是30%的概率為負例.
再次強調一下,如果你的數學功底很好,可以看一下我上邊分享的為什么是sigmod函數的連接,如果數學一般,我們這個時候沒有必要糾結為什么是sigmod,函數那么多為什么選他.學習到后邊你自然就理解了.
總結一下上邊所講:我們利用線性回歸的辦法來擬合然后設置閾值的辦法容易受到離群值的影響,sigmod函數可以有效的幫助我們解決這一個問題,所以我們只要在擬合的時候把
z=
函數形式表達:
P(y=0|w,x) = 1 – g(z)
P(y=1|w,x) = g(z)
P(正確) =
到這里,我們得到一個回歸函數,它不再像y=wT * x一樣受離群值影響,他的輸出結果是樣本預測為正例的概率(0到1之間的小數).我們接下來解決第二個問題:選定一個閾值.
五:選定閾值
選定閾值的意思就是,當我選閾值為0.5,那么小于0.5的一定是負例,哪怕他是0.49.此時我們判斷一個樣本為負例一定是準確的嗎?其實不一定,因為它還是有49%的概率為正利的.但是即便他是正例的概率為0.1,我們隨機選擇1w個樣本來做預測,還是會有接近100個預測它是負例結果它實際是正例的誤差.無論怎么選,誤差都是存在的.所以我們選定閾值的時候就是在選擇可以接受誤差的程度.
我們現在知道了sigmod函數預測結果為一個0到1之間的小數,選定閾值的第一反應,大多都是選0.5,其實實際工作中并不一定是0.5,閾值的設定往往是根據實際情況來判斷的.本小節我們只舉例讓大家理解為什么不完全是0.5,并不會有一個萬能的答案,都是根據實際工作情況來定的.
0到1之間的數閾值選作0.5當然是看著最舒服的,可是假設此時我們的業務是像前邊的例子一樣,做一個腫瘤的良性惡性判斷.選定閾值為0.5就意味著,如果一個患者得惡性腫瘤的概率為0.49,模型依舊認為他沒有患惡性腫瘤,結果就是造成了嚴重的醫療事故.此類情況我們應該將閾值設置的小一些.閾值設置的小,加入0.3,一個人患惡性腫瘤的概率超過0.3我們的算法就會報警,造成的結果就是這個人做一個全面檢查,比起醫療事故來講,顯然這個更容易接受.
第二種情況,加入我們用來識別驗證碼,輸出的概率為這個驗證碼識別正確的概率.此時我們大可以將概率設置的高一些.因為即便識別錯了又能如何,造成的結果就是在一個session時間段內重試一次.機器識別驗證碼就是一個不斷嘗試的過程,錯誤率本身就很高.
以上兩個例子可能不大準確,只做意會,你懂了就好. [此時我的表情無法描述]
到這里,邏輯回歸的由來我們就基本理清楚了,現在我們知道了邏輯回歸的判別函數就是
六.最大似然估計
此時我們想要找到一組w,使函數
P(正確) =
若想讓預測出的結果全部正確的概率最大,根據最大似然估計(多元線性回歸推理中有講過,此處不再贅述),就是所有樣本預測正確的概率相乘得到的P(總體正確)最大,此時我們讓
上述公式最大時公式中W的值就是我們要的最好的W.下面對公式進行求解.
我們知道,一個連乘的函數是不好計算的,我們可以通過兩邊同事取log的形式讓其變成連加.
得到的這個函數越大,證明我們得到的W就越好.因為在函數最優化的時候習慣讓一個函數越小越好,所以我們在前邊加一個負號.得到公式如下:
這個函數就是我們邏輯回歸(logistics regression)的損失函數,我們叫它交叉熵損失函數.
七.求解交叉熵損失函數
求解損失函數的辦法我們還是使用梯度下降,同樣在批量梯度下降與隨機梯度下降一節有詳細寫到,此處我們只做簡要概括.
求解步驟如下:
1-隨機一組W.
2-將W帶入交叉熵損失函數,讓得到的點沿著負梯度的方向移動.
3-循環第二步.
求解梯度部分同樣是對損失函數求偏導,過程如下:
交叉熵損失函數的梯度和最小二乘的梯度形式上完全相同,區別在于,此時的
PS:加一個總結:邏輯回歸為什么對切斜的數據特別敏感(正負例數據比例相差懸殊時預測效果不好)
首先從文章開頭部分舉例的兩個圖可以看到,使用線性模型進行分類第一個要面對的問題就是如何降低離群值的影響,而第二大問題就是,在正負例數據比例相差懸殊時預測效果不好.為什么會出現這種情況呢?原因來自于邏輯回歸交叉熵損失函數是通過最大似然估計來推導出的.
使用最大似然估計來推導損失函數,那無疑,我們得到的結果就是所有樣本被預測正確的最大概率.注意重點是我們得到的結果是預測正確率最大的結果,100個樣本預測正確90個和預測正確91個的兩組w,我們會選正確91個的這一組.那么,當我們的業務場景是來預測垃圾郵件,預測黃色圖片時,我們數據中99%的都是負例(不是垃圾郵件不是黃色圖片),如果有兩組w,第一組為所有的負例都預測正確,而正利預測錯誤,正確率為99%,第二組是正利預測正確了,但是負例只預測出了97個,正確率為98%.此時我們算法會認為第一組w是比較好的.但實際我們業務需要的是第二組,因為正例檢測結果才是業務的根本.
此時我們需要對數據進行欠采樣/重采樣來讓正負例保持一個差不多的平衡,或者使用樹型算法來做分類.一般樹型分類的算法對數據傾斜并不是很敏感,但我們在使用的時候還是要對數據進行欠采樣/重采樣來觀察結果是不是有變好.
到這里,邏輯回歸就講解完畢了.請大家幫忙勘誤,共同學習.感謝您的耐心閱讀.
下一篇:一文讀懂L-BFGS算法