機器學習
函數圖像為:
通過sigma函數計算出最終結果,以0.5為分界線,最終結果大於0.5則屬於正類(類別值為1),反之屬於負類(類別值為0)。如果將上面的函數擴展到多維空間,並且加上參數,則函數變成:
其中X是變數,θ是參數,由於是多維,所以寫成了向量的形式,也可以看作矩陣。θT表示矩陣θ的轉置,即行向量變成列向量。θTX是矩陣乘法。(高數結合線性代數的知識)如果我們有合適的參數向量θ,以及樣本x,那麼對樣本x分類就可以通過上式計算出一個概率值來,如果概率值大於0.5,我們就說樣本是正類,否則樣本是負類。比如,對於「垃圾郵件判別問題」,對於給定的郵件(樣本),我們定義非垃圾郵件為正類,垃圾郵件為負類。我們通過計算出的概率值即可判定郵件是否是垃圾郵件。接下來問題來了,如何得到合適的參數向量θ呢?由於sigma函數的特性,我們可作出如下的假設:
上式即為在已知樣本X和參數θ的情況下,樣本X屬性正類(y=1)和負類(y=0)的條件概率。將兩個公式合併成一個,如下:
既然概率出來了,那麼最大似然估計也該出場了。假定樣本與樣本之間相互獨立,那麼整個樣本集生成的概率即為所有樣本生成概率的乘積:
其中,m為樣本的總數,y(i)表示第i個樣本的類別,x(i)表示第i個樣本,需要注意的是θ是多維向量,x(i)也是多維向量。(接下來從《概率論與數理統計》轉到《高等數學》)為了簡化問題,我們對整個表達式求對數,(將指數問題對數化是處理數學問題常見的方法):
上式是基本的對數變換,高中數學而已,沒有複雜的東西。滿足似然函數(θ)的最大的θ值即是我們需要求解的模型。梯度上升演算法如此複雜的函數,如何求滿足函數(θ)最大值的參數向量θ呢?如果問題簡化到一維,就很好辦了。假如需要求取函數:
的最大值。函數圖像如下:
函數的導數為:
所以x=1.5即取得函數的最大值1.25但是真實環境中的函數不會像上面這麼簡單,就算求出了函數的導數,也很難精確計算出函數的極值。此時我們就可以用迭代的方法來做。就像爬坡一樣,一點一點逼近極值。爬坡這個動作用數學公式表達即為:
其中,α為步長。求上面函數極值的Python代碼如下:123456789101112deff_prime(x_old):return-2*x_old+3defcal():x_old=0x_new=6eps=0.01presision=0.00001whileabs(x_new-x_old)>presision:x_old=x_newx_new=x_old+eps*f_prime(x_old)returnx_new結果為:1.50048回到Logistic Regression問題,我們同樣對函數求偏導。
這個公式有點複雜,但是依然只是基本的導數變換,待我細細拆解。這裡需要的數學知識無外乎兩點:函數的和、差、積、商求導法則和複合函數的求導法則(高等數學P88頁)。先看:
其中:
再由:
可得:
接下來就剩下第三部分:
(這個公式應該很容易理解,簡單的偏導公式)還有就是:
綜合三部分即得到:
因此,梯度迭代公式為:
結合本式再去理解《機器學習實戰》中的代碼就很簡單了。
推薦閱讀:
※我織的機器領,很平整。(可用於門襟)
※鬆緊邊(機器邊)起針...
※10年內機器人會讓你失業 敢來測試嗎?
※機器學習演算法實踐:標準與局部加權線性回歸
※世界機器人大會23日召開 參展公司一覽(投資機遇)