機器學習

原始出處:http://sbp810050504.blog.51cto.com/2799422/1608064在《機器學習實戰》一書的第5章中講到了Logistic用於二分類問題。書中只是給出梯度上升演算法代碼,但是並沒有給出數學推導。故哪怕是簡單的幾行代碼,依然難以理解。對於Logistic回歸模型而言,需要讀者具有高等數學、線性代數、概率論和數理統計的基礎的數學基礎。高等數學部分能理解偏導數即可;線性代數部分能理解矩陣乘法及矩陣轉置即可;概率論和數理統計能理解條件概率及極大似然估計即可。有《高等代數》(浙大)、概率論與數理統計(浙大)、線性代數(同濟大學)三本數學足矣。Logistic回歸用於二分類問題,面對具體的二分類問題,比如明天是否會下雨。人們通常是估計,並沒有十足的把握。因此用概率來表示再適合不過了。Logistic本質上是一個基於條件概率的判別模型(DiscriminativeModel)。利用了Sigma函數值域在[0,1]這個特性。

函數圖像為:

通過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日召開 參展公司一覽(投資機遇)

TAG:學習 | 機器學習 | 機器 |