支援向量機(SVM)從入門到放棄再到掌握
前言
朋友,你通過各種不同的途經初次接觸支援向量機(SVM)的時候,是不是會覺得這個東西耳熟能詳,感覺大家都會,卻唯獨自己很難理解?
每一次你的老闆或者同仁讓你講解SVM的時候,你覺得你看過這麼多資料,使用過這麼多次,講解應該沒有問題,但偏偏在分享的時候結結巴巴,漏洞百出?
每一次機器學習相關的面試在問到支援向量機(SVM)的時候,儘管你覺得你都準備好了,可是一次又一次敗下陣來,以至於覺得問那些問題的人(是不是腦子有…)是那麼的厲害,每一次都能精準發覺到你的不足和漏洞,讓你懷疑你掌握的是假的SVM,然後讓你懷疑人生?
那還等什麼,快來看看這篇文章吧,原價998,現在只要。。。(不好意思,扯偏了。)
以上可能真的只是我的個人經歷(在這裡,學渣給各位大佬鞠躬了!),但不管怎麼樣,我還是要自己寫一篇從頭到尾的SVM的理解,然後呈現給各位大佬審閱,歡迎您批評指正!
按照以下問題成文:
- 由線性分類任務開始
- 為何需要最大化間隔
- 怎麼解決凸二次規劃問題
- 對偶問題的求解
- SMO演算法
- 核函式的由來和使用
SVM由線性分類開始
在這之前,假設讀者們對線性分類模型和向量矩陣求導有大概的瞭解。
給定訓練樣本集
但我們可以直觀感受到,這根紅色線
代表的超平面抗“擾動”性最好。這個超平面離直線兩邊的資料的間隔最大,對訓練集的資料的侷限性或噪聲有最大的“容忍”能力。
在這裡,這個超平面
可以用函式
表示。 當
等於0的時候,x便是位於超平面
上的點,而
大於0的點對應 y=1 的資料點,
小於0的點對應y=-1的點。
為什麼是
,換句話說,
只能是-1,和1嗎?不能是
=-100 表示反例,
=2000表示正例,或
=0表示反例,
=300表示正例,或
=5表示反例
=-7 表示正例嗎?當然可以。y 只是一個label ,標註為{-1,+1}不過為了描述方便
。
若 =0表示反例, =300表示正例,只不過分正類的標準變為
不妨令:
為什麼可以這麼令呢?我們知道,所謂的支援向量
,就是使得上式等號成立,即最靠近兩條虛邊界線的向量。那麼,不難理解當
的值大於+1,或小於-1的時候,就更加支援
“樣本的分類”了。為什麼要這麼令呢?還是為了計算方便。接著往下看,你一定能悟到這麼令的原因。
我們可以計算得到空間中任意樣本點
到超平面的距離為:
。為什麼呢?
如圖所示,有:
(簡單平面幾何)
又有:
,代入上式,求得:
。
因為 ,,兩個異類支援向量到超平面的距離之和(也稱為“間隔”)可表示為: 。
很顯然,我們要找到符合這樣一個條件的超平面來分開兩類資料
:
這個超平面離兩類樣本都足夠遠,也就是使得“間隔”最大。即最終確定的引數
,使得
最大。即要: