邏輯迴歸與正則化

在分類問題中,你要預測的變量 y 是離散的值,我們將學習一種叫做邏輯迴歸 (Logistic Regression) 的算法,這是目前最流行使用最廣泛的一種學習算法。

在分類問題中,我們嘗試預測的是結果是否屬於某一個類(例如正確或錯誤)。分類問 題的例子有:判斷一封電子郵件是否是垃圾郵件;判斷一次金融交易是否是欺詐;之前我們 也談到了腫瘤分類問題的例子,區別一個腫瘤是惡性的還是良性的。

我們可以用邏輯迴歸來解決分類問題

假說表示

我們引入一個新的模型,邏輯迴歸,該模型的輸出變量範圍始終在 0 和 1 之間。 邏輯 迴歸模型的假設是:hθ(x)=g(θTX)
X 代表特徵向量
g 代表邏輯函數(logistic function)是一個常用的邏輯函數爲 S 形函數(Sigmoid function),
公式爲:g(z)=11+ez

該函數的圖像爲:

判定邊界
在邏輯迴歸中,我們預測:
當 hθ 大於等於 0.5 時,預測 y=1
當 hθ 小於 0.5 時,預測 y=0 根據上面繪製出的 S 形函數圖像,我們知道當 z=0 時 g(z)=0.5
z>0 時 g(z)>0.5
z<0 時 g(z)<0.5
z=θTX ,即:

θTX 大於等於 0 時,預測 y=1
θTX 小於 0 時,預測 y=0

代價函數
在這段視頻中,我們要介紹如何擬合邏輯迴歸模型的參數θ。具體來說,我要定義用來 擬合參數的優化目標或者叫代價函數,這便是監督學習問題中的邏輯迴歸模型的擬合問題。

對於線性迴歸模型,我們定義的代價函數是所有模型誤差的平方和。理論上來說,我們 也可以對邏輯迴歸模型沿用這個定義,但是問題在於,當我們將邏輯迴歸
代入時, 這樣定義了的代價函數中時,我們得到的代價函數將是一個非凸函數(non-convex function)
這意味着我們的代價函數有許多局部最小值,這將影響梯度下降算法尋找全局最小值。

這樣構建的 Cost(hθ(x),y)函數的特點是:當實際的 y=1 且 hθ 也爲 1 時誤差爲 0,當 y=1 但 hθ 不爲 1 時誤差隨着 hθ 的變小而變大;當實際的 y=0 且 hθ 也爲 0 時代價爲 0,當 y=0 但 hθ 不爲 0 時誤差隨着 hθ 的變大而變大。

簡化的成本函數和梯度下降

在這段視頻中,我們將會找出一種稍微簡單一點的方法來寫代價函數,來替換我們現在 用的方法。同時我們還要弄清楚如何運用梯度下降法,來擬合出邏輯迴歸的參數。因此,聽 了這節課,你就應該知道如何實現一個完整的邏輯迴歸算法。

最小化代價函數的方法,是使用梯度下降法(gradient descent)。這是我們的代價函數:

現在,如果你把這個更新規則和我們之前用在線性迴歸上的進行比較的話,你會驚訝地 發現,這個式子正是我們用來做線性迴歸梯度下降的。
那麼,線性迴歸和邏輯迴歸是同一個算法嗎?要回答這個問題,我們要觀察邏輯迴歸看 看發生了哪些變化。實際上,假設的定義發生了變化。

對於線性迴歸假設函數: hθ(x)=ΘTX
而現在邏輯函數假設函數: hθ(x)=11+eθTX

高級優化

現在我們換個角度來看什麼是梯度下降,我們有個代價函數 J(θ),而我們想要使其最小 化,那麼我們需要做的是編寫代碼,當輸入參數 θ 時,它們會計算出兩樣東西:J(θ) 以及 J 等於 0、1 直到 n 時的偏導數項

