Logistic regression

Logistic regression (邏輯迴歸)是當前業界比較常用的機器學習方法,用於估計某種事物的可能性。比如某用戶購買某商品的可能性,某病人患有某種疾病的可能性,以及某廣告被用戶點擊的可能性等。(注意這裏是:“可能性”,而非數學上的“概率”,logisitc迴歸的結果並非數學定義中的概率值,不可以直接當做概率值來用。該結果往往用於和其他特徵值加權求和,而非直接相乘)

  那麼它究竟是什麼樣的一個東西,又有哪些適用情況和不適用情況呢?


Figure 1. The logistic function, with z on the horizontal axis and ƒ(z) on the vertical axis

   邏輯迴歸是一個學習f:X− > Y 方程或者P(Y|X)的方法,這裏Y是離散取值的,X= < X1,X2...,Xn > 是任意一個向量其中每個變量離散或者連續取值。

 

  二、我的解釋

  只看公式太痛苦了,分開說一下就好。Logistic Regression 有三個主要組成部分:迴歸、線性迴歸、Logsitic方程。

  1)迴歸

   Logistic regression是線性迴歸的一種,線性迴歸是一種迴歸。那麼迴歸是蝦米呢?

   迴歸其實就是對已知公式的未知參數進行估計。大家可以簡單的理解爲,在給定訓練樣本點和已知的公式後,對於一個或多個未知參數,機器會自動枚舉參數的所有可能取值(對於多個參數要枚舉它們的不同組合),直到找到那個最符合樣本點分佈的參數(或參數組合)。(當然,實際運算有一些優化算法,肯定不會去枚舉的)

    注意,迴歸的前提是公式已知,否則迴歸無法進行。而現實生活中哪裏有已知的公式啊(G=m*g 也是牛頓被蘋果砸了腦袋之後碰巧想出來的不是?哈哈),因此迴歸中的公式基本都是數據分析人員通過看大量數據後猜測的(其實大多數是拍腦袋想出來的,嗯...)。根據這些公式的不同,迴歸分爲線性迴歸和非線性迴歸。線性迴歸中公式都是“一次”的(一元一次方程,二元一次方程...),而非線性則可以有各種形式(N元N次方程,log方程 等等)。具體的例子在線性迴歸中介紹吧。

 

  2)線性迴歸

  直接來一個最簡單的一元變量的例子:假設要找一個y和x之間的規律,其中x是鞋子價錢,y是鞋子的銷售量。(爲什麼要找這個規律呢?這樣的話可以幫助定價來賺更多的錢嘛,小學的應用題經常做的呵呵)。已知一些往年的銷售數據(x0,y0), (x1, y1), ... (xn, yn)做樣本集,  並假設它們滿足線性關係:y = a*x + b (其中a,b的具體取值還不確定),線性迴歸即根據往年數據找出最佳的a, b取值,使 y = a * x + b 在所有樣本集上誤差最小。 

   也許你會覺得---暈!這麼簡單! 這需要哪門子的迴歸呀!我自己在草紙上畫個xy座標系,點幾個點就能畫出來!(好吧,我承認我們初中時都被這樣的畫圖題折磨過)。事實上一元變量的確很直觀,但如果是多元就難以直觀的看出來了。比如說除了鞋子的價格外,鞋子的質量,廣告的投入,店鋪所在街區的人流量都會影響銷量,我們想得到這樣的公式:sell = a*x + b*y + c*z + d*zz + e。這個時候畫圖就畫不出來了,規律也十分難找,那麼交給線性迴歸去做就好。(線性迴歸具體是怎麼做的請參考相應文獻,都是一些數學公式,對程序員來說,我們就把它當成一條程序命令就好)。這就是線性迴歸算法的價值。

   需要注意的是,這裏線性迴歸能過獲得好效果的前提是y = a*x + b 至少從總體上是有道理的(因爲我們認爲鞋子越貴,賣的數量越少,越便宜賣的越多。另外鞋子質量、廣告投入、客流量等都有類似規律);但並不是所有類型的變量都適合用線性迴歸,比如說x不是鞋子的價格,而是鞋子的尺碼),那麼無論迴歸出什麼樣的(a,b),錯誤率都會極高(因爲事實上尺碼太大或尺碼太小都會減少銷量)。總之:如果我們的公式假設是錯的,任何迴歸都得不到好結果。

 

  3)Logistic方程

  上面我們的sell是一個具體的實數值,然而很多情況下,我們需要回歸產生一個類似概率值的0~1之間的數值(比如某一雙鞋子今天能否賣出去?或者某一個廣告能否被用戶點擊? 我們希望得到這個數值來幫助決策鞋子上不上架,以及廣告展不展示)。這個數值必須是0~1之間,但sell顯然不滿足這個區間要求。於是引入了Logistic方程,來做歸一化。這裏再次說明,該數值並不是數學中定義的概率值。那麼既然得到的並不是概率值,爲什麼我們還要費這個勁把數值歸一化爲0~1之間呢?歸一化的好處在於數值具備可比性和收斂的邊界,這樣當你在其上繼續運算時(比如你不僅僅是關心鞋子的銷量,而是要對鞋子賣出的可能、當地治安情況、當地運輸成本 等多個要素之間加權求和,用綜合的加和結果決策是否在此地開鞋店時),歸一化能夠保證此次得到的結果不會因爲邊界 太大/太小 導致 覆蓋其他feature 或 被其他feature覆蓋。(舉個極端的例子,如果鞋子銷量最低爲100,但最好時能賣無限多個,而當地治安狀況是用0~1之間的數值表述的,如果兩者直接求和治安狀況就完全被忽略了)這是用logistic迴歸而非直接線性迴歸的主要原因。到了這裏,也許你已經開始意識到,沒錯,Logistic Regression 就是一個被logistic方程歸一化後的線性迴歸,僅此而已。

   至於所以用logistic而不用其它,是因爲這種歸一化的方法往往比較合理(人家都說自己叫logistic了嘛 呵呵),能夠打壓過大和過小的結果(往往是噪音),以保證主流的結果不至於被忽視。具體的公式及圖形見本文的一、官方定義部分。其中f(X)就是我們上面例子中的sell的實數值了,而y就是得到的0~1之間的賣出可能性數值了。(本段 “可能性” 並非 “概率” ,感謝zjtchow同學在回覆中指出)

 

