1. 程式人生 > >邏輯迴歸問題總結

邏輯迴歸問題總結

來源:http://www.cnblogs.com/ModifyRong/p/7739955.html    https://www.cnblogs.com/zhizhan/p/5038747.html

1.簡介

      邏輯迴歸是面試當中非常喜歡問到的一個機器學習演算法,因為表面上看邏輯迴歸形式上很簡單,很好掌握,但是一問起來就容易懵逼。所以在面試的時候給大家的第一個建議不要說自己精通邏輯迴歸,非常容易被問倒,從而減分。下面總結了一些平常我在作為面試官面試別人和被別人面試的時候,經常遇到的一些問題。

2.正式介紹

     如何凸顯你是一個對邏輯迴歸已經非常瞭解的人呢。那就是用一句話概括它!邏輯迴歸假設資料服從伯努利分佈,通過極大化似然函式的方法,運用梯度下降來求解引數,來達到將資料二分類的目的。

     這裡面其實包含了5個點 1:邏輯迴歸的假設,2:邏輯迴歸的損失函式,3:邏輯迴歸的求解方法,4:邏輯迴歸的目的,5:邏輯迴歸如何分類。這些問題是考核你對邏輯迴歸的基本瞭解。

  • 邏輯迴歸的基本假設
    • 任何的模型都是有自己的假設,在這個假設下模型才是適用的。邏輯迴歸的第一個基本假設是假設資料服從伯努利分佈。伯努利分佈有一個簡單的例子是拋硬幣,拋中為正面的概率是,拋中為負面的概率是.在邏輯迴歸這個模型裡面是假設  為樣本為正的概率,為樣本為負的概率。那麼整個模型可以描述為
    • 邏輯迴歸的第二個假設是假設樣本為正的概率是 
    • 所以邏輯迴歸的最終形式 
  • 邏輯迴歸的損失函式
    • 邏輯迴歸的損失函式是它的極大似然函式
  • 邏輯迴歸的求解方法
    • 由於該極大似然函式無法直接求解,我們一般通過對該函式進行梯度下降來不斷逼急最優解。在這個地方其實會有個加分的項,考察你對其他優化方法的瞭解。因為就梯度下降本身來看的話就有隨機梯度下降,批梯度下降,small batch 梯度下降三種方式,面試官可能會問這三種方式的優劣以及如何選擇最合適的梯度下降方式。
      • 簡單來說 批梯度下降會獲得全域性最優解,缺點是在更新每個引數的時候需要遍歷所有的資料,計算量會很大,並且會有很多的冗餘計算,導致的結果是當資料量大的時候,每個引數的更新都會很慢。
      • 隨機梯度下降是以高方差頻繁更新,優點是使得sgd會跳到新的和潛在更好的區域性最優解,缺點是使得收斂到區域性最優解的過程更加的複雜。
      • 小批量梯度下降結合了sgd和batch gd的優點,每次更新的時候使用n個樣本。減少了引數更新的次數,可以達到更加穩定收斂結果,一般在深度學習當中我們採用這種方法。
    • 其實這裡還有一個隱藏的更加深的加分項,看你了不瞭解諸如Adam,動量法等優化方法。因為上述方法其實還有兩個致命的問題。
      • 第一個是如何對模型選擇合適的學習率。自始至終保持同樣的學習率其實不太合適。因為一開始引數剛剛開始學習的時候,此時的引數和最優解隔的比較遠,需要保持一個較大的學習率儘快逼近最優解。但是學習到後面的時候,引數和最優解已經隔的比較近了,你還保持最初的學習率,容易越過最優點,在最優點附近來回振盪,通俗一點說,就很容易學過頭了,跑偏了。
      • 第二個是如何對引數選擇合適的學習率。在實踐中,對每個引數都保持的同樣的學習率也是很不合理的。有些引數更新頻繁,那麼學習率可以適當小一點。有些引數更新緩慢,那麼學習率就應該大一點。這裡我們不展開,有空我會專門出一個專題介紹。
  • 邏輯迴歸的目的
    • 該函式的目的便是將資料二分類,提高準確率。
  • 邏輯迴歸如何分類
    • 邏輯迴歸作為一個迴歸(也就是y值是連續的),如何應用到分類上去呢。y值確實是一個連續的變數。邏輯迴歸的做法是劃定一個閾值,y值大於這個閾值的是一類,y值小於這個閾值的是另外一類。閾值具體如何調整根據實際情況選擇。一般會選擇0.5做為閾值來劃分。

