【機器學(xué)習(xí)經(jīng)典算法】真正的SVM簡明(傻瓜)教程!

前言,一些必要的說明

如果你精通機器學(xué)習(xí)算法,或高數(shù)極好,熱愛數(shù)學(xué)推理和公式——那么這篇文章不適合你。寫這篇的初衷是:SVM是一個經(jīng)典的機器學(xué)習(xí)算法,在面試?yán)镆步?jīng)常被考到,所以我希望自己能夠了解到它最核心的一部分理論,并且可以使用在簡單的算例里。然而,我在搜索引擎上所見到的所有講SVM的文章里,都太過于重視推導(dǎo)了(其實還是因為自己數(shù)學(xué)太渣),密密麻麻的公式一層層邏輯嚴(yán)謹(jǐn)?shù)赝葡聛?,我一定跟不到最后就已?jīng)繞暈在符號的海洋里。所以,我決定把自己所學(xué)到的SVM用淺顯的語言表訴出來,在寫的過程中也加深一下自己的理解,何樂而不為呢?那么現(xiàn)在就開始吧。
若有內(nèi)容不清晰或錯誤請指出,鞠躬。

SVM是什么?

"在問為什么之前,先要明白是什么。"
SVM的英語是 Support Vector Machine,字面意思直接翻譯過來就是支持向量機,其中machine是指算法,而support vector就是這個算法中非常重要的部分——待會兒會講。
這個支持向量機做的事情,就是二分類——黑的一類,白的一類;叉號一類,圓的一類,好的一類,壞的一類……等等。二分類問題是常見的機器學(xué)習(xí)問題,而我們知道:在一個平面上有兩堆點的時候,而這兩堆點又分得很開的時候,一條直線就足夠把它們劃分開。這里面的代表性算法就是線性判別分析(LDA)模型。線性SVM在二位空間里做的也是一樣的事。
那我們先從線性SVM講起。
引入一個簡單的小公式——初中難度:

好吧比初中稍微難一點,多的部分就是矩陣運算。但是本質(zhì)上跟y = ax + b 是一樣的。在這個過程中我們需要找到a 和 b的值——在線性判別分析里,這個值是學(xué)到的,而在SVM里,這個值是通過數(shù)學(xué)計算得到的。計算的過程我們待會兒再講,先來說一下SVM基本思路:
我們想要找到一個合適的分類超平面(在平面是一條直線),把所有數(shù)據(jù)分成兩類:我們希望所有叉號圖案在一類里,所有圓形在另一類里。
看下面的這張圖,你覺得哪條線表現(xiàn)更好?

兩條線都成功分開了這兩堆數(shù)據(jù)(本來也分得很開……)但是顯然實線更出色,因為它不僅正確分開了不同類的數(shù)據(jù),還離兩邊都足夠遠(yuǎn)。

現(xiàn)在我們來談?wù)劄槭裁矗?/em>

現(xiàn)在可以給SVM下一個定義了(兩步走):

  • SVM是尋找到一個超平面把數(shù)據(jù)準(zhǔn)確分成兩類;
  • 并且這個超平面要離兩類數(shù)據(jù)最近的數(shù)據(jù)點越遠(yuǎn)越好。

聰明的你大概已經(jīng)猜到所謂的“支持向量”是什么東西了——沒錯!它就是兩堆數(shù)據(jù)中距離最近的點(或點們),那些最容易混淆的點。
那么怎么判斷超平面離這些點的距離是遠(yuǎn)還是很遠(yuǎn)還是非常遠(yuǎn)還是不夠遠(yuǎn)呢?這里需要引入一個小概念——間距——就是衡量超平面到支持向量的距離。

那么,請牢牢記住現(xiàn)在我們的兩個小目標(biāo):
1. 二分類的過程中類別不能錯。
2. 找到間距最大的那個超平面。

好啦,如果你不需要任何算法方面的要求,只需要直接用工具包/吹牛/了解一下的話,你對SVM的了解已經(jīng)夠了。再見!

廢話太多,開始線性SVM

萬事開頭難,我們先從簡單的開始。
剛才的式子還記得吧。x是我們輸入的數(shù)據(jù),y是數(shù)據(jù)標(biāo)簽。我們當(dāng)然希望:在我們超平面(好啦,這條普普通通的直線)一邊的所有x得到的y值,都大于零;在另一邊的y,都小于零;在這條線上,都等于零。完美!
可是怎么才能得到這條線呢?
我們在這條線旁邊又平行地畫兩條線,這樣:


這兩條線是畫在支持向量上的,而我們最終要的超平面(線……)就在這兩條線的正中間,想想很好理解吧?這樣就能保證間距最大啊。
所以我們現(xiàn)在需要的就成了:在兩條線上的點,一邊y等于1,另一邊等于-1(為什么是1不是0.5/0.2/0.0001?因為比較方便……)其它離得更遠(yuǎn)的點,那就可以往正負(fù)無窮隨意延申。

