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