3.對邏輯迴歸的進一步提問

    邏輯迴歸雖然從形式上非常的簡單,但是其內涵是非常的豐富。有很多問題是可以進行思考的

  • 邏輯迴歸的損失函式為什麼要使用極大似然函式作為損失函式?
    • 損失函式一般有四種,平方損失函式,對數損失函式,HingeLoss0-1損失函式,絕對值損失函式。將極大似然函式取對數以後等同於對數損失函式。在邏輯迴歸這個模型下,對數損失函式的訓練求解引數的速度是比較快的。至於原因大家可以求出這個式子的梯度更新這個式子的更新速度只和,相關。和sigmod函式本身的梯度是無關的。這樣更新的速度是可以自始至終都比較的穩定。
    • 為什麼不選平方損失函式的呢?其一是因為如果你使用平方損失函式,你會發現梯度更新的速度和sigmod函式本身的梯度是很相關的。sigmod函式在它在定義域內的梯度都不大於0.25。這樣訓練會非常的慢。
  • 邏輯迴歸在訓練的過程當中,如果有很多的特徵高度相關或者說有一個特徵重複了100遍,會造成怎樣的影響?
  • 先說結論,如果在損失函式最終收斂的情況下,其實就算有很多特徵高度相關也不會影響分類器的效果。
  • 但是對特徵本身來說的話,假設只有一個特徵,在不考慮取樣的情況下,你現在將它重複100遍。訓練以後完以後,資料還是這麼多,但是這個特徵本身重複了100遍,實質上將原來的特徵分成了100份,每一個特徵都是原來特徵權重值的百分之一。
  • 如果在隨機取樣的情況下,其實訓練收斂完以後,還是可以認為這100個特徵和原來那一個特徵扮演的效果一樣,只是可能中間很多特徵的值正負相消了。
  • 為什麼我們還是會在訓練的過程當中將高度相關的特徵去掉?
    • 去掉高度相關的特徵會讓模型的可解釋性更好
    • 可以大大提高訓練的速度。如果模型當中有很多特徵高度相關的話,就算損失函式本身收斂了,但實際上引數是沒有收斂的,這樣會拉低訓練的速度。其次是特徵多了,本身就會增大訓練的時間。

4.邏輯迴歸的優缺點總結

    面試的時候,別人也經常會問到,你在使用邏輯迴歸的時候有哪些感受。覺得它有哪些優缺點。

     在這裡我們總結了邏輯迴歸應用到工業界當中一些優點:

  • 形式簡單,模型的可解釋性非常好。從特徵的權重可以看到不同的特徵對最後結果的影響,某個特徵的權重值比較高,那麼這個特徵最後對結果的影響會比較大。
  • 模型效果不錯。在工程上是可以接受的(作為baseline),如果特徵工程做的好,效果不會太差,並且特徵工程可以大家並行開發,大大加快開發的速度。
  • 訓練速度較快。分類的時候,計算量僅僅只和特徵的數目相關。並且邏輯迴歸的分散式優化sgd發展比較成熟,訓練的速度可以通過堆機器進一步提高,這樣我們可以在短時間內迭代好幾個版本的模型。
  • 資源佔用小,尤其是記憶體。因為只需要儲存各個維度的特徵值,。
  • 方便輸出結果調整。邏輯迴歸可以很方便的得到最後的分類結果,因為輸出的是每個樣本的概率分數,我們可以很容易的對這些概率分數進行cutoff,也就是劃分閾值(大於某個閾值的是一類,小於某個閾值的是一類)。

      但是邏輯迴歸本身也有許多的缺點:

  • 準確率並不是很高。因為形式非常的簡單(非常類似線性模型),很難去擬合數據的真實分佈。
  • 很難處理資料不平衡的問題。舉個例子:如果我們對於一個正負樣本非常不平衡的問題比如正負樣本比 10000:1.我們把所有樣本都預測為正也能使損失函式的值比較小。但是作為一個分類器,它對正負樣本的區分能力不會很好。
  • 處理非線性資料較麻煩。邏輯迴歸在不引入其他方法的情況下,只能處理線性可分的資料,或者進一步說,處理二分類的問題 。
  • 邏輯迴歸本身無法篩選特徵。有時候,我們會用gbdt來篩選特徵,然後再上邏輯迴歸。