現(xiàn)在我們來加一點美妙的數(shù)學(xué)!千萬不要跳!保證能懂!

把上面的文字轉(zhuǎn)化成數(shù)學(xué)語言:



曾有一位偉大的哲學(xué)家說過,少即是多,一個總比兩個好(編的)。兩個式子總得統(tǒng)一起來才好進(jìn)行接下來的推導(dǎo),不然還得分情況。于是我們用到了小學(xué)數(shù)學(xué):負(fù)負(fù)得正!


耶!解決了,現(xiàn)在這個值無論如何都得是大于1的正數(shù)了。
還記不記得上面提到的兩個條件?現(xiàn)在條件一的求解公式有了,還剩下條件二了。
我們的間距怎么求呢?
一個簡單的小公式。

一道杠的又是小學(xué)知識,是y的絕對值,兩道杠就是,(好像初中學(xué)的?)是向量的長度。這么做的原因是當(dāng)數(shù)據(jù)等比例擴(kuò)大或縮小的時候,我們的間距也會具有比較意義(不然你每個值同時乘以二距離變四倍了其實一點意義都沒有。)
對于支持向量而言,它們距離超平面的間距就是:
因為y = +-1嘛負(fù)數(shù)又沒有意義

我們想要這個Z值最大,那||w||就得最小,OK了~
我們要這個!

這個和上面等價,就是為了計算證明方便,不要問為什么

現(xiàn)在兩個小目標(biāo)的求解條件都列出來了:


現(xiàn)在我們要再多加一點兒美妙的數(shù)學(xué)……相信自己,你可以的

恭喜你剛剛跟我一起走完了第一步:列出求解公式!
這個公式是一個帶約束的優(yōu)化問題。這個公式的求解可以用美妙的拉格朗日乘子法來解決~(回想起被高數(shù)的陰影籠罩的日子……)
好啦沒事,你大概跟我一樣也不記得這到底是個什么東西,簡單地說,就是:

把等式約束h_i(x)用一個系數(shù)與f(x)寫為一個式子,稱為拉格朗日函數(shù),而系數(shù)稱為拉格朗日乘子。通過拉格朗日函數(shù)對各個變量求導(dǎo),令其為零,可以求得候選值集合,然后驗證求得最優(yōu)值。

說人話,就是引入一個系數(shù)把上面式子的兩部分統(tǒng)一起來,然后對每個變量求偏導(dǎo),然后從幾個可能結(jié)果里找到最優(yōu)值。再簡單點,就是求偏導(dǎo)啦。
再最后看一眼上面的式子:
這里面我們想要優(yōu)化的變量有哪些呢?
變量x和y是沒辦法優(yōu)化了,你還能改數(shù)據(jù)咋的?可以優(yōu)化的部分就是我們要的系數(shù)wt,w0(原諒我,打公式好累)
再加上一個拉格朗日系數(shù),套公式,好了:

美妙的拉格朗日約束公式~

這里的λi都是正數(shù),我們現(xiàn)在的目標(biāo)是要求L的最小值。
接下來就是一些簡單的偏導(dǎo)計算啦:我們先對w求偏導(dǎo),令結(jié)果為0;然后對w0求偏導(dǎo),令結(jié)果為0 。(偏導(dǎo)的過程也不是很難……就……高數(shù)上冊了解一下?)

L對w的偏導(dǎo)

L對w0的偏導(dǎo)

這樣我們就得到了λ和x,y的兩個約束關(guān)系式。然后我們還有兩個條件:在上面的拉格朗日約束式里,第一項一定是非負(fù)的,第二項我們需要它越小越好這樣才能得到總體結(jié)果的最小值。以及λ需要非負(fù)(不然就沒有意義了)。
所以,我們把四個求解條件匯總一下:


美妙的拉格朗日約束條件~

恭喜你終于走到了這里!你看現(xiàn)在問題是不是已經(jīng)很簡單了?只需要求這三個線性的等式再加上滿足第四個條件,我們就可以得出λ,w和w0的值了!

美妙的數(shù)學(xué)!

對上述可能結(jié)果的進(jìn)一步說明

假如說我們算出來所有的λi都等于零,說明什么?
說明這個問題沒辦法用支持向量機解決因為不存在支持向量。
我們再來看一下第三個約束條件:


說明什么?
說明求解w只與支持向量有關(guān)啊!

Talk is CHEAP, show me the example!

我們來學(xué)以致用,用一道簡單的例題來幫助我們更好地理解線性SVM模型,光學(xué)公式是永遠(yuǎn)不會用滴!

Example is here :)

現(xiàn)在我在平面上有八個點,分別落在class1 和class2里:


在二維坐標(biāo)里作圖是這樣的:
黑色是class1,紅色是class2

