概述
SVM(支持向量機)是一個二分類的模型,它的主要思想就是間隔最大化,那麼問題來了,什麼是間隔最大化,老規矩,沒圖說個JB,所以嘍,首先先來了解下分類的概念,如圖:
圖中,每個點是一個樣本,黑色的點屬於一類,用1表示;白色的點屬於一類,用-1表示。我們現在目的就是找得一條線可以將這兩類分開,這條直線具體又是怎麼完成分類呢,假設我們現在有了這條直線方程了,那麼根據我們高中學過的數學知識可以知道,將黑色的點的座標帶入直線方程,它得到的值都大於0的,同理,白色的點都小於0,那麼我們豈不是就完成了分類目的了。。。
下面在來看第二張圖:
從剛纔的分析中我們可以總結出:我們的目的就是找到那條可以使樣本分開的直線,但是如上圖所示我們可以看到有無數條直線都可以將樣本分開,你是否又產生了疑問:“那種可以分開的直線有很多條哇,該選哪一條呢?”現在就可以迴歸剛剛的問題啦,通過最大間隔求得最優的那條,當然還是看圖嘍:
圖中黃色區域就是間隔嘍,從我們直觀感受可以看出:間隔的大小是由距離直線最近的那些點(也就是圖中藍色和紅色圈出的點)所決定,這些點在這裏有個名字——支持向量,哦吼,估計你現在對支持向量機這個名字有點認識了,當這些支持向量距離直線的距離達到最大時,間隔也就達到了最大,而這條直線也正是我們要找的。。。
以上就是SVM的基本思想,是不是還挺簡單的哈。。。哦,對了還有一點哦,以上都是2維的樣本,當樣本是3維時,我們就要將那條直線升級爲一個平面了;當>3維時,那條直線就是一個超平面,什麼是超平面?問得好,我也不知道哦,哈哈,不過把它理解爲一個類似三維的平面就可以了,初學千萬別花太多時間去想多維是個什麼情形,那樣會把自己整死。。。
支持向量機的模型有簡單到複雜可以分爲:線性可分支持向量機、線性支持向量機、非線性支持向量機。下面就分別講解一下這三種模型,什麼鬼,怎麼那麼多,別緊張,好好看懂線性可分支持向量機就ok了,其他兩種只是它的稍微變形。。。
1、線性可分支持向量機
1.1、函數間隔和幾何間隔
先來看一些基本字母表示和定義:
以下全是基於多維的情況,一個樣本表示爲(
1.1.1 函數間隔
函數間隔被定義爲:
爲何這麼定義,我們再回憶一下直線方程,我們高中時老師就教給我們,要想知道某個點在直線的上方和下方,只需將這個點帶入到直線方程,看得到的值大於0還是小於0即可。同理推理到超平面,我們將第i個樣本點帶入就得到函數值
總結:這樣定義的好處是不管是正例還是反例,當求得的
1.1.2 幾何間隔
先來看個圖:
如圖所示:B點是A點在超平面上的投影,樣本A表示爲(
經過移位和簡單變換,求解出
同樣的給它乘上標籤y,那麼最終完美的
爲什麼說它很完美呢,因爲你有沒有發現,當
總結函數間隔和幾何間隔的關係是:
1.2、 最大間隔分類器
現在再次回到我們的初始目標:尋找最優一個超平面,使得距離它最近的點(支持向量)到它的距離最大,也就是所謂的間隔最大化,將其用公式表示如下:
這裏加上了約束
可以看到模型中,目標函數由原來的幾何間隔變成了函數間隔除以
通過上述模型我們能夠求解出最優w和b,也就求得了最大間隔超平面了,求得超平面後,我們將要測試的樣本點帶入,當求得的函數值>0時歸爲正例一類,將函數值<0的歸爲負例一類。到這裏就結束了嗎,當然沒有,還記得我說的被數學家的睿智所徹底折服嗎,這裏就需要你來膜拜了。。。
當然在進行下面的推導之前你需要看下一對偶問題的求解,要是隻是想會用SVM不看也沒關係,你可以直接跳過標有紅色字體的理解,單純的記住需要這樣就ok啦。
爲什麼需要求解對偶問題呢?問的好,優點:1.對偶問題更容易求解;2.方便我們之後進入核函數,這是後話,到講到核函數時,你就是茅塞頓開啦。
我們先將約束進行改寫爲:
接着構造拉格朗日函數爲:
根據KKT條件可知:只有支持向量前面的係數α>0,其他樣本點前的係數α=0。當滿足KKT條件時,原問題和對偶問題是等價的,所以我們可以將原模型改變爲如下公式的對偶問題。
也就是說我們現在的目的就變成了解決上式。。首先先求內部,固定α,對w和b求偏導如下:
整理上式可得:
將求偏導後的結果帶入化簡後得到如下:
我們再將向量內積換一種表示形式爲:。
我們可以看出上式只和α有關了,也就比較好求解了,我們需要求出α,然後就可以得到w和b了,現在我們要求解外層了,將上述求出的內層結果帶入,相當於求解下式:
對於上式模型的求解,做經典的就是使用SMO(Sequential minimal optimization)算法了,具體的思想請移步:欲知詳情請點我哦!
好啦,現在我們經過SMO算法更新迭代求得了最優的α了,那麼根據公式,我們就可以求出法向量最優w,在這裏我們可以看到求解w時,對所有樣本做運算,這豈不是要耗時很多哇,給這個算法差評,哈哈,當然不是,這裏就再次體現了支持向量的優勢之處了,還記得我們前面說過的只有支持向量的係數α>0,其他樣本的係數α都等於0嗎,這樣我們不難發現實際上只是那幾個少數的支持向量參與了運算,計算量是不是就很小了哇,然後再根據公式:
求得最優的b,知道了最優的w和b,那麼很自然的含有最大間隔的超平面也就相應地可以求得啦,這就完成了我們最終的目的嘍,求解出了線性可分支持向量機,第一部分到這裏完全結束啦。
2. 線性支持向量機
上一節我們講了線性可分支持向量機,爲什麼起的是這個名字呢,因爲它的所有樣本是線性可分的,但是當存在離羣點時,什麼是離羣點呢,如下圖所示:
上圖中左邊的圖形是線性可分的情況下的描述,右圖的最上方那個圓圈樣本就是離羣點,當這種樣本存在時,我們發現超平面的位置改變了,它使原來的最大間隔變小了,這是我們特別不希望的,再有更糟糕的情況,就是離羣點完全在另一類中了,如下圖所示:
這種糟糕的情況就變成了線性不可分的情況,也許你會說我們找到一個曲線(如圖中所示)區分不就行了,但是這樣會產生嚴重的過擬合(對訓練樣本表現極好,對測試樣本表現不好,泛化能力差),所以我們需要將上一節中的模型進行改進,改進結果如下:
在上式中我們可以看到:增加了一個鬆弛因子
對於上式的求解和化簡,類似於上一節中對模型的計算,首先將其化爲拉格朗日函數,然後根據對偶函數求解化簡,最終得到下式:
首先看一下這個推導化簡後的式子,
對於上式模型的求解,當然還是用到了SMO(Sequential minimal optimization)算法,首先迭代求解出最優的α,然後根據α和對應的樣本,求出最大間隔超平面就ok啦!第二部分就結束了,下面讓我們來看看非線性支持向量機。
3. 非線性支持向量機
上一節我們講了線性不可分的情況,當離羣點特別多,多到如下圖那樣時,我們就需要再改進一個新模型來解決了:
這是一個二維空間的例子,我們可以看到兩類樣本完全無法分開,我們這樣想,將這些樣本映射到高維空間是什麼情形了,看如下的一種映射:
我們將剛剛二維空間的樣本映射到三維,是不是顯而易見就變成了線性可分的啦,此時我就就能又能解決分類問題啦,當然嘍,此時你需要補充的就是核函數這個概念了(點我瞭解核函數)。。。
現在你已經看完了核函數,沒看也沒關係,你只要記住:我們的模型改進是在上一節的模型中將樣本內積換成核函數就ok了,核函數的值代表了樣本在高維空間的內積(千萬別認爲核函數是將低維空間的樣本映射到高維空間,然後做的內積,因爲它沒有映射這個過程),改進後的最終模型如下:
大家和上一節中的最終模型對比,可以看到只有內積換成了核函數,其他的都沒有變,也是一樣的,通過SMO算法求得最優的α,然後再求出最終的最大間隔超平面,就可以進行分類啦。。。
對於SVM的理論介紹就講到這裏了,也許有些地方的理解不到位,歡迎留言,共同進步!