前言
有些算法書寫的很白痴,或者翻譯的很白痴。我一直認為算法本身並不是不容易理解的,只不過學究們總是喜歡用象牙塔的語言來表述那些讓人匪夷所思般的概念。如果按照軟件互聯網化的發展思路來說,這是軟件設計的初始階段,不會考慮用戶體驗問題。就好像寫論文一定不能口語化一樣,感覺這是很愚蠢的事情,能把一個看似很復雜的事情講得很簡單,這是一種能力。就好像微博里傳的,阿里前CTO王堅就能讓白雲都能理解技術一般,牛吧。俗話說的好,這就是干貨。
回到正題,今天來簡單談一下SVM算法:
SVM算法(支持向量機)是分類算法中比較活躍的一支。SVM(Support Vector Machine)這個名字翻譯成中文很奇怪:就叫支持向量機,感覺上很難理解, 好歹其它的分類算法:貝葉斯、費舍爾 都是以人名命名,也很容易理解。而SVM這個名字的中文譯法完全相當光怪陸離。
提到SVM,一般都從線性分類開始說起,因為SVM本身就從屬於線性分類。
一、線性分類
1.1 什么是線性分類
線性分類的理解,可以簡單地通過畫一張圖來表示:
選取點M屬於哪個類別的方式有許多種:
-
計算點M與每個分類的均值點的距離,然后從中選取距離較短者
-
使用向量和點積
-
核方法
第一種方式很容易理解,不提。 先來簡單看看第二種方法,向量點積運算。
1.2 點積
上圖中,紅色的點稱為“中心點”,
兩個向量a = [a1, a2,…, an],b = [b1, b2,…, bn],它們的點積定義為:
a·b=a1b1+a2b2+……+anbn
點積的物理意義在於:如果點積越大,說明向量之間的夾角越小。如果點積為負,那么兩向量夾角大於90度,如果點積為正,那么兩向量夾角小於90度。
回到上圖,我們知道,點M到兩個類別中心點(A-B的中心點C), MC ,AB兩個向量之間的夾角小於90度,因而點M更趨近於類別A(相匹配)。
1.3 核方法
如果上圖中,眼尖的人可能注意到了,兩個圈子,兩個類別,但是它們的中心點剛好在同一個,那么上面的方法顯然不行了。
腫么辦?
思路:坐標變換。(比如:線性=>平方,二維=>三維)這時候,“核方法”出場了。簡單來說,就是使用一個新的函數來代替點積函數,常用的一種方法有:徑向基函數(Radial Basis Function,簡稱:RBF)。
徑向基函數 vs 點積
其數學公式簡單的提一下,一筆帶過,簡單地理解就是,已經兩個特征向量(樣本集),可以得到這兩個特征向量的某種類似點積般的關系:
要注意的地方是,
-
它是非線性函數
-
如同點積般的關系
-
K值介於0和1之間
線性 vs 非線性
上面講到的線性分類器是線性關系的,但徑向基函數是非線性的.
均值 vs 均值
原先的線性分類的均值思路:是先求兩分類的均值點,再求出中兩分類的中心點,然后求向量點積。
核方法采用的均值思路:計算出某個坐標點與分類中其余每個坐標點之間的徑向基函數,然后求其均值。
其它核函數
目標:是尋找一條盡可能遠離所有分類的線。剛好各種分類不落在這條線上。這條線被稱為最大間隔超平面(max-margin hyperplane)。注意名字,故名思義一下,最大間隔。。。怎么找該分割線呢?
先尋找一對貼近各自分類點的平行線(注意,上圖雖然是直線,但真實情況並不都是直線),並且盡可能地遠離分界線。對於新數據坐標點,判斷該點落在線的哪一邊,即屬於該分類。(可以使用核方法來判斷)。位於該分界線附近的坐標點,我們稱為支持向量(support vectors)。其實這個名字翻譯的真的很惡心,如果我自己翻譯,我會譯為輔助向量。因為這些個向量的作用只是為了用來輔助尋找最大間隔超平面的。
三、SVM的常見應用
-
面部表情分類
-
軍事數據偵測入侵者
-
蛋白質序列預測蛋白質結構
-
筆跡識別
-
地震危害檢查
本文轉載自:http://mp.weixin.qq.com/s?__biz=MzA3NDA1MzQwOQ==&mid=200019792&idx=1&sn=faedeaac801b210eb8b418df546ef9de&3rd=MzA3MDU4NTYzMw==&scene=6#rd