我們?nèi)庋垡豢矗?strong>線性可分吶!SVM可以用了!
那我們就來設(shè)計一個簡單的線性分類器吧。
首先,找出處在邊界上的點,啊不對,支持向量:

紅圈兒的地方

這三個向量的λ(按照順序數(shù)下來是向量1,2,5)我們是需要求解的,其他的向量我們就不管了。
我們定義黑色點的標(biāo)簽值為1,紅色為-1.
然后愉快地帶公式到上面四個約束條件里~

先從

開始。
得到:


但是現(xiàn)在還沒有什么用,我們只是知道了要想求w就得先求出三個λ值。那么怎么求呢?我們來看一下約束條件。
因為:



可得三個聯(lián)立公式(做一下矩陣運算把x,y帶進(jìn)去,注意y正負(fù)號,我這里把步驟都省略了),化簡得:


x = x1

x=x2

x=x3

再帶入

得到:



然后就是愉快地求解四元一次方程啦~
得到三個λi值以后,再帶入第一個式子得到w值,完成。
最終得到的超平面

w值

嗯……嗯????x = 2!!!你在逗我?這個我一秒鐘肉眼就看出來了!解那么多方程干嘛!
好啦不好意思,例題只是說明一種方法……逃

————————————————————————————————————————————
拖了一周多了,來填坑~

線性不太可分的軟邊界SVM

以上我們得出了超平面,很好那來了一個新數(shù)據(jù)只要帶進(jìn)去算一下,看看是不是等于1或者-1就好了呢。
這里有兩種分類法:硬分類軟分類
硬分類就是只要大于0我就把它丟掉一類,小于零就丟進(jìn)另一類;軟分類就是把-1-1之間這個區(qū)間做一下平滑處理,具體的分類還要根據(jù)函數(shù)值決定。

下一個問題是,哪有數(shù)據(jù)每次都正好全都可以分開呢?萬一,兩組數(shù)據(jù)正好有幾個點出現(xiàn)在離邊界點比較近的地方怎么辦?
答案就是:條件稍微放寬一點啦。

一個栗子

比如上面這張圖片里的,出現(xiàn)了幾個壞家伙,雖然大部分?jǐn)?shù)據(jù)都是特征鮮明地出現(xiàn)在兩類里,也不太能夠找到合適的分界面。
這些數(shù)據(jù)我們可以分成三類:

  1. 老老實實呆在離支持向量很遠(yuǎn)的。
  2. 不是很老實,已經(jīng)超越了支持向量的邊界,但總的來說還處在正確的分類中。
  3. 越過了超平面,去到了它并不屬于的另一類里。

以上后兩個類別其實說的是同件事兒的不同程度,就是它們的

值都沒有超過1,只不過程度不同,所以我們可以用一個式子來把這三種情況統(tǒng)一起來(一個總比兩個好)。

一統(tǒng)公式

咦,這里出現(xiàn)了一個長尾巴,不要慌,它叫做松弛變量。松弛呢,就是指要是不滿足條件的話,我把要求稍微給你降一下,不要求你一定得大于1了。對于以上三種情況,松弛變量的結(jié)果也不一樣。對于情況1就是0,對于情況3就要大于1了。

但是雖然要求降了,也不能沒有底線啊。

我們的底線肯定是,錯一個兩個可以忍,錯多了就不行。用數(shù)學(xué)來表達(dá),就是


這些松弛變量的和必須最小。
以上這個SVM的思想,就叫做軟邊界SVM

接下來需要加一點兒美妙……的數(shù)學(xué)

所以現(xiàn)在我們的超平面求解公式就要加上松弛變量的影響了。

事情好像變得越來越不簡單

其實不要被這個式子嚇到了,返回去看看線性可分SVM,就是多了一些限制條件而已。這個式子里沒有出現(xiàn)過的內(nèi)容就是C了,但它也不是一個高大上的東西,只是代表一個常數(shù),用來控制松弛變量部分的影響。簡單來說就是,這個C值越大,說明松弛變量看得越重,那錯誤分類的容忍度就越小。
老規(guī)矩,還是要用拉格朗日乘子來求解。

這是什么鬼東西啊

μ是對ξ的系數(shù),剩下的就跟之前的簡單式子差不多~(說得很輕松的樣子,其實是因為我快陣亡了)

但是不要慌,雖然變量這么多,我們來看看求偏導(dǎo)。
對w求偏導(dǎo),很好,跟松弛變量沒關(guān)系,所以結(jié)果還是一樣。對w0求偏導(dǎo)也是。

再對ξ求偏導(dǎo),會得到一個簡單的式子。



μ不需要求導(dǎo)了,只要代入就好,所以結(jié)果變成了:

六個約束條件!計算請只看箭頭右邊

非線性SVM

那么你要問了,上面的例子都是可以直接線性可分,或者大部分都可分的,但是萬一有那種完全不能用一個超平面直接分開的呢?


這種情況怎么辦?

待續(xù)……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內(nèi)容