1. 程式人生 > >機器學習基石第二講:learn to answer yes/no

機器學習基石第二講:learn to answer yes/no

剛剛完成了機器學習基石的第二講,主要介紹了機器學習的定義,PLA演算法和pocket PLA演算法。下面將筆記整理在下面。

Perceptron Hypothesis Set

延續前面的信用卡發放問題。銀行已有的使用者資料可能包括使用者的年齡、年薪、工作時長、債務情況等特徵資訊,我們分別用x1x2,…,xd來表示,那麼對於每一個使用者都有一個向量來表示其資訊。我們為每一個特徵資訊分配一個權值wi,用來衡量該特徵資訊在此問題中的權重(例如,年薪對應的權值應該是一個正值,年薪越高越應該可以發放信用卡;債務對應的權值應該為一個負值,負債越多越不應該發放信用卡)。對於每一個使用者,我們計算他的加權分值,若該加權分值超過某一個給定的閾值(threshold),那銀行就給他信用卡;若未超過,則銀行不予發放。現在,我們知道了問題的輸入為一個個的d維向量,輸出為y:{+1(good), -1(bad)},要求的hypothesis是一個線性函式,如下所示:

h(x)=sign((i=1dwixi)threshold)

對於這樣的hypothesis,我們稱之為感知機(perceptron)。

2_1

我們將上式向量化,並將閾值加到前面的求和中,就變成了下面這樣:

2_2

此時,x和權值向量w均為d+1維。下面給出一個二維平面上的perceptron hypothesis的例子,我們的perceptron要做的就是將圖中的圈圈和叉叉給分開。

2_3

我們看到perceptron在二維平面上就是一條直線,其在更高維的空間呢應該以個超平面,所以我們說感知機是一個線性分類器。

下面是關於垃圾郵件分類的一個小測試:

2_4

perceptron Learning Algorithm(PLA)

現在我們知道了hypothesis是什麼樣的,那麼我們怎樣從H = all possible perceptrons中選擇一條最好的呢?怎麼去判斷hypothesis的好壞呢,我們的思路是用這個hypothesis去處理已有的資料集,該hypothesis對已有資料的處理結果越正確則越好。就是說,如果又一個hypothesis對銀行使用者資訊的處理結果與銀行之前作出的信用卡發放決定都一致的話,那這個hypothesis就是好的。

hypothesis有無窮多個,那我們怎麼去遍歷呢?我們的思路是從某一條hypothesis出發,不斷的去修正它,使其一次比一次變得好。修正的方法是這樣的:對於一個hypothesis,對應其由一個w

t,我們去找一個數據點(xn(t),yn(t)),有

sign(wTtxn(t))yn(t)
也就是說該hypothesis在資料點(xn(t),yn(t))處出現了錯誤,此時我們要對hypothesis做如下修正(至於為什麼要做這樣的修正,請看下圖右側的向量加減法的三角形表示):
wt+1wt+yn(t)xn(t)
持續進行這樣的修正,直至hypothesis在所有的資料點上均不出現錯誤(或者在儘可能少的點上有錯誤),知識我們就得到了一個比較好的hypotesis。

2_5

我們將這個演算法稱為PLA。下圖是PLA演算法的一個偽演算法(當然還有對資料點的其他遍歷方法):

2_6

然後視訊中作了一個修正hypothesis的演示,這裡省略。

前面我們說當hypothesis在任何資料點上都不犯錯誤的時候,演算法就會停下來,那演算法一定會停下來嗎?就算演算法會停下來,那我們最終得到的g肯定會很接近目標函式f嗎?這是本小節遺留的兩個問題,以後會介紹。

最後是小測試(對修正公式等號兩邊均左乘yn,再右乘xn就可以得出結果):

2_7

Guarantee of PLA

對於一個數據集中的兩類資料點(一組是圈圈,一組是叉叉),當存在一條直線(或超平面)能夠將圈圈和叉叉完全分開時,我們稱這樣的資料集時線性可分的(linear separable)。下圖中給出了線性可分資料集和非線性可分的資料集。

2_8

對於線性可分的資料集D,存在一個完美的wf對於任意地資料點(xn,yn)均滿足yn=sign(wTfxn)。我們假設wf就是目標f對應的引數,那我們來看一下每一次修正後的引數wt+1是不是比修正前的引數wt更接近wf呢?

2_9

通過上圖中的推導,我們得到了wTfwt+1>wTfwt,這說明了什麼呢?由向量內積的定義(向量a和向量b的內積為aTb=|a||b|cosα,其中α是a和b的夾角),我們知道wt+1wf的夾角αt+1wtwf的夾角αt要小(這裡我們取wt+1wt都是單位向量,下面再來說向量長度的問題),所以說wt+1wt更接近wf。這也就說明了我們對引數wt的修正是有效的,我們的hypothesis會越來越接近目標f。

我們說hypothesis只有在犯錯的時候才更新,才有

wt+1=wt<