機器學習十大算法--SVM(支持向量機)

概述

SVM(支持向量機)是一個二分類的模型,它的主要思想就是間隔最大化,那麼問題來了,什麼是間隔最大化,老規矩,沒圖說個JB,所以嘍,首先先來了解下分類的概念,如圖:
線性SVM1

圖中,每個點是一個樣本,黑色的點屬於一類,用1表示;白色的點屬於一類,用-1表示。我們現在目的就是找得一條線可以將這兩類分開,這條直線具體又是怎麼完成分類呢,假設我們現在有了這條直線方程了,那麼根據我們高中學過的數學知識可以知道,將黑色的點的座標帶入直線方程,它得到的值都大於0的,同理,白色的點都小於0,那麼我們豈不是就完成了分類目的了。。。
下面在來看第二張圖:
線性SVM2

從剛纔的分析中我們可以總結出:我們的目的就是找到那條可以使樣本分開的直線,但是如上圖所示我們可以看到有無數條直線都可以將樣本分開,你是否又產生了疑問:“那種可以分開的直線有很多條哇,該選哪一條呢?”現在就可以迴歸剛剛的問題啦,通過最大間隔求得最優的那條,當然還是看圖嘍:
最大間隔

圖中黃色區域就是間隔嘍,從我們直觀感受可以看出:間隔的大小是由距離直線最近的那些點(也就是圖中藍色和紅色圈出的點)所決定,這些點在這裏有個名字——支持向量,哦吼,估計你現在對支持向量機這個名字有點認識了,當這些支持向量距離直線的距離達到最大時,間隔也就達到了最大,而這條直線也正是我們要找的。。。

以上就是SVM的基本思想,是不是還挺簡單的哈。。。哦,對了還有一點哦,以上都是2維的樣本,當樣本是3維時,我們就要將那條直線升級爲一個平面了;當>3維時,那條直線就是一個超平面,什麼是超平面?問得好,我也不知道哦,哈哈,不過把它理解爲一個類似三維的平面就可以了,初學千萬別花太多時間去想多維是個什麼情形,那樣會把自己整死。。。

支持向量機的模型有簡單到複雜可以分爲:線性可分支持向量機、線性支持向量機、非線性支持向量機。下面就分別講解一下這三種模型,什麼鬼,怎麼那麼多,別緊張,好好看懂線性可分支持向量機就ok了,其他兩種只是它的稍微變形。。。

1、線性可分支持向量機

1.1、函數間隔和幾何間隔

先來看一些基本字母表示和定義:
以下全是基於多維的情況,一個樣本表示爲(xiyi ),其中x是特徵(n維),y代表了標籤(由-1,1組成),i代表了第i個樣本。超平面也就是:wTx+b=0 ,其中w是超平面的法向量。

1.1.1 函數間隔

函數間隔被定義爲:
γ^=y(i)(wTx(i)+b)
爲何這麼定義,我們再回憶一下直線方程,我們高中時老師就教給我們,要想知道某個點在直線的上方和下方,只需將這個點帶入到直線方程,看得到的值大於0還是小於0即可。同理推理到超平面,我們將第i個樣本點帶入就得到函數值wTx(i)+b ,但是這個函數值有正有負,而函數間隔在我們日常表達中都是正的,因此我們需要在剛剛的函數值之前乘上一個標籤y(i) ,因爲y取1對應於樣本在超平面的上方(函數值爲正)而y取-1對應於樣本在超平面的下方(函數值爲負),所以上式中的γ^ 實際上就是|wTx(i)+b|
總結:這樣定義的好處是不管是正例還是反例,當求得的γ^ 較大時就說明距離超平面的距離越遠,反之亦然。。。

1.1.2 幾何間隔

先來看個圖:
幾何間隔

如圖所示:B點是A點在超平面上的投影,樣本A表示爲(xiyi ),A點到超平面的幾個間隔爲γ(i) ,向量BA的方向和法向量w一致,這個方向的單位向量表示爲:w||w|| ,因此BA向量可以表示爲:γ(i)w||w|| ,根據向量(矢量)的加減可知B點是:xiγ(i)w||w|| ,將B點帶入超平面wTx+b=0 可得:

公式1

經過移位和簡單變換,求解出γ(i) ,上式變爲:

公式2

同樣的給它乘上標籤y,那麼最終完美的γ(i) 寫成了:

這裏寫圖片描述

爲什麼說它很完美呢,因爲你有沒有發現,當||w||=1 時,幾何間隔就變成了函數間隔。我們反過來再看函數間隔,對於超平面wTx+b=0 ,當w和b都同時增大或減小相同倍數時,我們發現對這個超平面的位置沒有影響(可以約掉放大的倍數),所以這樣就會沒有唯一解,所以我們要對函數間隔歸一化,歸一化後正好就是我們剛剛求得的幾何間隔,這時不禁要第一次感慨一下數學家的睿智,之所以要說是第一次,因爲看到後面你會繼續被數學家所折服。說了那麼多你可能會問,幹嘛整出來什麼函數間隔,直接用我們平時地幾何間隔不就完了嗎,哈哈,提出這個當然是有用的嘍,不然數學家幹嗎費這個腦子喲,這個問題我會在接下來的一小節中講解。。。

總結函數間隔和幾何間隔的關係是:
γ=γ^||w||

1.2、 最大間隔分類器

現在再次回到我們的初始目標:尋找最優一個超平面,使得距離它最近的點(支持向量)到它的距離最大,也就是所謂的間隔最大化,將其用公式表示如下:

最大間隔分類器公式1

這裏加上了約束||w||=1 ,這樣就使得y(i)(wTx(i)+b) 是幾何間隔了,但是||w||=1 是非凸的不易求解(可以經過貪婪或非貪婪的方式求解),所以我們剛纔提出的問題答案就在這裏了,我們這時就要用到函數間隔這個概念了,我們將模型改爲如下形式:

最大間隔分類器公式2

可以看到模型中,目標函數由原來的幾何間隔變成了函數間隔除以||w|| ,因爲γ=γ^||w|| ,所以目標函數還是幾何間隔,但是約束裏就沒有了||w||=1 這一項。解決了約束問題,但是目標函數中還是含有非凸的||w|| 項,這怎麼辦呢,當然不是涼拌炒雞蛋,這裏首先將γ^=1 ,也就是將支持向量到超平面的距離定義爲1,目標函數就變成了1||w|| ,最大化這個目標函數,也就相當於最小化12||w||2 ,爲什麼這麼寫,因爲這樣它就是一個凸函數了哇,就容易求解嘍,最終模型如下:

最大間隔分類器公式3

通過上述模型我們能夠求解出最優w和b,也就求得了最大間隔超平面了,求得超平面後,我們將要測試的樣本點帶入,當求得的函數值>0時歸爲正例一類,將函數值<0的歸爲負例一類。到這裏就結束了嗎,當然沒有,還記得我說的被數學家的睿智所徹底折服嗎,這裏就需要你來膜拜了。。。

當然在進行下面的推導之前你需要看下一對偶問題的求解,要是隻是想會用SVM不看也沒關係,你可以直接跳過標有紅色字體的理解,單純的記住需要這樣就ok啦。

爲什麼需要求解對偶問題呢?問的好,優點:1.對偶問題更容易求解;2.方便我們之後進入核函數,這是後話,到講到核函數時,你就是茅塞頓開啦。

我們先將約束進行改寫爲:

對偶求解公式1

接着構造拉格朗日函數爲:

對偶求解公式2

根據KKT條件可知:只有支持向量前面的係數α>0,其他樣本點前的係數α=0。當滿足KKT條件時,原問題和對偶問題是等價的,所以我們可以將原模型改變爲如下公式的對偶問題。

對偶求解公式3

也就是說我們現在的目的就變成了解決上式。。首先先求內部這裏寫圖片描述,固定α,對w和b求偏導如下:

這裏寫圖片描述
這裏寫圖片描述

整理上式可得:

這裏寫圖片描述

將求偏導後的結果帶入這裏寫圖片描述化簡後得到如下:

這裏寫圖片描述

我們再將向量內積這裏寫圖片描述換一種表示形式爲:這裏寫圖片描述

我們可以看出上式只和α有關了,也就比較好求解了,我們需要求出α,然後就可以得到w和b了,現在我們要求解外層這裏寫圖片描述了,將上述求出的內層結果帶入,相當於求解下式:

這裏寫圖片描述

對於上式模型的求解,做經典的就是使用SMO(Sequential minimal optimization)算法了,具體的思想請移步:欲知詳情請點我哦!

好啦,現在我們經過SMO算法更新迭代求得了最優的α了,那麼根據公式這裏寫圖片描述,我們就可以求出法向量最優w,在這裏我們可以看到求解w時,對所有樣本做運算,這豈不是要耗時很多哇,給這個算法差評,哈哈,當然不是,這裏就再次體現了支持向量的優勢之處了,還記得我們前面說過的只有支持向量的係數α>0,其他樣本的係數α都等於0嗎,這樣我們不難發現實際上只是那幾個少數的支持向量參與了運算,計算量是不是就很小了哇,然後再根據公式:

這裏寫圖片描述

求得最優的b,知道了最優的w和b,那麼很自然的含有最大間隔的超平面也就相應地可以求得啦,這就完成了我們最終的目的嘍,求解出了線性可分支持向量機,第一部分到這裏完全結束啦。

2. 線性支持向量機

上一節我們講了線性可分支持向量機,爲什麼起的是這個名字呢,因爲它的所有樣本是線性可分的,但是當存在離羣點時,什麼是離羣點呢,如下圖所示:

這裏寫圖片描述

上圖中左邊的圖形是線性可分的情況下的描述,右圖的最上方那個圓圈樣本就是離羣點,當這種樣本存在時,我們發現超平面的位置改變了,它使原來的最大間隔變小了,這是我們特別不希望的,再有更糟糕的情況,就是離羣點完全在另一類中了,如下圖所示:

這裏寫圖片描述

這種糟糕的情況就變成了線性不可分的情況,也許你會說我們找到一個曲線(如圖中所示)區分不就行了,但是這樣會產生嚴重的過擬合(對訓練樣本表現極好,對測試樣本表現不好,泛化能力差),所以我們需要將上一節中的模型進行改進,改進結果如下:

這裏寫圖片描述

在上式中我們可以看到:增加了一個鬆弛因子ξi ,它的作用就是允許離羣點存在(離羣點到超平面的距離小於1),在目標函數中我們又對那些離羣點乘了一個C(懲罰項),C就是爲了讓這些離羣點對最大間隔超平面的影響變小,C值越大對離羣點的懲罰增大,C值越小對離羣點的懲罰減小。

對於上式的求解和化簡,類似於上一節中對模型的計算,首先將其化爲拉格朗日函數,然後根據對偶函數求解化簡,最終得到下式:

這裏寫圖片描述

首先看一下這個推導化簡後的式子,ξi 不見了,在我們推導的過程被約去了,再仔細看這個式子,有沒有似曾相識的趕腳,是的,你沒看錯,就和上一節的線性可分支持向量機的最終模型是差不多的,所不同的就是對α的約束這裏不同了,此時有沒有感覺到提出SVM的研究者的思想之高深。。。

對於上式模型的求解,當然還是用到了SMO(Sequential minimal optimization)算法,首先迭代求解出最優的α,然後根據α和對應的樣本,求出最大間隔超平面就ok啦!第二部分就結束了,下面讓我們來看看非線性支持向量機。

3. 非線性支持向量機

上一節我們講了線性不可分的情況,當離羣點特別多,多到如下圖那樣時,我們就需要再改進一個新模型來解決了:

這裏寫圖片描述

這是一個二維空間的例子,我們可以看到兩類樣本完全無法分開,我們這樣想,將這些樣本映射到高維空間是什麼情形了,看如下的一種映射:

這裏寫圖片描述

我們將剛剛二維空間的樣本映射到三維,是不是顯而易見就變成了線性可分的啦,此時我就就能又能解決分類問題啦,當然嘍,此時你需要補充的就是核函數這個概念了(點我瞭解核函數)。。。

現在你已經看完了核函數,沒看也沒關係,你只要記住:我們的模型改進是在上一節的模型中將樣本內積這裏寫圖片描述換成核函數就ok了,核函數的值代表了樣本在高維空間的內積(千萬別認爲核函數是將低維空間的樣本映射到高維空間,然後做的內積,因爲它沒有映射這個過程),改進後的最終模型如下:

這裏寫圖片描述

大家和上一節中的最終模型對比,可以看到只有內積換成了核函數,其他的都沒有變,也是一樣的,通過SMO算法求得最優的α,然後再求出最終的最大間隔超平面,就可以進行分類啦。。。

對於SVM的理論介紹就講到這裏了,也許有些地方的理解不到位,歡迎留言,共同進步!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章