上期文章:「05」迴歸的誘惑:一文讀懂線性迴歸 中 , 咱們介紹了線性迴歸的原理,組成和優缺點,並探討了迴歸的本質含義。在這一期,咱們將從迴歸開始,引出一個機器學習中最重要的任務——分類。git
還記得咱們上一節的課後題嗎?其實答案很簡單,任意一條線均可以把任意的數據點分爲不一樣的類,也就是有無數個直線方程存在,這種解並無意義。這就引出了咱們的主題——分類。對於分類問題來講,不一樣的數據必須分爲不一樣的類別,這個類別,在機器學習中也叫做標籤(label)。只有知道了類別,才能夠真正進行分類學習,這叫作監督學習。算法
所以,線性迴歸的使用場景是迴歸,而咱們這一期的主題——邏輯迴歸則是用於分類。關於分類和迴歸,該如何理解它們的區別和聯繫呢?往下看。數據庫
分類和迴歸是兩個相關聯的概念,咱們在上一篇文章講過,之前的一位生物學家高爾頓在研究父母和孩子身高的遺傳關係時,發現了一個直線方程,經過這個方程,他幾乎準確地擬合了被調查父母的平均身高 x 和 子女平均身高 y 以前的關係:安全
這個方程是什麼意思呢?它表明父母身高每增長1個單位, 其成年子女的平均身高只增長0.516個單位,反映了一種「衰退」效應(「迴歸」到正常人平均身高)。雖然以後的x與 y變量之間並不老是具備「衰退」(迴歸)關係,可是爲了記念高爾頓這位偉大的統計學家,「迴歸」這一名稱就保留了下來。網絡
咱們能夠把迴歸理解爲關係的找尋:迴歸分析是經過規定因變量和自變量來肯定變量之間的因果關係,創建迴歸模型,並根據實測數據來求解模型的各個參數,而後評價迴歸模型是否可以很好的擬合實測數據,若是可以很好的擬合,則能夠根據自變量做進一步預測,好比咱們提到的廣告費用與產品銷售額的關係。app
所謂分類,簡單來講,就是根據文本的特徵或屬性,劃分到已有的類別中。從功能上看,分類問題就是預測數據所屬的類別,好比垃圾郵件檢測、客戶流失預測、情感分析、犬種檢測等。分類算法的基本功能是作預測。咱們已知某個實體的具體特徵,而後想判斷這個實體具體屬於哪一類,或者根據一些已知條件來估計感興趣的參數。好比:咱們已知某我的存款金額是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實戰篇)