前言
上期文章:「05」回歸的誘惑:一文讀懂線性回歸 中 , 我們介紹了線性回歸的原理,組成和優缺點,並探討了回歸的本質含義。在這一期,我們將從回歸開始,引出一個機器學習中最重要的任務——分類。
還記得我們上一節的課后題嗎?其實答案很簡單,任意一條線都可以把任意的數據點分為不同的類,也就是有無數個直線方程存在,這種解並沒有意義。這就引出了我們的主題——分類。對於分類問題來說,不同的數據必須分為不同的類別,這個類別,在機器學習中也叫作標簽(label)。只有知道了類別,才可以真正進行分類學習,這叫做監督學習。
因此,線性回歸的使用場景是回歸,而我們這一期的主題——邏輯回歸則是用於分類。關於分類和回歸,該如何理解它們的區別和聯系呢?往下看。
什么是回歸?
分類和回歸是兩個相關聯的概念,我們在上一篇文章講過,以前的一位生物學家高爾頓在研究父母和孩子身高的遺傳關系時,發現了一個直線方程,通過這個方程,他幾乎准確地擬合了被調查父母的平均身高 x 和 子女平均身高 y 之前的關系:
這個方程是什么意思呢?它代表父母身高每增加1個單位, 其成年子女的平均身高只增加0.516個單位,反映了一種“衰退”效應(“回歸”到正常人平均身高)。雖然之后的x與 y變量之間並不總是具有“衰退”(回歸)關系,但是為了紀念高爾頓這位偉大的統計學家,“回歸”這一名稱就保留了下來。
我們可以把回歸理解為關系的找尋:回歸分析是通過規定因變量和自變量來確定變量之間的因果關系,建立回歸模型,並根據實測數據來求解模型的各個參數,然后評價回歸模型是否能夠很好的擬合實測數據,如果能夠很好的擬合,則可以根據自變量作進一步預測,比如我們提到的廣告費用與產品銷售額的關系。
什么是分類?
所謂分類,簡單來說,就是根據文本的特征或屬性,划分到已有的類別中。從功能上看,分類問題就是預測數據所屬的類別,比如垃圾郵件檢測、客戶流失預測、情感分析、犬種檢測等。分類算法的基本功能是做預測。我們已知某個實體的具體特征,然后想判斷這個實體具體屬於哪一類,或者根據一些已知條件來估計感興趣的參數。比如:我們已知某個人存款金額是10000元,這個人沒有結婚,並且有一輛車,沒有固定住房,然后我們估計判斷這個人是否會涉嫌信用欺詐問題。這就是最典型的分類問題,預測的結果為離散值,當預測結果為連續值時,分類算法就退化為之前所說的的回歸模型。
二分類
我們先來看看什么是二分類:
給定不同種類數據點,二分類就是找到一條線,使得不同的數據點位於這條線的兩側。一般來說,只存在一條唯一的直線方程,也就是y = f(x),讓分類點之間的誤差距離最小,比較直觀的解法就是SVM,以后會談到。這里我們用下面這張圖舉個例子:
可以看到,圖中的2類數據分別是藍點和綠點。已經知道了這條直線方程,那如何把新出現的數據點根據數據類別的不同划分成不同的類?只需要判斷它是在直線的上面(紫色點)還是下面(綠色點)就行了。
多分類
那么,如果存在兩種以上的數據且混合分布在一起,要怎么划分呢?一條直線顯然已經無法划分了,需要多個直線/平面,甚至是曲線進行划分,這個時候的參數方程就不是直線方程了,而是更復雜的多次項方程。不過我們也可以用很多條直線來近似的擬合這種曲線。這里也涉及到機器學習的靈魂拷問:過擬合,在后面的一期文章,我們會單獨聊聊它,這里先按下不表。
所以,多分類問題其實可以看成二分類的擴展版,同樣待預測的label標簽只有一個,但是label標簽的取值可能有多種情況;直白來講就是每個實例的可能類別有K種(t1 ,t2 ,...tk ,k≥3):
上面的解釋只是一個直觀上的理解,現在給出嚴格的定義:分類,是在一群已經知道類別標簽的樣本中,訓練一種分類器,讓其能夠對某種未知的樣本進行分類。
分類算法屬於一種有監督的學習,而分類過程就是建立一種分類模型來描述預定的數據集,通過分析由屬性描述的數據庫元組來構造模型。分類的目的就是使用分類對新的數據集進行划分,其主要涉及分類規則的准確性、過擬合、矛盾划分的取舍等。分類算法分類效果如圖所示。
分類的應用場景
- 判斷郵件是否為垃圾郵件
- 判斷在線交易是否存在潛在風險
- 判斷腫瘤為良性還是惡性等等
回歸與分類
分類和回歸是如今機器學習中兩個不同的任務,而屬於分類算法的邏輯回歸,其命名有一定的歷史原因。這個方法最早由統計學家David Cox在他1958年的論文《二元序列中的回歸分析》(The regression analysis of binary sequences)中提出,當時人們對於回歸與分類的定義與今天有一定區別,只是將“回歸”這一名字沿用了。實際上,將邏輯回歸的公式進行整理,我們可以得到
所以,回歸算法,有時候是相對分類算法而言的,與我們想要預測的目標變量y的值類型有關。如果目標變量y是分類型變量,如預測用戶的性別(男、女),預測月季花的顏色(紅、白、黃……),預測是否患有肺癌(是、否),那我們就需要用分類算法去擬合訓練數據並做出預測;如果y是連續型變量,如預測用戶的收入(4千,2萬,10萬……),預測員工的通勤距離(500m,1km,2萬里……),預測患肺癌的概率(1%,50%,99%……),我們則需要用回歸模型。
聰明的你一定會發現,有時分類問題也可以轉化為回歸問題,例如剛剛舉例的肺癌預測,我們可以用回歸模型先預測出患肺癌的概率,然后再給定一個閾值,例如50%,概率值在50%以下的人划為沒有肺癌,50%以上則認為患有肺癌。
我們可以這么理解:
分類問題預測數據所屬的類別:比如垃圾郵件檢測、客戶流失預測、情感分析、犬種檢測等。
回歸問題根據先前觀察到的數據預測數值,比如銷量預測,房價預測、股價預測、身高體重預測等。
分類算法中,待分析的數據是一個一個處理的,分類的過程,就像給數據貼標簽的過程,來一個數據,我放到模型里,然后貼個標簽。聚類算法中,待分析的數據同時處理,來一堆數據過來,同時給分成幾小堆。因此,數據分類算法和回歸算法的最大區別是時效性問題。在已有數據模型的條件下,數據分類的效率往往比數據聚類的效率要高很多,因為對於分類來說,一次只是一個對象被處理,而對於回歸結果來說,每當加入一個新的分析對象,整個直線方程都有可能發生改變,因此很有必要重新對所有的待分析對象進行計算處理。
什么是邏輯回歸?
Logistic 回歸是機器學習從統計學領域借鑒過來的另一種技術。它是二分類問題的首選方法。像線性回歸一樣,Logistic 回歸的目的也是找到每個輸入變量的權重系數值。但不同的是,Logistic 回歸的輸出預測結果是通過一個叫作「logistic 函數」的非線性函數變換而來的。
邏輯回歸(Logistic Regression)就是一種分類分析,它有正向類和負向類,即:y ∈ {0, 1},其中 0 代表負向類,1 代表正向類。當面對一個分類問題:y = 0 或 1,可能出現的情況是: y > 1 或 < 0,就無法進行結果的歸納。邏輯(logistic) 函數的形狀看起來像一個大的「S」,所以也叫S回歸。
我們知道,線性回歸模型產生的預測值
是一個任意實值,於是,我們需將實值z 轉換為0到1之間的值. 最理想的是“單位階躍函數” (unit-step function)。假設我們有一個Z作為已經計算出來的實值,比如5,那么在經過S函數的映射后,它就是變成一個[0, 1]區間的小數,比如0.75,根據這個數我們可以判斷最終預測值y的類別
也就是將分類的閾值假設為0.5,如果Z大於0.5,就是正類,反之則是負類。這里0.75 > 5,所以輸出1。當然,閾值並非固定,可以設置為任一合理的數值。
但是,從上面的圖可以看到,單位階躍函數不連續,因此直接使用的效果並不好。我們能否找到能在一定程度上近似單位階躍函數的"替代函數" (surrogate function) ,並希望它單調可微呢?
答案是可以,這就是邏輯函數(logistic function) 。邏輯函數的公式如下:
它會把任何值轉換至 0-1 的區間內,這十分有用,因為和階躍函數一樣,我們可以把任何一個閾值應用於logistic 函數的輸出,從而得到 0-1 區間內的小數值(例如,將閾值設置為 0.5,則如果函數值小於 0.5,則輸出值為 1),並預測類別的值。得到的結果可以滿足:0 <= y <= 1,也可以說邏輯回歸是一種特殊的分類算法。
邏輯回歸是當前業界比較常用的機器學習方法,它與多元線性回歸同屬一個家族,即廣義線性模型。由於模型的學習方式,Logistic 回歸的預測結果也可以用作給定數據實例屬於類 0 或類 1 的概率,這對於需要為預測結果提供更多理論依據的問題非常有用。與線性回歸類似,當刪除與輸出變量無關以及彼此之間非常相似(相關)的屬性后,Logistic 回歸的效果更好。該模型學習速度快,對二分類問題十分有效。
邏輯回歸的本質
所有的分類問題都是一個優化問題,本質上是一個極小化問題,只是模型的代價函數構造不同,本質上分類問題可以理解為一種離散的回歸。
1. 邏輯回歸與線性回歸的關系
簡單來說,多元線性回歸是直接將特征值和其對應的概率進行相乘得到一個結果,邏輯回歸則是在這樣的結果上加上一個邏輯函數。以下圖為例,不同的類別(X和O)分布在水平的位置。如果直接使用線性回歸做擬合,學習到的直線只能保證各個點到線上的誤差最小,卻無法使兩種數據分到不同的一側。
邏輯回歸處理的是分類問題,線性回歸處理的是回歸問題,這是兩者的最本質的區別。邏輯回歸中,因變量取值是一個二元分布,模型學習得出的是
即給定自變量和超參數后,得到因變量的期望,並基於此期望來處理預測分類問題。而線性回歸中實際上求解的是
的一個近似,其中代表誤差項,我們使用這個近似項來處理回歸問題。在關於邏輯回歸的討論中,我們均認為y是因變量,而非,這便引出邏輯回歸與線性回歸最大的區別,即邏輯回歸中的因變量為離散的,而線性回歸中的因變量是連續的。
換句話說,邏輯回歸模型就是在擬合
廣義線性模型
我們說過,線性回歸是直接將特征值和其對應的概率進行相乘得到一個結果,邏輯回歸則是在這樣的結果上加上一個邏輯函數。在自變量x與超參數θ確定的情況下,邏輯回歸可以看作廣義線性模型(Generalized Linear Models)在因變量y服從二元分布時的一個特殊情況,而使用最小二乘法求解線性回歸時,我們認為因變量y服從正態分布。
當然,邏輯回歸和線性回歸也不乏相同之處,首先我們可以認為二者都使用了極大似然估計來對訓練樣本進行建模。線性回歸使用最小二乘法,實際上就是在自變量x與超參數θ確定,因變量y服從正態分布的假設下,使用極大似然估計的一個化簡;而邏輯回歸中通過對似然函數
的學習,得到最佳參數θ。另外,二者在求解超參數的過程中,都可以使用梯度下降的方法,這也是監督學習中一個常見的相似之處。
有接觸過深度學習基礎的同學知道,深度神經網絡是由N層具有激活函數的隱藏單元組成的,在這里我們可以把邏輯回歸看做一個1層的淺層神經網絡(這個引申自Lecun的調侃說法,嚴謹的同學請忽略~),激活函數就是Sigmoid函數,中間是線性映射,只學習一個隱藏層的參數。
為什么叫邏輯回歸?
logistic regression,在英語的術語里准確而簡潔,但是翻譯成中文則有多種譯法,例如:邏輯回歸(比較常見),對數幾率回歸(周志華),邏輯斯諦回歸(Understanding Machine Learning:From Theory to Algorithms中譯本)。之所以成為邏輯回歸,是因為Logit這個詞。
對數幾率函數,又叫做"Sigmoid 函數",它將z 值轉化為一個接近0 或1 的υ 值並且其輸出值在z 一0 附近變化很陡。把我們前面提到過的分類、線性回歸以及邏輯函數結合起來,就能得到如下公式:
這就是邏輯回歸的最終形態,也就是我們這篇文章的核心——邏輯回歸公式。
現在,讓我們用高中數學做一個簡單的變形,將公式兩邊同時取對數
因為在定義上,我們將 y 視為 x 為正例的概率,則1-y 就是數據點x為反例的概率(基本的概率論知識)。兩者的比值稱為幾率(odds),統計上指該事件發生與不發生的概率比值,若事件發生的概率為 p。則對數幾率:
將y視為類后驗概率估計,重寫公式有:
也就是說,輸出 Y=1 的對數幾率是由輸入 x 的線性函數表示的模型,這就是邏輯回歸模型。當
如果把一個事件的幾率(odds)定義為該事件發生的概率與該事件不發生的概率的比值
那么邏輯回歸可以看作是對於“y=1|x”這一事件的對數幾率,借助邏輯函數進行的線性回歸,於是“邏輯回歸”這一稱謂也就延續了下來。
為什么要用對數幾率?
對於二分類問題,
比如,樣本Xi屬於正例,則應有
顯然,只需對
我們思考一下,使用對數幾率的意義在哪?通過上述推導我們可以看到 Logistic 回歸實際上是使用線性回歸模型的預測值逼近分類任務真實標記的對數幾率,其優點有:
- 直接對分類的概率建模,無需實現假設數據分布,從而避免了假設分布不准確帶來的問題;
- 不僅可預測出類別,還能得到該預測的概率,這對一些利用概率輔助決策的任務很有用;
- 對數幾率函數是任意階可導的凸函數,有許多數值優化算法都可以求出最優解。
邏輯回歸的局限
1)對模型中自變量多重共線性較為敏感,例如兩個高度相關自變量同時放入模型,可能導致較弱的一個自變量回歸符號不符合預期,符號被扭轉。需要利用因子分析或者變量聚類分析等手段來選擇代表性的自變量,以減少候選變量之間的相關性;
2)預測結果呈“S”型,因此從log(odds)向概率轉化的過程是非線性的,在兩端隨着log(odds)值的變化,概率變化很小,邊際值太小,slope太小,而中間概率的變化很大,很敏感。 導致很多區間的變量變化對目標概率的影響沒有區分度,無法確定閾值。
例子說明
假如支付寶的算法團隊想要構建一個模型來決定是否通過用戶的花唄提額申請,它將預測客戶的還款是否會“違約”。
然后將Logistic函數應用於回歸分析,得到兩類的概率。該函數給出了事件發生和不發生概率的對數。最后,根據這兩類中較高的概率對變量進行分類。這里,邏輯回歸學習出來的也是一條直線,如果新的用戶通過計算,位於直線的右上,則有潛在違約風險,需要拒絕申請。反之則是安全的。此外,越遠離直線,則分類正確的置信度也越高。
課后習題
對於已知的三類數據,紅色點、藍色三角和綠色方塊,是否可以用邏輯回歸對其進行分類?如果可以,要怎樣使用?如果不行,又是因為什么?
結語
最后,下一篇文章將會從邏輯回歸的參數學習方式談起,講講極大似然估計和牛頓法~在這之前,可以先將實戰代碼自己實踐一下:「08」回歸的誘惑:深入淺出邏輯回歸(Python實戰篇)
參考文獻
- 《機器學習》周志華
- 《動手學深度學習》MXNet Community
- An Introduction toStatistical Learning with Applications in R
- 知乎:來!一起捋一捋機器學習分類算法
- 知乎:機器學習:分類算法(Classification)
- 百面機器學習,葫蘆娃