天天看點

機器學習之——判定邊界和邏輯回歸模型的代價函數

判定邊界(decision boundary)

上一次我們讨論了一個新的模型——邏輯回歸模型(logistic regression),在邏輯回歸中,我們預測:

當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

又有:

機器學習之——判定邊界和邏輯回歸模型的代價函數

是以

機器學習之——判定邊界和邏輯回歸模型的代價函數

以上,為我們預知的邏輯回歸的部分内容。好,現在假設我們有一個模型:

機器學習之——判定邊界和邏輯回歸模型的代價函數

 并且參數ø是向量 :[-3 1 1]。那麼當-3+x1+x2大于等于0,即x1+x2大于等于3時,模型将預測 y=1。

我們可以繪制出來x1+x2=3,這條線便是我們模型的分界線,也稱之為判定邊界(decision boundary),将預測為1的區域和預測為0的區域分隔開。

機器學習之——判定邊界和邏輯回歸模型的代價函數

假設我們的資料呈現出如下圖的分布情況,那麼我們的模型是什麼樣才能适合這些資料呢?

機器學習之——判定邊界和邏輯回歸模型的代價函數

如上圖,函數圖像為一個圓,圓點在原點且半徑為1,這樣一條曲線來分隔開了 y=1 和 y=0 的區域,是以我們需要的是一個二次方特征:

機器學習之——判定邊界和邏輯回歸模型的代價函數

假設參數為 [-1  0  0  1  1],則我們得到的判定邊界恰好是圓點在原點并且半徑為1的圓形。

我們可以使用非常複雜的模型來适應非常複雜形狀的判定邊界。

邏輯回歸模型的代價函數(cost function)

對于線性回歸模型,我們定義的代價函數是所有模型誤差的平方和。理論上講,我們也可以沿用這個定義來對邏輯回歸模型使用,但是問題在于,當我們将:

機器學習之——判定邊界和邏輯回歸模型的代價函數

代入到這樣定義的代價函數中時,我們得到的代價函數将會是一個非凸函數(non-covex function)。

機器學習之——判定邊界和邏輯回歸模型的代價函數

這意味着,我們的代價函數将會有許多的局部最小值,這就會影響到梯度下降算法去找尋全局最小值。

是以,我們重新定義邏輯回歸的代價函數為:

機器學習之——判定邊界和邏輯回歸模型的代價函數

其中,cost(hø(x(i), y(i))) 是我們定義的一個代價函數疊代形式,具體表示如下:

機器學習之——判定邊界和邏輯回歸模型的代價函數

hø(x) 與 cost(hø(x),y)之間的關系是如下圖所示:

機器學習之——判定邊界和邏輯回歸模型的代價函數

通過這樣建構的cost(hø(x), y)函數的特點是:

當實際的 y=1 且 hø=1 時,誤差為0;當  y=1 但 hø != 1時,誤差随hø的變小而變大;

當實際的 y=0 且 hø=0 時,誤差代價為0;當 y=0 但 hø != 0 時,誤差随hø的變大而變大。

将建構的cost(hø(x), y) 進行一個簡化,可以得到如下簡化公式:

機器學習之——判定邊界和邏輯回歸模型的代價函數

這個簡化其實是對上面cost(hø(x), y) 的兩種表達式的一次性結合。

将簡化代入到代價函數,得到:

機器學習之——判定邊界和邏輯回歸模型的代價函數

這便是邏輯回歸模型的代價函數了。

在得到這樣的一個代價函數之後,我們便可以使用梯度下降算法(gradient descent)來求得能夠使代價函數最小的參數了。

梯度下降算法:

機器學習之——判定邊界和邏輯回歸模型的代價函數

對此求導,得到:

機器學習之——判定邊界和邏輯回歸模型的代價函數

*注:雖然得到的梯度下降算法,表面上看上去和線性回歸的梯度下降算法一樣,但是這裡的hø(x) = g(øtx)與線性回歸不同,是以實際上是不一樣的。另外,在運作梯度下降算法之前,對特征進行特征縮放(features scaling)也是非常必要的。

一些梯度下降算法之外的選擇:

除了梯度下降算法之外,還有一些常被用來使代價函數最小的算法,這些算法更加複雜和優秀,而且通常情況下,不需要人工選擇學習速率,通常也比梯度下降算法更加快速。舉一些例子:共轭梯度法(conjugate gradient),局部優化法(broyden

fletcher goldfarb shann, bfgs)和有限記憶體局部優化法(lbfgs)。這些算法更加複雜也更加優秀,如果感興趣我們可以以後再繼續讨論。

在matlab或octave中,有一個最小值優化函數,fminunc。使用時,我們需要提供代價函數和每個參數的求導,這裡給大家舉一個例子:

*ps :關于機器學習相關算法的matlab或octave代碼,我上傳到了我的coding.net項目中,有需要的童鞋可以聯系我。

繼續閱讀