1. 程式人生 > >二,機器學習演算法之邏輯迴歸(python實現)

二,機器學習演算法之邏輯迴歸(python實現)

邏輯迴歸(Logistic Regression)是目前流行最廣泛的演算法之一。
1. 何為邏輯迴歸:

       邏輯迴歸主要思想是根據現有的訓練集(資料)進行分類,判斷這些資料屬於哪一個類別,通俗來講,就是完成一件事的可能性有多大。所以邏輯迴歸是一種分類演算法,它的輸出值永遠在0~1之間,因此邏輯迴歸也可以被看做是一種概率統計。邏輯迴歸的例項:你和女朋友分手的可能性有多大,一個病人能否被治癒等問題。

 2. 問題一說了,邏輯函式運用於分類演算法,輸出值在0~1之間,那麼如何定義一個假設函式使之滿足條件?

    滿足這樣條件的函式我們稱之為Sigmoid函式,邏輯迴歸模型的假設是:hθ(x)=g(θT

X)。其中。該函式影象為:   既有hθ(x) 函式的值有特殊的含義,它表示結果取 1 的概率,因此對於輸入 x 分類結果為類別 1 和類別 0 的概率分別為:

3.如何確定最佳迴歸係數:

   問題2我們選擇了sigmoid函式,可以用sigmoid函式來預測輸入的其他資料最後的分類情況。通過讓h(x)不斷接近資料集中實際的值,來選擇最佳迴歸係數,從而達到最佳的分類效果。

如圖,給出幾組樣例資料前面兩組為輸入資料X1,X2。最後一組為分類情況y,基於這樣的資料訓練集 我們就可以利用sigmoid函式來預測其他資料的分類結果。

4.sigmoid函式確定後,那麼如何擬合邏輯迴歸模型中的引數θ,使得迴歸係數最佳?

我們定義用來擬合引數的優化目標或者代價函式,解決的就是邏輯迴歸中的擬合問題。由此可以構造代價函式(Cost Function),,其中,因此邏輯迴歸的代價函式為:。那麼問題來了,Cost函式和J( θ)是如何得到的呢?? 這裡要用到最大似然估計法來推導。

下面介紹詳細推導過程:

問題2中將最後概率公式組合得到:,取似然函式。下面對似然函式取對數:得到最大似然估計l(θ),最大似然估計要求求得l(θ)取最大值時的θ值,由此可以用梯度上升法來求解。但,是!機器學習課程中斯坦福大學教授吳恩達的課程中將J(θ)取為,在l(θ)前乘了一個負數-1/m,所以J(θ)取最小值時θ值為最佳。但是如今主流的做法時按照梯度上升法來求最大值θ

值。方法套路都一樣....

5.為了得到l(θ)取最大值時的θ值(即J(θ)取最小值),下面介紹梯度上升法演算法:

這裡說明一下:梯度上升法用來求函式的最大值,而梯度下降法用來求函式的最小值。因此這裡對J(θ)取最小值時採用梯度下降(如果對l(θ)取最大值用梯度上升),本質都是一樣。

首先,更新迴歸係數:,其中 阿爾法為學習率(後面會詳細講解阿爾法的選擇)。下面對J(θ)求偏導:


其中hθ(x)=g(θTX) 。因此更新的迴歸係數可以重新寫成 學習率 α 為常量,一般將1/m省略,得到。由此可見採用梯度上升法和梯度下降法最後的效果是完全一樣的。

6.梯度下降演算法的改進:隨機梯度下降演算法(stochastic gradient descent)

雖然梯度下降演算法能夠較好的找到θ值使得迴歸係數最佳,但由於迭代次數過多 當訓練集過多時,此方法就顯得效率頗低,因此需要一個更高效的演算法來解決。改進的方法是一次僅用一個樣本點的迴歸誤差來更新迴歸係數,即隨機梯度下降演算法。

隨機梯度上升演算法虛擬碼如下:

每個迴歸係數初始化為1; 對資料中每個樣本:
計算整個資料集的梯度;
使用alpha * gradient 來更新迴歸係數的值(有可能是向量);
返回迴歸係數。


以上就是機器學習邏輯迴歸演算法的講解,具體程式碼python實現,見附件