「07」迴歸的誘惑:深入淺出邏輯迴歸

前言

上期文章:「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 的線性函數表示的模型,這就是邏輯迴歸模型。當  的值越接近正無窮,  概率值也就越接近 1。因此邏輯迴歸的思路是,先擬合決策邊界(不侷限於線性,還可以是多項式),再建立這個邊界與分類的概率聯繫,從而得到二分類情況下的概率。

如果把一個事件的機率(odds)定義爲該事件發生的概率與該事件不發生的概率的比值

那麼邏輯迴歸可以看作是對於“y=1|x”這一事件的對數機率,藉助邏輯函數進行的線性迴歸,於是“邏輯迴歸”這一稱謂也就延續了下來。

 

爲什麼要用對數機率?

對於二分類問題, 樣本 Xi 屬於正例1的概率定義爲 P1 ,屬於負例0的概率定義爲 P2,由於事件獨立,我們知道P1 + P2 = 1。

比如,樣本Xi屬於正例,則應有 ,即:

 

顯然,只需對與1的關係進行建模,即可區分樣本的類別。

我們思考一下,使用對數機率的意義在哪?通過上述推導我們可以看到 Logistic 迴歸實際上是使用線性迴歸模型的預測值逼近分類任務真實標記的對數機率,其優點有:

  1. 直接對分類的概率建模,無需實現假設數據分佈,從而避免了假設分佈不準確帶來的問題;
  2. 不僅可預測出類別,還能得到該預測的概率,這對一些利用概率輔助決策的任務很有用;
  3. 對數機率函數是任意階可導的凸函數,有許多數值優化算法都可以求出最優解。

 

 

邏輯迴歸的侷限 

1)對模型中自變量多重共線性較爲敏感,例如兩個高度相關自變量同時放入模型,可能導致較弱的一個自變量回歸符號不符合預期,符號被扭轉。​需要利用因子分析或者變量聚類分析等手段來選擇代表性的自變量,以減少候選變量之間的相關性;

2)預測結果呈“S”型,因此從log(odds)向概率轉化的過程是非線性的,在兩端隨着​log(odds)值的變化,概率變化很小,邊際值太小,slope太小,而中間概率的變化很大,很敏感。 導致很多區間的變量變化對目標概率的影響沒有區分度,無法確定閾值

 

 

例子說明

假如支付寶的算法團隊想要構建一個模型來決定是否通過用戶的花唄提額申請,它將預測客戶的還款是否會“違約”。

首先對變量之間的關係進行線性迴歸以構建模型,我們將分類的閾值假設爲0.5。

然後將Logistic函數應用於迴歸分析,得到兩類的概率。該函數給出了事件發生和不發生概率的對數。最後,根據這兩類中較高的概率對變量進行分類。這裏,邏輯迴歸學習出來的也是一條直線,如果新的用戶通過計算,位於直線的右上,則有潛在違約風險,需要拒絕申請。反之則是安全的。此外,越遠離直線,則分類正確的置信度也越高。

 

課後習題

對於已知的三類數據,紅色點、藍色三角和綠色方塊,是否可以用邏輯迴歸對其進行分類?如果可以,要怎樣使用?如果不行,又是因爲什麼?

 

結語

最後,下一篇文章將會從邏輯迴歸的參數學習方式談起,講講極大似然估計和牛頓法~在這之前,可以先將實戰代碼自己實踐一下:「08」迴歸的誘惑:深入淺出邏輯迴歸(Python實戰篇)

 

參考文獻

  1. 《機器學習》周志華
  2. 《動手學深度學習》MXNet Community
  3.  An Introduction toStatistical Learning with Applications in R
  4.  知乎:來!一起捋一捋機器學習分類算法
  5.  知乎:機器學習:分類算法(Classification)
  6.  百面機器學習,葫蘆娃

 

發佈了329 篇原創文章 · 獲贊 1634 · 訪問量 201萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章