邏輯迴歸的常見面試點總結

1.簡介面試

      邏輯迴歸是面試當中很是喜歡問到的一個機器學習算法,由於表面上看邏輯迴歸形式上很簡單,很好掌握,可是一問起來就容易懵逼。因此在面試的時候給你們的第一個建議不要說本身精通邏輯迴歸,很是容易被問倒,從而減分。下面總結了一些日常我在做爲面試官面試別人和被別人面試的時候,常常遇到的一些問題。算法

2.正式介紹機器學習

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

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

  • 邏輯迴歸的基本假設
    • 任何的模型都是有本身的假設,在這個假設下模型纔是適用的。邏輯迴歸的第一個基本假設是假設數據服從伯努利分佈。伯努利分佈有一個簡單的例子是拋硬幣,拋中爲正面的機率是$p$,拋中爲負面的機率是$1-p$.在邏輯迴歸這個模型裏面是假設 $h_\theta\left(x\right )$ 爲樣本爲正的機率,$1- h_\theta\left(x\right )$爲樣本爲負的機率。那麼整個模型能夠描述爲$$h_\theta\left(x;\theta \right )=p$$
    • 邏輯迴歸的第二個假設是假設樣本爲正的機率是 $$p=\frac{1}{1+e^{-\theta^{T} x}}$$
    • 因此邏輯迴歸的最終形式 $$h_\theta\left(x;\theta \right )=\frac{1}{1+e^{-\theta^{T} x}}$$
  • 邏輯迴歸的損失函數
    • 邏輯迴歸的損失函數是它的極大似然函數$$L_\theta\left(x\right )= \prod _{i=1}^{m}h_\theta(x^{i};\theta )^{y{i}}*(1-h_\theta(x^{i};\theta))^{1-y^{i}} $$
  • 邏輯迴歸的求解方法
    • 因爲該極大似然函數沒法直接求解,咱們通常經過對該函數進行梯度降低來不斷逼急最優解。在這個地方其實會有個加分的項,考察你對其餘優化方法的瞭解。由於就梯度降低自己來看的話就有隨機梯度降低,批梯度降低,small batch 梯度降低三種方式,面試官可能會問這三種方式的優劣以及如何選擇最合適的梯度降低方式。
      • 簡單來講 批梯度降低會得到全局最優解,缺點是在更新每一個參數的時候須要遍歷全部的數據,計算量會很大,而且會有不少的冗餘計算,致使的結果是當數據量大的時候,每一個參數的更新都會很慢。
      • 隨機梯度降低是以高方差頻繁更新,優勢是使得sgd會跳到新的和潛在更好的局部最優解,缺點是使得收斂到局部最優解的過程更加的複雜。
      • 小批量梯度降低結合了sgd和batch gd的優勢,每次更新的時候使用n個樣本。減小了參數更新的次數,能夠達到更加穩定收斂結果,通常在深度學習當中咱們採用這種方法。
    • 其實這裏還有一個隱藏的更加深的加分項,看你了不瞭解諸如Adam,動量法等優化方法。由於上述方法其實還有兩個致命的問題。
      • 第一個是如何對模型選擇合適的學習率。自始至終保持一樣的學習率其實不太合適。由於一開始參數剛剛開始學習的時候,此時的參數和最優解隔的比較遠,須要保持一個較大的學習率儘快逼近最優解。可是學習到後面的時候,參數和最優解已經隔的比較近了,你還保持最初的學習率,容易越過最優勢,在最優勢附近來回振盪,通俗一點說,就很容易學過頭了,跑偏了。
      • 第二個是如何對參數選擇合適的學習率。在實踐中,對每一個參數都保持的一樣的學習率也是很不合理的。有些參數更新頻繁,那麼學習率能夠適當小一點。有些參數更新緩慢,那麼學習率就應該大一點。這裏咱們不展開,有空我會專門出一個專題介紹。
  • 邏輯迴歸的目的
    • 該函數的目的即是將數據二分類,提升準確率。
  • 邏輯迴歸如何分類
    • 邏輯迴歸做爲一個迴歸(也就是y值是連續的),如何應用到分類上去呢。y值確實是一個連續的變量。邏輯迴歸的作法是劃定一個閾值,y值大於這個閾值的是一類,y值小於這個閾值的是另一類。閾值具體如何調整根據實際狀況選擇。通常會選擇0.5作爲閾值來劃分。

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

    邏輯迴歸雖然從形式上很是的簡單,可是其內涵是很是的豐富。有不少問題是能夠進行思考的優化

  • 邏輯迴歸的損失函數爲何要使用極大似然函數做爲損失函數?
    • 損失函數通常有四種,平方損失函數,對數損失函數,HingeLoss0-1損失函數,絕對值損失函數。將極大似然函數取對數之後等同於對數損失函數。在邏輯迴歸這個模型下,對數損失函數的訓練求解參數的速度是比較快的。至於緣由你們能夠求出這個式子的梯度更新$$\theta _j=\theta _j-\left ( y^{i} -h_\theta (x^{i};\theta ) \right )\ast x^{i}_j$$這個式子的更新速度只和$x^{i}_j$,$y^{i} $相關。和sigmod函數自己的梯度是無關的。這樣更新的速度是能夠自始至終都比較的穩定。
    • 爲何不選平方損失函數的呢?其一是由於若是你使用平方損失函數,你會發現梯度更新的速度和sigmod函數自己的梯度是很相關的。sigmod函數在它在定義域內的梯度都不大於0.25。這樣訓練會很是的慢。
  • 邏輯迴歸在訓練的過程中,若是有不少的特徵高度相關或者說有一個特徵重複了100遍,會形成怎樣的影響?
  • 先說結論,若是在損失函數最終收斂的狀況下,其實就算有不少特徵高度相關也不會影響分類器的效果。
  • 可是對特徵自己來講的話,假設只有一個特徵,在不考慮採樣的狀況下,你如今將它重複100遍。訓練之後完之後,數據仍是這麼多,可是這個特徵自己重複了100遍,實質上將原來的特徵分紅了100份,每個特徵都是原來特徵權重值的百分之一。
  • 若是在隨機採樣的狀況下,其實訓練收斂完之後,仍是能夠認爲這100個特徵和原來那一個特徵扮演的效果同樣,只是可能中間不少特徵的值正負相消了。
  • 爲何咱們仍是會在訓練的過程中將高度相關的特徵去掉?
    • 去掉高度相關的特徵會讓模型的可解釋性更好
    • 能夠大大提升訓練的速度。若是模型當中有不少特徵高度相關的話,就算損失函數自己收斂了,但實際上參數是沒有收斂的,這樣會拉低訓練的速度。其次是特徵多了,自己就會增大訓練的時間。

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

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

     在這裏咱們總結了邏輯迴歸應用到工業界當中一些優勢:資源

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

      可是邏輯迴歸自己也有許多的缺點:

  • 準確率並非很高。由於形式很是的簡單(很是相似線性模型),很難去擬合數據的真實分佈。
  • 很難處理數據不平衡的問題。舉個例子:若是咱們對於一個正負樣本很是不平衡的問題好比正負樣本比 10000:1.咱們把全部樣本都預測爲正也能使損失函數的值比較小。可是做爲一個分類器,它對正負樣本的區分能力不會很好。
  • 處理非線性數據較麻煩。邏輯迴歸在不引入其餘方法的狀況下,只能處理線性可分的數據,或者進一步說,處理二分類的問題 。
  • 邏輯迴歸自己沒法篩選特徵。有時候,咱們會用gbdt來篩選特徵,而後再上邏輯迴歸。

5.總結

在這篇博文裏面,我總結了在平常面試的過程中邏輯迴歸可能會遇到的問題,歡迎你們在下面留言和我進行交流,將大家面試遇到的關於邏輯迴歸的問題發出來,我會盡力去解答的。

相關文章
相關標籤/搜索