假設我們已經完成了可以實現這兩件事的代碼,那麼梯度下降所做的就是反覆執行這些 更新。
另一種考慮梯度下降的思路是:我們需要寫出代碼來計算 J(θ) 和這些偏導數,然後把 這些插入到梯度下降中,然後它就可以爲我們最小化這個函數。
對於梯度下降來說,我認爲從技術上講,你實際並不需要編寫代碼來計算代價函數 J(θ)。 你只需要編寫代碼來計算導數項,但是,如果你希望代碼還要能夠監控這些 J(θ) 的收斂性.那麼我們就需要自己編寫代碼來計算代價函數 J(θ)和偏導數項

然而梯度下降並不是我們可以使用的唯一算法,還有其他一些算法,更高級、更復雜。

如果我們能用這些方法來計算代價函數 J(θ)和偏導數項兩個項的話,那麼這些算 j
法就是爲我們優化代價函數的不同方法,

  • 共軛梯度法
  • BFGS (變尺度法)
  • L-BFGS (限制變尺 度法)

就是其中一些更高級的優化算法,它們需要有一種方法來計算 J(θ),以及需要一種方 法計算導數項,然後使用比梯度下降更復雜的算法來最小化代價函數。這三種算法的具體細 節超出了本門課程的範疇。實際上你最後通常會花費很多天,或幾周時間研究這些算法,你 可以專門學一門課來 高數值計算能力,不過讓我來告訴你他們的一些特性:

這三種算法有許多優點:
一個是使用這其中任何一個算法,你通常不需要手動選擇學習率 α,所以對於這些算法 的一種思路是,給出計算導數項和代價函數的方法,你可以認爲算法有一個智能的內部循環, 而且,事實上,他們確實有一個智能的內部循環,稱爲線性搜索(line search)算法,它可以自 動嘗試不同的學習速率 α,並自動選擇一個好的學習速率 α,因此它甚至可以爲每次迭代選 擇不同的學習速率,那麼你就不需要自己選擇。這些算法實際上在做更復雜的事情,而不僅 僅是選擇一個好的學習率,所以它們往往最終收斂得遠遠快於梯度下降,這些算法實際上在 做更復雜的事情,不僅僅是選擇一個好的學習速率,所以它們往往最終比梯度下降收斂得快 多了,不過關於它們到底做什麼的詳細討論,已經超過了本門課程的範圍。

高級優化matlab實現

如果我們不知道最小值,但你想要代價函數找到這個最小值,是用比如梯度下降這些算
法,但最好是用比它更高級的算法,你要做的就是運行一個像這樣的 matlab 函數:

function [jVal, gradient]=costFunction(theta)
jVal=(theta(1)-5)^2+(theta(2)-5)^2; 
gradient=zeros(2,1); 
gradient(1)=2*(theta(1)-5); 
gradient(2)=2*(theta(2)-5);
end

這樣就計算出這個代價函數,函數返回的第二個值是梯度值,梯度值應該是一個 2×1 的向量,梯度向量的兩個元素對應這裏的兩個偏導數項,運行這個 costFunction 函數後,你 就可以調用高級的優化函數,這個函數叫 fminunc,它表示 Octave 裏無約束最小化函數。 調用它的方式如下

options=optimset('GradObj','on','MaxIter',100);
initialTheta=zeros(2,1);
[optTheta, functionVal, exitFlag]=fminunc(@costFunction, initialTheta, options);

你要設置幾個 options,這個 options 變量作爲一個數據結構可以存儲你想要的 options,
所以 GradObj 和 On,這裏設置梯度目標參數爲打開(on),這意味着你現在確實要給這個算
法 供一個梯度,然後設置最大迭代次數,比方說 100,我們給出一個 θ 的猜測初始值,它
是一個 2×1 的向量,那麼這個命令就調用 fminunc,這個@符號表示指向我們剛剛定義的
costFunction 函數的指針。如果你調用它,它就會使用衆多高級優化算法中的一個,當然你 也可以把它當成梯度下降,只不過它能自動選擇學習速率 α,你不需要自己來做。然後它會 嘗試使用這些高級的優化算法,就像加強版的梯度下降法,爲你找到最佳的 θ 值。

多類別分類:一對多

在本節視頻中,我們將談到如何使用邏輯迴歸 (logistic regression)來解決多類別分類問 題,具體來說,我想通過一個叫做”一對多” (one-vs-all) 的分類算法。

