【機(jī)器學(xué)習(xí)】算法原理詳細(xì)推導(dǎo)與實(shí)現(xiàn)(四):支持向量機(jī)(上)
在之前的文章中薄货,包括線性回歸和邏輯回歸螃征,都是以線性分界線進(jìn)行分割劃分種類的碎绎。而本次介紹一種很強(qiáng)的分類器【支持向量機(jī)】蝇狼,它適用于線性和非線性分界線的分類方法阅畴。
函數(shù)間隔概念
為了更好的理解非線性分界線,區(qū)別兩種分界線對(duì)于分類的直觀理解迅耘,第一種直觀理解需要考慮 logistic
回歸贱枣,我們用一個(gè) logistic
回歸函數(shù)表示當(dāng) 時(shí)概率表示為 :
當(dāng) 時(shí),即
時(shí)
颤专;同理當(dāng)
時(shí)纽哥,即
時(shí)
⊙回顧
logistic
回歸的圖像如下所示:
由上圖可以看出:如果 時(shí)昵仅,那么可以相當(dāng)確定的預(yù)測(cè)
缓熟;如果
時(shí)累魔,那么可以相當(dāng)確定的預(yù)測(cè)
當(dāng)我們根據(jù)這樣的樣本擬合logistic
回歸得出分類器時(shí),這樣的分類器是良好的够滑。即對(duì)于所有的 垦写,如果
,那么
彰触;如果
梯投,那么
。換句話說况毅,如果我們根據(jù)訓(xùn)練集找到了合適的參數(shù)
分蓖,那么我們的學(xué)習(xí)算法不僅會(huì)保證分類結(jié)果正確,更會(huì)進(jìn)一步的保證對(duì)分類結(jié)果的 確定性尔许。
假設(shè)訓(xùn)練集都是線性可分隔的么鹤,即一定有一條直線可以將訓(xùn)練集分開,假設(shè) 代表中間那條分隔線味廊,使得正樣本和負(fù)樣本到這條線的距離最大蒸甜,即這條線是最優(yōu)的分隔線:
考慮上面3個(gè)點(diǎn) A 棠耕、B和C。從圖中我們可以確定A是×類別的柠新,然而C我們是不太確定的窍荧,B還算能夠確定。logistic
回歸強(qiáng)調(diào)所有的點(diǎn)盡可能的遠(yuǎn)離中間那條線即可恨憎,由此可能造成如上所示蕊退,點(diǎn)C可能屬于o類別也可能屬于×類別,所以我們這里希望找到一個(gè)分隔線憔恳,使其所有的分類結(jié)果有足夠的 確定性咕痛,這就是logistic
回歸和支持向量機(jī)的不同點(diǎn)。
間隔器
函數(shù)間隔
支持向量機(jī)的符號(hào)和logistic
回歸的符號(hào)有點(diǎn)差別喇嘱。支持向量機(jī)的取值范圍是 茉贡,而
logistic
回歸的取值范圍是
logistic
回歸的假設(shè)函數(shù)為:
其中這里假設(shè) 。而支持向量機(jī)假設(shè)
者铜,即假設(shè)函數(shù)為:
即為:
將其假設(shè)函數(shù)映射到 上:
給定一個(gè)訓(xùn)練樣本 腔丧,那么定義支持向量機(jī)的間隔函數(shù)為:
對(duì)于這個(gè)式子的理解是:
如果
,為了獲得較大的函數(shù)間隔作烟,你需要令
取得較大值愉粤,即
,得到的
是一個(gè)大正數(shù)
如果拿撩,為了獲得較大的函數(shù)間隔衣厘,那么唯一使其獲得較大值的方式是,令
压恒,得到的
是一個(gè)大負(fù)數(shù)
這個(gè)定義捕捉到了我們之前對(duì)于函數(shù)間隔的直觀理解的特點(diǎn)影暴,在之前logistic
回歸的直觀理解中,如果探赫,我們希望
取較大的值型宙;如果
,我們希望
取較小的值伦吠,這個(gè)定義用一個(gè)公式捕捉到了妆兑,我們希望函數(shù)間隔去較大值的兩種情況。
上面定義的某一個(gè)樣本的函數(shù)間隔為:毛仪,那么針對(duì)全局樣本得到的一個(gè)超平面的函數(shù)間隔定義為:
代表在全部的訓(xùn)練樣本上搁嗓,以分類正例和負(fù)例置信度最低的那個(gè)函數(shù)間隔為準(zhǔn),即 函數(shù)間隔是最差的情況箱靴,也要能很好的分類正負(fù) 腺逛。
實(shí)際上,這種直觀理解存在一個(gè)小問題刨晴,要使函數(shù)間隔取較大的值是非常容易的屉来,比如說:如果我們的參數(shù)是和
路翻,那么我們可以將
變?yōu)樵瓉淼?code>2倍,將
也變?yōu)樵瓉淼?code>2倍:
那么根據(jù)函數(shù)間隔的定義:
如果把和
變?yōu)樵瓉淼?code>2倍茂契,那么我可以很容易的使函數(shù)間隔加倍。所以單純的以最大化函數(shù)間隔為目標(biāo)是沒有多大意義的掉冶,因?yàn)橥ㄟ^對(duì)參數(shù)翻倍就可以使函數(shù)間隔獲得任意大的值,也許我們可以解決這個(gè)問題脐雪。通過添加一個(gè)正規(guī)化條件厌小,使得
的長度為1,即
幾何間隔
分類器的確定邊界會(huì)由平面給出战秋,假設(shè)存在一個(gè)點(diǎn)在分割面上璧亚,其他任何一點(diǎn),比如
點(diǎn)到分割面的距離脂信,這就是幾何間隔
那么上圖的點(diǎn)和分割面成
夾角癣蟋,即法向量表示為
,
點(diǎn)到分割面的距離為
(沒有帽子的是幾何間隔狰闪,有帽子的是函數(shù)間隔
)疯搅,假設(shè)
點(diǎn)的坐標(biāo)為
,
點(diǎn)的坐標(biāo)為(x,y)埋泵,那么可以得到
(利用初中的幾何知識(shí))幔欧,因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Cfrac%7B%5Comega%7D%7B%7C%7C%5Comega%7C%7C%7D" alt="\frac{\omega}{||\omega||}" mathimg="1">是長度為1且與超平面垂直的單位向量,用點(diǎn)
減掉
就是超平面上面點(diǎn)
的
坐標(biāo)了丽声。因?yàn)榉指蠲嫔厦娴狞c(diǎn)都滿足
礁蔗,而點(diǎn)B在分割面上,所以也滿足
恒序,瘦麸,即:
進(jìn)一步化簡得到:
上述是假設(shè)已經(jīng)對(duì)樣本分好了正確的類別歧胁,那么如果點(diǎn)是樣本,即很多個(gè)類似于點(diǎn)
的樣本
厉碟,那么上述公式轉(zhuǎn)化為:
現(xiàn)在這樣子的形式和之前的函數(shù)間隔形式非常相似,除了在這里我們對(duì)向量進(jìn)行了標(biāo)準(zhǔn)化箍鼓。所以像之前一樣崭参,我們希望幾何間隔取較大的值,也就是意味著如果我們對(duì)訓(xùn)練樣本進(jìn)行了正確的分類款咖,那么這些樣本在分類正確的一面距離分割面的距離越大越好何暮,這里用乘上
來判斷樣本正負(fù)分類的方向奄喂。
這里有幾個(gè)非常容易得到的結(jié)論:
- 如果
,那么函數(shù)間隔等于幾何間隔
- 幾何間隔=函數(shù)間隔 /
![]()
同樣海洼,如果同時(shí)擴(kuò)大 和
跨新,那么
也會(huì)相應(yīng)的擴(kuò)大,結(jié)果無影響坏逢。所以針對(duì)全局樣本得到的一個(gè)超平面的函數(shù)間隔定義為:
最優(yōu)間隔分類器
最優(yōu)間隔分類器是指選擇合適的域帐、
、
是整,使得間隔最大肖揣,也就是說滿足函數(shù):
慮幾何間隔和函數(shù)間隔的關(guān)系,即浮入,那么上面可以轉(zhuǎn)化為:
這樣子就取消了的約束了龙优,但是目標(biāo)函數(shù)目前不是凸函數(shù),無法求得最優(yōu)值事秀,沒發(fā)直接帶入優(yōu)化算法里面去計(jì)算陋率,所以這里還是需要改寫一下。前面說到同時(shí)擴(kuò)大
和
對(duì)結(jié)果沒有影響秽晚,但我們最后要求的仍然是
和
的確定值瓦糟,不是他們的一組倍數(shù)值,因此赴蝇,我們需要對(duì)
做一些限制菩浙,以保證我們解是唯一的。這里為了簡便取
句伶,這樣的意義是將全局的函數(shù)間隔定義為 1 劲蜻,也即是將離超平面最近的點(diǎn)的距離定義為
。這里解釋一下為什么這么定義考余,因?yàn)榍蠼?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Cfrac%7B1%7D%7B%7C%7C%5Comega%7C%7C%7D" alt="\frac{1}{||\omega||}" mathimg="1">的最大值相當(dāng)于求
的最小值先嬉,因此改寫的結(jié)果為:
這下定義變成只有線性約束了,而且是個(gè)典型的二次規(guī)劃問題(目標(biāo)函數(shù)是自變量的二次函數(shù))楚堤,利用算法可以輕松求解疫蔓。
拉格朗日對(duì)偶
含有等式約束形式的求解最值
這里需要用到微積分知識(shí)中的拉格朗日乘子法,它可以用來求解像這樣的優(yōu)化問題身冬,例如在滿足一定數(shù)量的約束條件的前提下衅胀,求解最小化、最大化問題酥筝,在這里先簡要的介紹一下它的一種一般化的形式滚躯。拉格朗日乘子法是這樣的:假設(shè)有一個(gè)函數(shù),你想使他最大化或者最小化,與此同時(shí)需要滿足一些約束條件:
對(duì)于每個(gè) 掸掏,必須保證約束函數(shù)的值為0:
給定這些約束茁影,我可以寫成向量的形式,將整個(gè)向量表示成:
上面表示所有的元素都是 向量丧凤。如果像求解這個(gè)最優(yōu)化問題呼胚,利用拉格朗日乘子法,首先應(yīng)該創(chuàng)建一個(gè)拉格朗日算子:
它應(yīng)該等于原始的目標(biāo)函數(shù)加上這些限制函數(shù)的線性組合息裸,這些參數(shù)被稱為拉格朗日算子蝇更,然后解決這個(gè)問題的方法是,對(duì)每一個(gè)原始值求偏導(dǎo)之后將其設(shè)為0:
分別對(duì)和
求偏導(dǎo)呼盆,使其偏導(dǎo)數(shù)等于0年扩,理論上可以解出一個(gè)
最優(yōu)解,是這個(gè)最優(yōu)解的必要條件是:存在
使得這些偏導(dǎo)數(shù)的值為0访圃。所以根據(jù)這個(gè)結(jié)論厨幻,求解的過程是:
- 用拉格朗日乘子法創(chuàng)建一個(gè)拉格朗日算子
- 之后相對(duì)于原始參數(shù)
和拉格朗日算子
求偏導(dǎo)數(shù),并令偏導(dǎo)數(shù)等于0
- 之后對(duì)方程組進(jìn)行求解腿时,最后檢查下得到的解是否確實(shí)為一個(gè)最小值
至于為什么引入拉格朗日乘子法可以求出極值况脆,原因是的
變化方向受其他不等式的約束,
的變化方向與
的梯度垂直時(shí)才能獲得極值,而且在極值處,
的梯度與其他等式梯度的線性組合平行易遣,因此他們之間存在線性關(guān)系锨咙。(kkt條件)
含不等式約束形式的求解最值
然后我們探討有不等式約束的極值問題求法 准谚,假設(shè)不僅僅存在約束條件,還存在約束條件
,問題如下所示 :
對(duì)于每個(gè) ,必須保證約束函數(shù)
的值為0:
對(duì)于每個(gè) 悄但,必須保證約束函數(shù)
的值小于等于0:
給定這些約束,我可以寫成向量的形式石抡,可以用向量表示成:
在這種情況下檐嚣,既有等式約束條件也有不等式約束條件,那么利用拉格朗日乘子法啰扛,首先應(yīng)該創(chuàng)建兩個(gè)拉格朗日算子:
這里的和
都是拉格朗日算子嚎京。如果按這個(gè)公式和之前的方法求解,即求解最小值
會(huì)出現(xiàn)問題侠讯。因?yàn)槲覀兦蠼獾氖亲钚≈低诓兀@里的
,我們可以將
調(diào)整成很大的正值厢漩,來使最后的函數(shù)結(jié)果是負(fù)無窮。因此我們需要排除這種情況岩臣, 即需要定義下面的函數(shù):
以上公式溜嗜,假設(shè)或者
宵膨,那么可以調(diào)整參數(shù)
和
使得
的最大值為正無窮。
但是當(dāng)和
滿足約束條件
和
時(shí)炸宵,
的最大值為
辟躏。所以上面式子可知,當(dāng)
時(shí)
土全,當(dāng)
時(shí)
:
這樣原來要求的可以轉(zhuǎn)換成求
捎琐,因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Ctheta_P(%5Comega)" alt="\theta_P(\omega)" mathimg="1">的最小值為
,
越小則
越小裹匙,即求
等于求
:
拉格朗日對(duì)偶步驟
下面使用來表示
瑞凑,如果直接求解,首先面對(duì)的是兩個(gè)參數(shù)
概页,這個(gè)過程不容易求解籽御。因此這里引入拉格朗日對(duì)偶,即函數(shù)
的對(duì)偶函數(shù)
惰匙,它是一個(gè)以
和
為變量的函數(shù):
由求解的最小值
的推理步驟可知技掏,
求解最大值的函數(shù)為
這個(gè)問題是原問題的對(duì)偶問題,相對(duì)于原問題只是更換了和
的順序项鬼,而一般更換
和
順序總有如下式子成立:
所以有:
下面會(huì)解釋在什么條件下兩者會(huì)相等哑梳。
假設(shè)和
都是凸函數(shù),
绘盟,并且存在
使得所有的
都有
涧衙。在這種假設(shè)下,一定存在
使得
是原問題
的解奥此,
是對(duì)偶問題
的解弧哎,以及
,這時(shí)
滿足
kkt
條件:
如果滿足了
kkt
條件稚虎,那么他們就是原問題和對(duì)偶問題的解撤嫩。而被稱作是
kkt
條件,這個(gè)條件隱含了如果蠢终,那么
序攘。也就是說,
時(shí)寻拂,
處于邊界上程奠,而當(dāng)
時(shí),其
祭钉,即
不在邊界上在可行域內(nèi)瞄沙。
最優(yōu)函數(shù)間隔器
重新回到 svm
的優(yōu)化問題,在上面我們需要優(yōu)化的問題是:
這里將約束條件改成:
而kkt
條件可知,如果就 一定意味著
(因?yàn)?
)距境,也就是存在訓(xùn)練樣本
使得函數(shù)間隔為1申尼,即
。它到底表示了什么可以用圖展示一下:
你有一些訓(xùn)練樣本和一個(gè)分隔超平面垫桂,根據(jù)上面的假設(shè)(換個(gè)說法是
)就一定會(huì)有函數(shù)間隔為1的樣本师幕,即上圖中虛線部分,這些里超平面最近的樣本诬滩。在這個(gè)用圖展示的例子中霹粥,所有離超平面較遠(yuǎn)樣本的函數(shù)間隔都大于1。
從上面圖形可以看出:通常情況下疼鸟,可以發(fā)現(xiàn)只有很少數(shù)量的訓(xùn)練樣本函數(shù)間隔等于1后控,在上面的圖中只有3個(gè)樣本的函數(shù)間隔等于1,只有少量的樣本到超平面的距離是最小距離愚臀,這些樣本我們稱之為支持向量忆蚀,支持向量機(jī)的支持向量就是這個(gè)意思
支持向量的數(shù)量一般都會(huì)很少,即大多數(shù)情況下拉格朗日算子姑裂,如果
馋袜,那么其對(duì)應(yīng)的樣本就可能不是支持向量(
)。
回到上面的優(yōu)化問題舶斧,由于只有欣鳖,所以上面的拉格朗日函數(shù):
變成:
注意到這里只有 沒有
是因?yàn)樵瓎栴}中沒有等式約束,只有不等式約束茴厉。
下面按照對(duì)偶問題的求解步驟泽台,即需要定義下面的函數(shù)::
首先求解最小值,對(duì)于固定的
矾缓,
的最小值只與
和
有關(guān)怀酷。所以分別對(duì)
和
求偏導(dǎo):
上面得到最小值時(shí)
的取值。
對(duì)求偏導(dǎo)得到:
將上面求偏導(dǎo)得到的兩個(gè)式子嗜闻,即代入到如下拉格朗日的函數(shù)中:
最后得到:
即為向量內(nèi)積蜕依,簡化表達(dá)為
由于前面知道,對(duì)求偏導(dǎo)時(shí)
時(shí)可以使
取得最小值琉雳,所以最后一項(xiàng)
的值為0样眠,最小值
的式子轉(zhuǎn)化為:
該式子只剩下是未知變量,現(xiàn)在利用拉格朗日對(duì)偶函數(shù)求解未知函數(shù)
而對(duì)于原有拉格朗日對(duì)偶函數(shù):
所以原有對(duì)偶問題可以定義為:
綜上所述翠肘,只要求出檐束,就可以根據(jù)公式:
求得,一旦求出了
和
束倍,就可以很容易的求出
被丧,如下圖所示盟戏,已知
可以確定超平面的方向,如下所示:
但是上圖只有一個(gè)超平面晚碾,實(shí)際上在沒確定參數(shù)之前抓半,圖中可能存在很多個(gè)超平面:
只要知道是哪個(gè)超平面喂急,就能求解的值格嘁,所以一旦確定
和
,就能很容易的求解出
的值廊移。
將和
帶入原始優(yōu)化問題中求解
:
對(duì)于這個(gè)公式的直觀理解是糕簿,找到分類效果最差的正樣本和分類效果最差最差的負(fù)樣本,即離超平面最近的正樣本和負(fù)樣本狡孔,即分類效果最差懂诗,即如下的兩條虛線:
虛線除以2就能得到正確的分類超平面。
而前面所有的出發(fā)點(diǎn)都是苗膝,根據(jù)求解得到
殃恒,如果將:
帶入可以得到:
也就是說,以前新來的樣本要分類辱揭,要首先根據(jù)和
做一次線性運(yùn)算來判斷是正樣本還是負(fù)樣本±胩疲現(xiàn)在有了
,就不需要先計(jì)算
问窃,而是只需將信賴的樣本和訓(xùn)練數(shù)據(jù)里面的所有樣本做一次內(nèi)積和即可亥鬓。
且由kkt
條件可知,只有的時(shí)候域庇,也就是支持向量的時(shí)候才需要計(jì)算嵌戈,
的時(shí)候都是0,所以就是新樣本只需要和所有的支持向量計(jì)算內(nèi)積即可听皿。
總結(jié)步驟
- 先確定間隔器熟呛,這里svm一般默認(rèn)是幾何間隔
- 由間隔器確定間隔函數(shù)
- 從間隔函數(shù)查看是否包含不等式約束形式
- 根據(jù)拉格朗日對(duì)偶步驟計(jì)算得到參數(shù)w、b
根據(jù)以上對(duì)偶問題的求解尉姨,需要在下一篇里面利用核函數(shù)解釋庵朝。
數(shù)據(jù)和代碼下載請(qǐng)關(guān)注公眾號(hào)【 機(jī)器學(xué)習(xí)和大數(shù)據(jù)挖掘 】,后臺(tái)回復(fù)【 機(jī)器學(xué)習(xí) 】即可獲取