LR與SVM:

首先是兩者的共同點:

1,LR和SVM都是分類演算法

2,如果不考慮核函式,LR和SVM都是線性分類演算法,即分類決策面都是線性的

3,LR和SVM都是有監督學習演算法

4,LR和SVM都是判別模型

模型作為統計學習的三要素之一(模型,策略,演算法)

模型:學習什麼樣的模型,模型就是所要學習的條件概率分佈或者說是決策函式,ps有監督學習和無監督學習都要訓練一個模型,然後泛化應用

策略:按照什麼樣的準則學習或者選擇最優的模型,包括損失函式和風險函式,損失函式是一次的好壞,風險函式是平均的好壞

常用的損失函式有0-1損失函式,平方損失函式,絕對值損失函式和對數損失函式,認為損失函式值越小,模型就越好

經驗風險就是模型關於聯合分佈的期望損失,經驗風險最小化(ERM)策略就認為經驗風險最小的模型為最優模型,最大似然估計就是經驗風險最小化的一個例子

結構風險最小化就等價於正則化,加入正則化項或者懲罰項,往往對訓練資料和測試資料都有很好的預測(避免對於訓練資料的過擬合問題,具有較好的泛化能力),貝葉斯估計中的最大後驗概率估計就是結構風險最小化的例子

演算法:也就是指學習模型的具體計算方法,統計學習通常歸結為最優化問題,如何保證找到全域性最優解,並使求解過程非常高效,就需要好的最優化演算法

判別模型主要有:K近鄰,感知機(SVM),決策樹,邏輯斯蒂迴歸(LR),最大熵模型,提升方法(boost)和條件隨機場

與判別模型對應的是生成模型,比如樸素貝葉斯,隱馬爾可夫模型

兩者的區別是生成模型由資料求得聯合概率分佈P(X, Y),然後求出條件概率分佈P(Y|X)作為預測

而判別模型由資料直接求得決策函式f(x),或者條件概率分佈P(Y|X)

判別模型的特點:直接面對預測,準確率高;可以簡化學習問題,對資料進行各種程度的抽象,定義特徵等

生成模型的特點:可以還原出聯合概率密度;收斂速度快,當樣本容量增加時也能很快的收斂;存在隱變數時,仍可以使用

兩者的不同點:

1,損失函式的不同,邏輯迴歸採用的是log loss(對數損失函式),svm採用的是hinge loss(合頁損失函式)

2,分類原理的不同,LR基於概率理論,通過極大似然估計的方法估計出引數的值,而SVM基於幾何間隔最大化原理,認為存在最大幾何間隔的分類面為最優分類面,從最大間隔出發,轉化為求對變數w和b的凸二次規劃問題

3,由於分類原理的不同,也導致了LR是所有樣本都有影響,而SVM只是少量樣本有影響的(支援向量),在支援向量外新增樣本點是沒有影響的

4,正因為LR受資料影響較大,所以在資料不同類別時,要先對資料做balancing

5,同樣的,由於SVM依賴資料表達的距離測度,所以要先對資料做normalization標準化

6,對於線性不可分的情況,SVM的核函式可以幫助將低維不可分的資料轉換到高維,變成線性可分的,而LR很少用到核函式(並不是沒有。。)假設我們在LR裡也運用核函式的原理,那麼每個樣本點都必須參與核計算,這帶來的計算複雜度是相當高的。所以,在具體應用時,LR很少運用核函式機制。​

7,SVM的損失函式就自帶正則(損失函式中的1/2||w||^2項),這就是為什麼SVM是結構風險最小化演算法的原因,而LR必須另外在損失函式上新增正則化

關於LR和SVM的選擇:

1. 如果Feature的數量很大,跟樣本數量差不多,這時候選用LR或者是Linear Kernel的SVM

2. 如果Feature的數量比較小,樣本數量一般,不算大也不算小,選用SVM+Gaussian Kernel

3. 如果Feature的數量比較小,而樣本數量很多,需要手工新增一些feature變成第一種情況