機器學習常見算法之邏輯迴歸


首先要明確的是,邏輯迴歸是一個分類算法,不同於其他的迴歸(如線性迴歸),迴歸其實就是擬合。邏輯迴歸不是爲了去擬合數據,而是爲了給數據劃分邊界,進而根據邊界把數據分類。

一、概述

解決分類問題的算法有很多種,比如:k-近鄰算法,使用距離計算來實現分類;決策樹,通過構建直觀易懂的樹來實現分類;樸素貝葉斯,使用概率論構建分類器。
這裏我們要講的是Logistic迴歸,它是一種很常見的用來解決二元分類問題的迴歸方法,它主要是通過尋找最優參數來正確地分類原始數據。

1. Logistic Regression

1.1 線性迴歸

提到邏輯迴歸我們不得不提一下線性迴歸,邏輯迴歸和線性迴歸同屬於廣義線性模型,邏輯迴歸就是用線性迴歸模型的預測值去擬合真實標籤的的對數機率(一個事件的機率(odds)是指該事件發生的概率與不發生的概率之比,如果該事件發生的概率是P,那麼該事件的機率是P/1-P,對數機率就是log(P/1-P) 。
邏輯迴歸和線性迴歸本質上都是得到一條直線,不同的是,線性迴歸的直線是儘可能去擬合輸入變量X的分佈,使得訓練集中所有樣本點到直線的距離最短;而邏輯迴歸的直線是儘可能去擬合決策邊界,使得訓練集樣本中的樣本點儘可能分離開。因此,兩者的目的是不同的。

線性迴歸的方程爲:y = wx + b,此處,y爲因變量,x爲自變量。在機器學習中y是標籤,x是特徵。

1.2 sigmoid函數

我們想要的函數是能夠通過輸入值預測出一個類別,最好是能直接給出0 or 1,此時有個單位躍階函數可以很好的滿足此要求,如下圖所示:
在這裏插入圖片描述
單位階躍函數的問題在於:在0點位置該函數從0瞬間跳躍到1,這個瞬間跳躍過程很難處理(不好求導)。幸運的是,Sigmoid函數也有類似的性質,且數學上更容易處理。
Sigmoid函數公式:
在這裏插入圖片描述
其對x的導數可以用自身表示:
在這裏插入圖片描述
sigmoid函數的圖形形如S曲線:
在這裏插入圖片描述

1.3邏輯迴歸

通過將線性模型和Sigmoid函數結合,我們可以得到邏輯迴歸的公式:
在這裏插入圖片描述
這樣y就是(0,1)的取值。對式子進行變換,可得
在這裏插入圖片描述
這個其實就是一個對數機率公式。
二項Logistic迴歸:
在這裏插入圖片描述
多項Logistic迴歸:
在這裏插入圖片描述

2.LR的損失函數

在機器學習算法中,我們常常使用損失函數來衡量模型預測的好壞。損失函數,通俗講,就是衡量真實值和預測值之間差距的函數。而損失函數的自變量其實就是算法,函數值是誤差
所以,損失函數越小,模型就越好。在這裏,最小損失是0。 LR損失函數爲:
在這裏插入圖片描述
我們把這兩個損失函數綜合起來:
在這裏插入圖片描述
y就是標籤,分別取0,1
對於m個樣本,總的損失函數爲:
在這裏插入圖片描述
這個式子中,m是樣本數,y是標籤,取值0或1,i表示第i個樣本,p(x)表示預測的輸出。 不過當損失過於小的時候,也就是模型能夠擬合絕大部分的數據,這時候就容易出現過擬合。爲了防止過擬合,我們會引入正則化。

3. LR正則化

可能會問,模型能夠擬合絕大部分的數據不正是我們需要的嗎?我們看看以下三種決策邊界:在這裏插入圖片描述
這裏面哪個擬合得最好呢?當然是第三個了,幾乎把所有的都完美區分開了,我們看看它的函數十分複雜,特徵比另外兩個都多。但是,第三個真的是最佳的嗎?不是的。

這裏再引入一個新概念:Overfitting(過擬合)。什麼是過擬合呢?一個高階多項式可能很好地擬合訓練集,能夠幾乎擬合所有的訓練數據,但這函數太過龐大,變量太多,如果沒有足夠多的數據去約束這個變量過多的模型,就是過擬合。通俗地講過擬合就是在訓練集(已知數據)上表現非常好,但是對於未知的數據表現得非常糟糕。嗯,再通俗地講,比如在圖片識別中,識別大熊貓,正常特徵是黑眼圈等,結果,對於已有數據,它把一些大熊貓的特徵也算進去了,譬如耳朵上要有什麼圖案啊纔是大熊貓,結果這麼一來,對於訓練的大熊貓圖片當然可以非常好地表現,給一張新的大熊貓圖片,它耳朵上沒有那個圖案,結果就被錯誤分類了。所以過擬合就是,訓練集好,預測集糟糕。

所以啊,我們就得防止過擬合,如圖二那樣的,就表現得不錯,圖一擬合的不好,那叫欠擬合

所以,如何防止過擬合呢?

  1. 減少特徵 比如上圖第二個,就比第三個少很多特徵,函數表現上就簡單多了。

  2. 正則化

因爲有的時候我們不知道減少什麼特徵比較好,以及我們也不希望減特徵,特徵越多,越能使得訓練表現好嘛。正則化可以在不減少特徵的情況上,保持一個好的表現。

怎麼做到的呢?

簡單地說,就是在代價函數後面加一個小尾巴懲罰項,比如在線性迴歸函數中:
在這裏插入圖片描述
其中λ\lambda 稱爲懲罰項係數。小尾巴前面那項是我們原本的代價函數,現在加上了懲罰項後,我們要使得代價函數最小,則後面的小尾巴也必須要小,小尾巴小的話,那麼 θ\theta 就不能太大,如果θ\theta很小的話,那麼那個 θ\theta 所在的項就接近於0了,也就可以近似地看成沒有了那個特徵。

當然了,正則化還不僅僅只有這麼一個作用。下文會介紹到一個正規方程法,它有一個很大的缺陷,就是如果矩陣是奇異矩陣的話,那麼就不能使用了。而加上個正則項後,那就是非奇異的了,正規方程法就可以很好地使用了。

3.1 L1正則化

Lasso 迴歸,相當於爲模型添加了這樣一個先驗條件:ω\omega服從零均值拉普拉斯分佈。
拉普拉斯分佈:

3.2 L2正則化

Ridge 迴歸,相當於爲模型添加了這樣一個先驗條件: 服從零均值正態分佈。
正態分佈公式:
在這裏插入圖片描述

3.3 L1正則化和L2正則化對比

  1. 兩者引入的關於模型參數的先驗條件不一樣,L1是拉普拉斯分佈,L2是正態分佈
  2. L1偏向於使模型參數變得稀疏(但實際上並不那麼容易),L2偏向於使模型每一個參數都很小,但是更加稠密, 從而防止過擬合。
    爲什麼L1偏向於稀疏,L2偏向於稠密呢?
    看下面兩張圖,每一個圓表示loss的等高線,即在該圓上loss都是相同的,可以看到L1更容易在座標軸上達 到,而L2則容易在象限裏達到。
    在這裏插入圖片描述

二、梯度下降法

1. 梯度

那麼問題來了,什麼是梯度?梯度還要下降?
梯度,其實完全可以替換爲導數,梯度就是目標函數的導數。
既然這樣的話,梯度下降就是導數下降,其實就是用來求某個函數取到最小值時,此時所對應的自變量的取值。而這”某個函數“其實就是上文中提到的損失函數,直白點就是誤差函數。損失函數的自變量又是算法,梯度下降就是找讓誤差值最小時候算法取的參數。

怎麼求最小值?那必然是求導找導數爲零的點,在判斷這個點是不是最值點。這個方法其實是正規方程(Normal Equation),那爲什麼不用正規方程法而用梯度下降法呢?
在這裏插入圖片描述
總結一下,只要特徵變量的數目並不大,正規方程是一個很好的計算參數𝜃的替代方法。具體地說,只要特徵變量數量小於一萬,我通常使用標準方程法,而不使用梯度下降法。
隨着學習算法越來越複雜,例如,像邏輯迴歸算法, 我們會看到,實際上對於那些算法,並不能使用標準方程法。對於那些更復雜的學習算法, 我們將不得不仍然使用梯度下降法。因此,梯度下降法是一個非常有用的算法,可以用在有大量特徵變量的線性迴歸問題。

2. 梯度下降的直觀解釋

首先來看看梯度下降的一個直觀的解釋。比如我們在一座大山上的某處位置,由於我們不知道怎麼下山,於是決定 走一步算一步,也就是在每走到一個位置的時候,求解當前位置的梯度,沿着梯度的負方向,也就是當前最陡峭的 位置向下走一步,然後繼續求解當前位置梯度,向這一步所在位置沿着最陡峭最易下山的位置走一步。這樣一步步 的走下去,一直走到覺得我們已經到了山腳。當然這樣走下去,有可能我們不能走到山腳,而是到了某一個局部的 山峯低處。
從上面的解釋可以看出,梯度下降不一定能夠找到全局的最優解,有可能是一個局部最優解。當然,如果損失函數 是凸函數,梯度下降法得到的解就一定是全局最優解。
在這裏插入圖片描述

3. 梯度下降的詳細算法

4. 梯度下降的種類

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