9幅圖快速理解支持向量機(SVM)的工作原理

作者:博觀厚積 Python愛好者社區--專欄作者

簡書專欄:jianshu.com/u/2f376f777

公眾號:Python愛好者社區

支持向量機(Support Vector Machine,常簡稱為SVM)是一種監督式學習的方法,可廣泛地應用於統計分類以及回歸分析。它是將向量映射到一個更高維的空間里,在這個空間里建立有一個最大間隔超平面。在分開數據的超平面的兩邊建有兩個互相平行的超平面,分隔超平面使兩個平行超平面的距離最大化。假定平行超平面間的距離或差距越大,分類器的總誤差越小。

從分類或回歸的角度來看,SVM的分類只考慮分類面附近的局部的點,即支持向量,而諸如Logistic回歸的演算法要考慮全部樣本的點,基於所有數據點的分布情況來構建分類邊界。那麼如何理解SVM這種依靠超平面與支持向量進行分類或回歸的問題?在這裡我們基於二維平面的9個簡單場景來深入理解其工作原理。

圖1:何謂正確的超平面?

如上圖,A、B、C三個超平面,對星形與圓形標誌進行劃分,很明顯,超平面B是正確的超平面。

圖2-3:何謂最優的超平面?

如下圖,A、B、C三個超平面均能對星形與圓形標誌進行劃分,哪個是最優的?

如下圖,最優分類平面的條件是使間隔最大化。我們通過任一類(星形或圓形標誌)與超平面距離最近的點,基於其與超平面距離的最大化來判定最優超平面,這個距離稱為邊距(Margin)。相比較於A、B,超平面C的邊距最大,且具有魯棒性,也就是說與任一類別的邊距都最大,而不像A、B泛化性較差。

注意:這裡不考慮所有的點都必須遠離超平面,我們關心求得的超平面能夠讓所有點中離它最近的點具有最大間距。

圖4:SVM得到的有時候並不是最優分類超平面

如上圖,根據我們前邊的邊距最大原則,B是SVM演算法得到的最優超平面,但是從實際來看,A才是能夠將兩類完全區分開的超平面,所以,SVM得到的有時候並不是最優分類超平面,那麼我們就要懷疑SVM演算法的可行性嗎?我們可以從下一幅圖找到答案。

圖5-6:線性不可分下的最優超平面

如上圖,這兩類無法用一條直線去劃分,基於SVM的邊距最大化原則,我們得到的最優超平面只能是這樣的:

結合圖4以及圖5-6的內容,可以看到有時候SVM不能完全將兩類很好地分開,但是我們仍然覺得它是比較好的分類器,這是因為我們訓練的樣本中有些數據本來就是雜訊,存在異常值,如果我們在訓練(學習)的時候把這些錯誤的點學習到了,那麼模型在下次碰到這些錯誤情況的時候就難免出錯了。這種學習的時候學到了「雜訊」的過程就是一個過擬合(over-fitting),這在機器學習中是一個大忌,而SVM在擬合時會保證一定的容錯性,忽略異常值而考慮全局性的類別分布,就像圖4、5、6所示的那樣。

圖7-9:非線性分類下的SVM

如上圖,兩個類之間不能有線性超平面,那麼SVM如何對這兩個類進行分類?之前我們構建分類函數為f(x) = w.x + b(w.x表示w與x的內積),這裡就需要我們可以讓空間從原本的線性空間變成一個更高維的空間,在這個高維的線性空間下,再用一個超平面進行劃分。

我們構建新特徵z = x^2 + y^2,然後在x、z軸上繪製樣本點,可以看到如何去有效分類這兩種類別。這就是增加了一個新的維度,在高維空間劃分兩類。SVM有一種稱為核函數的技術。這些函數採用低維輸入空間並將其轉換為更高維空間,即將不可分離問題轉換為可分離問題,這些函數稱為內核。它主要用於非線性分離問題。

總結:

從上面9幅圖可以知道SVM的工作原理:邊距最大化;忽略異常值;採用核函數來處理非線性的情況。需要注意的是,上面是對SVM簡單場景的分析,實際的SVM工作原理相對複雜。


推薦閱讀:

為什麼svm不會過擬合?
我所理解的 SVM(支持向量機)- 1
第七周筆記:支持向量機SVM
機器學習技法筆記4:軟邊界SVM
機器學習技法筆記1:線性支持向量機(SVM)

TAG:SVM | Python | 機器學習 |