三、Logistic Regression的適用性

1) 可用於概率預測,也可用於分類。

       並不是所有的機器學習方法都可以做可能性概率預測(比如SVM就不行,它只能得到1或者-1)。可能性預測的好處是結果又可比性:比如我們得到不同廣告被點擊的可能性後,就可以展現點擊可能性最大的N個。這樣以來,哪怕得到的可能性都很高,或者可能性都很低,我們都能取最優的topN。當用於分類問題時,僅需要設定一個閾值即可,可能性高於閾值是一類,低於閾值是另一類。

2) 僅能用於線性問題

       只有在feature和target是線性關係時,才能用Logistic Regression(不像SVM那樣可以應對非線性問題)。這有兩點指導意義,一方面當預先知道模型非線性時,果斷不使用Logistic Regression; 另一方面,在使用Logistic Regression時注意選擇和target呈線性關係的feature。

3) 各feature之間不需要滿足條件獨立假設,但各個feature的貢獻是獨立計算的。

       邏輯迴歸不像樸素貝葉斯一樣需要滿足條件獨立假設(因爲它沒有求後驗概率)。但每個feature的貢獻是獨立計算的,即LR是不會自動幫你combine 不同的features產生新feature的 (時刻不能抱有這種幻想,那是決策樹,LSA, pLSA, LDA或者你自己要乾的事情)。舉個例子,如果你需要TF*IDF這樣的feature,就必須明確的給出來,若僅僅分別給出兩維 TF 和 IDF 是不夠的,那樣只會得到類似 a*TF + b*IDF 的結果,而不會有 c*TF*IDF 的效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章