轉載請注明出處:http://www.cnblogs.com/ymingjingr/p/4271742.html
目錄
機器學習基石筆記1——在何時可以使用機器學習(1)
機器學習基石筆記2——在何時可以使用機器學習(2)
機器學習基石筆記3——在何時可以使用機器學習(3)(修改版)
機器學習基石筆記4——在何時可以使用機器學習(4)
機器學習基石筆記5——為什么機器可以學習(1)
機器學習基石筆記6——為什么機器可以學習(2)
機器學習基石筆記7——為什么機器可以學習(3)
機器學習基石筆記8——為什么機器可以學習(4)
機器學習基石筆記9——機器可以怎樣學習(1)
機器學習基石筆記10——機器可以怎樣學習(2)
機器學習基石筆記11——機器可以怎樣學習(3)
機器學習基石筆記12——機器可以怎樣學習(4)
機器學習基石筆記13——機器可以怎樣學得更好(1)
機器學習基石筆記14——機器可以怎樣學得更好(2)
機器學習基石筆記15——機器可以怎樣學得更好(3)
機器學習基石筆記16——機器可以怎樣學得更好(4)
二、Learning to Answer Yes/No
二元分類。
解決上一章提出的銀行發行信用卡的問題。
2.1 Perceptron Hypothesis Set
感知器的假設空間。
還是銀行發信用卡的例子,銀行可能掌握了用戶的各種屬性,如年齡,年薪,工作年限,負債情況等等,這些屬性可以作為上面提到的樣本輸入的向量屬性值。但是這樣還是無法進行機器學習,因為我們還需要另一個輸入,即假設空間H。假設空間該如何表示呢?本節提出了一種表示方式,這種學習的模型稱之為感知器(Perceptron)。
其實感知器的產生很早,算是第一代的單層神經網絡,這里就不多做介紹,在其他的讀書筆記中進行說明。
這種假設空間的思想就類似考試給的成績,對每一題給一個特定的分數,即權重,說白了就是給輸入向量的每個屬性乘以一個加權值,在設計一個及格線,即所謂的閾值或者叫門檻值(threshold),如果加權求和的分數大於這個及格線就叫及格了,即對應的輸出值為1,小於這個及格線成為不及格,對應的輸出值為-1。
其中h(x)∈H,如公式2-1所示。
(公式2-1)
其中sign括號中所包含的內容大於0時,取+1;小於0時,取-1。
此時可以對h(x)做一些數學上的簡化,注意這僅僅是一種數學表示方式的簡化,如公式2-2所示。
(公式2-2)
如上所示,將閾值的負數表示為權值向量中的一項,用 表示,而對應權值分量
的輸入分量則被默認為1,用
最終將公式簡化為兩個向量內積的形式,其中T表示轉置。
這里必須說明一個問題,就是不同h(x) 對應着不同的向量,即可以說假設空間H就是向量
的取值范圍。
這么描述還是很抽象,因此引入一種方式就是使用圖像(或者可以說是幾何)來更形象更具體的來說明以上函數。(這里說點題外話,由於二元函數和三元函數可以使用幾何圖像來一一對應,用幾何的方式更直觀的表示函數的意義,方便大家理解,這在以后的章節中會不斷使用)
為了理解的方便將輸入向量的維度限制為兩個,即h函數可以表示成公式2-3。
(公式2-3)
將輸入向量對應於一個二維平面上的點(如果向量的維度更高,對應於一個高維空間中的點)。
輸出y(在分類問題中又稱作標簽,label)使用○表示+1,×表示-1。
假設h對應一條條的直線(如果在輸入向量是高維空間的話,則對應於一個超平面)這里不止一條,不同的權值向量對應不同的直線,因為sign是以0為分界線的函數,所以可以設
,該式恰是一條直線的表示。
因此每條邊的一邊為正的,而另一邊為表示為負的。
最終得到的圖像如圖2-1所示。
圖2-1 感知器在維度為2時的幾何表示
因此這里將感知器作為一條二元線性分類器(linear ( binary) classifiers)。
2.2 Perceptron Learning Algorithm (PLA)
感知器學習算法。
在第一章中,我們介紹過一個機器學習模型由兩部分組成,而上一節僅僅介紹了它其中的一部分即假設空間H如何表示。
本節我們將更詳細的介紹感知器的算法A,即如何從假設空間中找到一個近似未知目標函數f的最好假設g(x)。
問題是,我們如何找到這個g(x)呢?
首先考慮,g(x)和目標函數f越接近越好,但問題是我們不知道f(如果知道了就不需要學習了)
但是我們知道些什么呢?知道的是樣本輸入x在f(x)作用下得到的標記y。
所以如果我們能使得g(x)在所有的樣本輸入中都能夠得到跟f函數作用過輸入得到的輸出一樣的話,我們認為這時的g是不錯的。(在后面的章節還會在這種思想的基礎上更深入的討論這一問題)
但是問題又來了,假設空間H的函數h(x)有無數種表示,即向量w有無數種取值。(如在二元輸入時,假設空間對於在二維平面上的直線,在那個空間中可以畫出無數條直線)
面對這無數多種情況,我們又該如何求解?
我們想到一個簡單的方式,就是一步一步的修正錯誤的分類,在二維平面中可以想象成一條初始的直線,在經過不斷的糾正它的錯誤(就是旋轉平移之類的)使得最終的結果可以達到希望的效果。
還要在重復上一節中已經得到的一個結論,在感知器模型中,每一個假設函數h都對應一個權值向量。因此我們要做的就是不斷修正這個權值向量使得最接近目標函數f。
下面來詳細介紹一下PLA。
首先我們在設置初始 (注意此處是向量不是向量的分量!),比如設置為0向量,然后使用訓練樣本來將權值向量修正的更接近目標函數f。其修正步驟如下:
將權值向量的修正次數表示為t,t=0,1,2,…
在何種情況下需要修正向量 呢?如公式2-4所示。
(公式2-4)
其中訓練樣本 ,
為在t次時使用的輸入向量
,而
為在t次時的標記量。
該公式2-4的意思就是在t次時,選擇的權值向量,有一個訓練樣本
使得在經過
(即
)假設計算的得到的標簽與f(x)得到的標簽不一致。
在這種情況下就需要對權值向量進行修改,使它符合條件。修改的公式如公式2-5所示。
(公式2-5)
從直覺上理解這個公式相對困難,我們還是將它化成一個幾何圖形,更准確的說法變成向量加減的形式去理解它,如圖2-2所示。
圖2-2 公式2-5的幾何解 a) b)
圖2-2a中是在本身標記為+1時,權值向量和輸入向量的內積為負數,對權值向量略作修改,加上一個標記y和輸入向量的乘積,得到一個新的權值向量,可以看出新的權值向量和輸入向量的相乘之后符合了標記的要求。
圖2-2b中是在本身標記為-1時,權值向量和輸入向量的內積為正數,對權值向量略作修改,加上一個標記y和輸入向量的乘積,得到一個新的權值向量,可以看出新的權值向量和輸入向量的相乘之后符合了標記的要求。
而非常巧合的是,只需要乘以一個該訓練樣本的標記就可以將這兩種情況合為一種情況如公式2-5所示。
如此這般的重復查找錯誤樣本和修改加權向量,直到再也找不到可以使公式2-4成立的樣本為止,此時得到的加權向量,即為我們想要的最終g。
描述了上面內容之后,你很可能有一個疑問就如何查找錯誤樣本點,或者如何確定沒有錯誤的點了。
一個簡單的方式就是將訓練樣本編號,從1到n,整個訓練樣本就有n個點。以按從1到n的順序不斷查找錯誤點,如果沒有錯就自動的用下一個樣本點繼續查找,當從1到n這n個樣本點都沒有產生錯誤時,算法即結束得到g。將這種方式的算法叫做Cyclic PLA。
這時候就又出來幾個新的問題,第一,這個算法一定會找到一個能使所有的樣本都不符合(即都被分對了類)的情況嗎?就是這個算法會不會停止?第二個問題這個算法找到的真的是最好的g嗎?看起來好像只是在訓練樣本中才符合這一性質,如果出現新的樣本的話又會如何呢?
第一個問題下一小節將進行介紹,而其他問題會在后面的章節中討論。
2.3 Guarantee of PLA
PLA算法可行的保障。
PLA算法只有在滿足訓練樣本是線性可分(linear separable)的情況下才可以停止。
什么是線性可分呢?簡單的說就是存在一條直線能將兩類樣本點完全分開。
如圖2-3所示。
圖2-3 線性可分與線性不可分
其中最左邊的為線性可分的訓練樣本,而右邊兩個圖形為線性不可分的兩種情況,這兩種情況會在后面的章節一一解釋。
我們需要證明在線性可分的情況下,權值向量在經過一段時間的修正會停止,即t次修正會有一個上界。
首先我們考慮是否每次修正都可以使得權值向量 變得更好,就是是否會更接近未知的目標函數所表示的向量。有了這個思路,我們先假設目標函數的權值向量為
,可以求解出兩個向量相似度的度量方式有很多,其中比較常用的一種方式就是求兩個向量的內積,於是我們對
和
做內積。其中T表示為停止時的次數。
直接使用這兩個向量做內積,其內積越大並不能代表這兩個向量越接近,因為向量本身的變長也可以導致這一現象。因此我們需要求解的是這兩個向量做歸一化(就是各自除以自身的L1范式得到單位向量)之后的內積,這時它倆的內積有了上界即為1,如公式2-6所示。
(公式2-6)
乍一看公式2-6完全無從下手,是未知目標向量,
是終止時的向量,也是一個未知向量,因此思路就是將其中一個未知量消除,消除
的可能性不大,因此選擇消除
在公式中的不確定性,如公式2-7所示是解決歸一化之前兩個向量內積的問題。
取所有的樣本中的最小乘積(因為
是在線性可分情況下的目標函數,所以所有的
必定大於等於0。)
進行迭代
又因為初始值設置為0向量,因此
(公式2-7)
除了不容易確定之外,
的L1范式
也不容易得出,如公式2-8是求解L1范式的不等式,其思想如公式2-7。
因為只有在犯錯的情況下才會進行改變,那什么時候是犯錯,就是在公式2-4成立的情況,即,該公式等價於
,因此如下
(公式2-8)
通過公式2-7和公式2-8可以將公式2-6寫成如公式2-9,如下式所示。
(公式2-9)
將公式2-9中的常數設置為C,該公式如公式2-10所示。
(公式2-10)
可以看出權值向量和目標函數內積會以的速度不斷的增長,但是這種增長不是沒有限制的,它最多只能等於1。
因此有以下結論,如公式2-11所示。
(公式2-11)
求解得到公式2-12的結論。
(公式2-12)
將公式2-12中的值分別使用簡單的數字符號代替,如公式2-13和公式2-14所示。
(公式2-13)
(公式2-14)
從公式2-12中就可以看出T是有上界,即在線性可分的情況下PLA算法最終會停止,找到一個最接近目標函數的假設函數g。
2.4 Non-Separable Data
線性不可分的數據。
上一節的闡述PLA這個算法一定會停下來這一結論,是建立在存在一個目標函數,可以將所有的數據點都線性分開這個假設的基礎之上。對於一堆復雜的數據,如何能確定它一定是線性可分的?比如一個PLA算法運行了很長時間仍然沒有停止,此時存在兩種可能性,一是該數據集是線性可分的,但是還沒有運行結束;另一種,壓根就不存在一條直線可以將數據集分開,就是壓根這個算法就不會終止。假如是后者又該如何處理?
首先還是要解釋下為什么會出現后者,此種情況出現的概率大嗎?
出現不可分的一種可能是從未知目標函數中產生的訓練樣本存在噪音(noise),如錄入樣本時有人工的錯誤等情況導致數據本身不正確,使得最終本可以線性可分的樣本集變得線性不可分了,如圖2-4所示。
圖2-4 加入噪音的機器學習流程圖
而噪音占整個數據集的比例一般不會太大,如圖2-5所示。這種情況下我們又該如何計算出最佳的假設g呢?
圖2-5 存在噪音時線性不可分的情況
其實圖2-5已經在前面的小節中出現過。
一種新的思路是找出犯錯最少的權值向量 ,如公式2-15所示。
(公式2-15)
其中表示當滿足條件時輸出1,否則為0。但是這個公式在數學上是NP難問題,我們無法直接求解,於是我們需要找出一種近似的算法來求解這個問題。
這里介紹一個叫pocket的算法,它的本質是一種貪心算法,做一簡單的介紹:
-
也是隨機的初始化一個權值向量
-
隨機的使用n個點中的一個點去發現是否有錯誤(此處與cyclic PLA使用的循環方式有所不同,不是按順序一個一個的查看是否符合條件,而是在n個點中隨機的抽取,這種方式可以增加其尋找最優解的速度)
-
和PLA一樣使用公式2-5進行修正.
-
如果有了修正,則計算出剛剛修正過的權值向量和上一個權值向量到底誰犯的錯誤比較少,將少的保留重復第2步到第4步的動作。
假如很長時間都沒有新的權值向量比當前的權值向量犯錯更少,則返回該向量作為函數g。