逻辑回归与正则化
在分類問題中,你要預測的變量 y 是離散的值,我們將學習一種叫做邏輯回歸 (Logistic Regression) 的算法,這是目前最流行使用最廣泛的一種學習算法。
在分類問題中,我們嘗試預測的是結果是否屬于某一個類(例如正確或錯誤)。分類問 題的例子有:判斷一封電子郵件是否是垃圾郵件;判斷一次金融交易是否是欺詐;之前我們 也談到了腫瘤分類問題的例子,區別一個腫瘤是惡性的還是良性的。
我們可以用邏輯回歸來解決分類問題
假說表示
我們引入一個新的模型,邏輯回歸,該模型的輸出變量范圍始終在 0 和 1 之間。 邏輯 回歸模型的假設是:hθ(x)=g(θTX)
X 代表特征向量
g 代表邏輯函數(logistic function)是一個常用的邏輯函數為 S 形函數(Sigmoid function),
公式為:g(z)=11+e?z
該函數的圖像為:
判定邊界
在邏輯回歸中,我們預測:
當 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 函數:
這樣就計算出這個代價函數,函數返回的第二個值是梯度值,梯度值應該是一個 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 不參與其中的任何一個正則化。
轉載于:https://www.cnblogs.com/jjx2013/p/6223566.html
總結
- 上一篇: std::string::assign
- 下一篇: Linux系统编程29:进程信号之什么是