先看這樣一些例子。
假如說你現在需要一個學習算法能自動地將郵件歸類到不同的文件夾裏, 或者說可以自動地加上標籤,那麼,你也許需要一些不同的文件夾,或者不同的標籤來完成 這件事,來區分開來自工作的郵件、來自朋友的郵件、來自家人的郵件或者是有關興趣愛好 的郵件,那麼,我們就有了這樣一個分類問題:其類別有四個,分別用 y=1、y=2、y=3、y=4 來代表。

現在我們有一個訓練集,好比上圖表示的有三個類別,我們用三角形表示 y=1,方框表 示 y=2,叉叉表示 y=3。我們下面要做的就是使用一個訓練集,將其分成三個二元分類問題。 我們先從用三角形代表的類別 1 開始,實際上我們可以創建一個,新的”僞”訓練集,類 型 2 和類型 3 定爲負類,類型 1 設定爲正類,我們創建一個新的訓練集,如下圖所示的那
樣,我們要擬合出一個合適的分類器。
接下來我們可以把類型二設定爲正類,2,3爲負類,再將3設定爲正類,1,2爲負類

你現在知道了基本的挑選分類器的方法,選擇出哪一個分類器是可信度最高效果最好的, 那麼就可認爲得到一個正確的分類,無論 i 值是多少,我們都有最高的概率值,我們預測 y 就是那個值。這就是多類別分類問題,以及一對多的方法,通過這個小方法,你現在也可以 將邏輯迴歸分類器用在多類分類的問題上。

正則化(Regularization)

過度擬合
如果我們有非常多的特徵,我們通過學習得到的假設可能能夠非常好地適應訓練集(代 價函數可能幾乎爲 0),但是可能會不能推廣到新的數據。

下圖是一個迴歸問題的例子:

第一個模型是一個線性模型,欠擬合,不能很好地適應我們的訓練集;第三個模型是一 個四次方的模型,過於強調擬合原始數據,而丟失了算法的本質:預測新數據。我們可以看 出,若給出一個新的值使之預測,它將表現的很差,是過擬合,雖然能非常好地適應我們的 訓練集但在新輸入變量進行預測時可能會效果不好;而中間的模型似乎最合適。

就以多項式理解,x 的次數越高,擬合的越好,但相應的預測的能力就可能變差。 問題是,如果我們發現了過擬合問題,應該如何處理?
1. 丟棄一些不能幫助我們正確預測的特徵。可以是手工選擇保留哪些特徵,或者使用
一些模型選擇的算法來幫忙(例如 PCA)
2. 正則化。 保留所有的特徵,但是減少參數的大小(magnitude)。

代價函數

假如我們 有非常多的特徵,我們並不知道其中哪些特徵我們要懲罰,我們將對所有的特徵進行懲罰, 並且讓代價函數最優化的軟件來選擇這些懲罰的程度。這樣的結果是得到了一個較爲簡單的 能防止過擬合問題的假設:

如果選擇的正則化參數 λ 過大,則會把所有的參數都最小化了,導致模型變成 hθ(x)=θ0,也就是上圖中紅色直線所示的情況,造成欠擬合。
所以對於正則化,我們要取一個合理的λ的值,這樣才能更好的應用正則化。

正則化線性迴歸

對於線性迴歸的求解,我們之前推導了兩種學習算法:一種基於梯度下降,一種基於正 規方程。

正則化線性迴歸的代價函數爲:

我們同樣也可以利用正規方程來求解正則化線性迴歸模型,方法如下所示:

圖中的矩陣尺寸爲 (n+1)*(n+1)。

正則化的邏輯迴歸模型

針對邏輯迴歸問題,我們在之前的課程已經學習過兩種優化算法:我們首先學習了使用 梯度下降法來優化代價函數 J(θ),接下來學習了更高級的優化算法,這些高級優化算法需要 你自己設計代價函數 J(θ)。

注意:
1.雖然正則化的邏輯迴歸中的梯度下降和正則化的線性迴歸中的表達式看起來一樣,但 由於兩者的 h(x)不同所以還是有很大差別。
2. θ0 不參與其中的任何一個正則化。

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