【機器學習系列文章】SVM初識之如何解決分類問題|原創

撰文 | 李佳

責編 | 趙和玉

編者按:本文是機器學習系列的第一篇。筆者為大家簡單介紹了支持向量機(SVM)對於解決不同數據集分類情況上的應用,並引出了核函數的概念。希望讀完後對您有所幫助,歡迎大家給我們私信您的想法以及希望能了解到的有關機器學習的知識。也非常歡迎大神拍磚交流~~

支持向量機(Support Vector Machine)是Cortes和Vapnik於1995年首先提出的,在統計學習理論的基礎上發展起來的一種機器學習方法。在解決小樣本、非線性及高維模式識別中表現出許多特有的優勢,並被推廣應用到函數擬合等其他機器學習問題中。

在SVM出現之前,感知機和神經網路演算法被廣泛研究,他們也都是用於分類的演算法。基於SVM的研究則是為了能更好的找到最優分類面。與前兩者相較,SVM的優勢在於可以運用核函數把低維空間中的點映射到高維空間,從而能夠對非線性可分數據進行分離。

SVM是機器學習里用的比較多的一種分類演算法。它是一種二類分類器,簡言之,能夠實現一個分類面對兩類數據進行分類。這個分類面被叫做超平面。

之所以稱之超平面,是因為SVM分類的數據可能是高維的。一維的分類面是一個點,二維的是一條直線,三維的是一個平面,更高維的就是超平面了。

下面我們來模擬一下SVM的簡單實現過程:

首先,我們輸入一個隨機的線性數據集,如圖1:

圖1 一個給定的隨機數據集

當我們對數據進行二分類時,分類面的方向和位置可以由無數種可能,那麼怎麼確定哪一個是最好的分類界限呢?

圖2 對隨機數據集尋找二分類面

實際計算過程中,SVM所要找的這個分類面需要滿足兩個條件:一分類面與兩類樣本間的距離相等;二分類面與兩類樣本間的距離最大。

因此,我們可以定義一個函數來表示間隔,進而只要找到函數的最大值就可以求出最大間隔,即找出最適的超平面了。

那麼表示間隔的這個函數怎麼求最大值呢?高等數學中我們學過拉格朗日函數求最值的方法,即引入拉格朗日乘子。這裡我們同樣用拉格朗日的方法來求間隔的最大值。這是一個有約束條件的優化問題:約束條件是指SVM的所要找的超平面要滿足的條件,即距離兩類樣本等間距,優化問題是指求間隔的最大值。通過求這個優化問題就可以求出最大間隔和分類面,我們要求的SVM就得到啦~~

聊到這,我們需要考慮另一個問題:如果所給的數據(如下圖3)並不是線性可分的,即無法清楚的找到兩類數據的分界面,彷彿有一些點放錯了位置,我們該怎麼辦?

圖3一個非線性可分數據集

那麼對於圖3這樣的數據集,我們可以允許一部分點出現在錯誤的一側,即通過在函數中引入另外一個變數來允許錯誤的發生。該變數叫做鬆弛變數,鬆弛變數的大小決定了我們允許發生錯誤的概率的大小。

接下來我們來討論一下線性不可分數據集,如下圖4所示,它無法用一條直線來分類。

圖4 一個線性不可分數據集

於是我們就要祭出本文的大招,核函數(kernel trick)啦~~

到底什麼是核函數呢?簡單來說,核函數是把輸入空間的點映射到特徵空間的函數。換言之,是用一個函數把低維空間上的點變換到高維空間。我們將圖4所示的那些點通過核函數變換到高維空間後如圖5所示:

基於SVM在解決小樣本,非線性問題中的諸多優勢,它可以被應用到函數擬合等其他的機器學習問題中。當然,SVM的知識還遠不止這些。

預告:下一篇文章,筆者將會給大家詳細介紹我們今天祭出的大招kernel函數,有沒有很期待呢~

歡迎感興趣的小夥伴加入我們的公眾號團隊,只要你有想法、有熱情,就能在這裡得到鍛煉和成長。請聯繫:fanyushuaishuai (wechat)。

歡迎關注同名微信公眾號 象物 ID:xiangwu_world。

聯繫我們:fanyushuaishuai

轉載授權:13462749888@163.com


推薦閱讀:

Kaggle 實戰之數字識別 -- 新手入門SVM分類演算法(Python)
我所理解的 SVM(支持向量機)- 1
支持向量機Python實現(附源碼與數據)
Python3《機器學習實戰》學習筆記(八):支持向量機原理篇之手撕線性SVM
機器學習演算法實踐-SVM核函數和軟間隔

TAG:机器学习 | SVM | 拉格朗日J-LLagrange |