入門支持向量機1:圖文詳解SVM原理與模型數學推導

2021-02-12 數據科學家聯盟
0x00 前言

支撐向量機,SVM(Support Vector Machine),其實就是一個線性分類器。在最初接到這個算法時,我們可能會一頭霧水:這個名詞好奇怪[問號臉],怎麼「支持」?什麼「向量」,哪來的「機」?

本篇文章從「不適定問題」開始介紹SVM的思想,通過支撐向量與最大間隔引申到如何將其轉換為最優化問題,並數學推導求解有條件限制的最優化問題。相信學完本篇之後,大家一定會對SVM算法有一個大體上的認識。

0x01 由決策邊界開始 1.1 分類中的「不適定問題」

首先,我們看一個簡單的二分類問題。在二維的特徵平面中,所有的數據點分為了兩類:藍色圓形和黃色三角。我們的目標是找到了一條決策邊界,將數據分類。但實際上我們可以找到多條決策邊界。

這就所謂的「不適定問題」。「不適定問題」會影響模型的泛化性。比如在下面的模型中,被黃色箭頭標出的點被決策邊界劃為藍色圓點,但實際上它和黃色三角更近一些。也就說決策邊界的選擇,不僅要考慮已經存在的數據上的是否分類正確,還要考慮是否能夠更好地劃分未出現的測試數據:

邏輯回歸算法如何解決「不適定問題」問題呢?首先定義一個概率函數sigmoid函數:

然後根據概率函數進行建模:

建立損失函數:

最小化損失函數,從而求出一條決策邊界(線性):

(以上內容回顧文章《Kaggle出場率No.1的邏輯回歸算法到底是如何推導出來的》、《邏輯回歸的本質及損失函數的推導、求解》、《邏輯回歸的決策邊界及多項式》)

也就說,邏輯回歸的損失函數完全是由訓練數據集確定的。

1.2 SVM中的決策邊界

支撐向量機如何解決「不適定問題呢」?SVM要找到一條泛化性比較好的決策邊界,就是這條直線要離兩個分類都儘可能的遠,我們認為這樣的決策邊界就是好的:

如上圖所示:在上面的兩個類別中,離決策邊界最近的點到決策邊界的距離儘可能地遠。

那也就是說,我們可以忽略其他大部分的數據點,只關注這幾個特殊的點即可。

0x02 Support Vector & Margin 2.1 定義及思想

將最優決策邊界向上&下平移,在遇到第一個點時停下來,這個點被稱為支撐向量Support Vector;支撐向量到決策邊界的距離是d;這兩條平移後的直線的間隔(2d)被稱為最大間隔Margin。

支撐向量就是支撐著兩條平移邊界的點,我們只需要重點研究這幾個支撐向量即可,這也是SVM名稱的由來;Margin就是分界面可以移動的範圍,範圍越大表示容錯能力越強。

所以我們可以看到,所謂的支撐向量機,最初就是一個線性分類器,只不過這個線性分類器不僅能把樣本分對,可以最大化Margin。

到目前為止,我們就將SVM轉換為了一個最優化問題,下面的工作就是求出Margin的數學表達式,即將支撐向量機思想轉化為數學問題。

2.2 轉化為最優化問題(核心)

回憶解析幾何的知識,點到直線的距離:

擴展到n維空間:點(其中是n維向量,是截距)的距離為:

然後我們去找決策邊界的表達式:

求出在滿足下面的條件下,的值是多少。

我們將上面的兩個式子進行合併,即可以將提到前面去。這樣,支撐向量機的所有數據點都要滿足下面的式子:

對於任意支撐向量點到決策邊界的距離為,我們要最大化Margin,將前面的式子帶入後得到,也就是

即相當於最小化

OK,現在我們已經得到了SVM的最優化問題:

即最優化的目標函數為,還要有限定條件(受限制於):所有數據滿足

我們發現,SVM的最優化問題是有限制條件的,與之前接觸的沒有限制條件的全局最優化問題的計算方法很不同。

0x03 求解有條件限制的最優化問題 3.1 數學推導

通過六步數學推導,求解有條件限制的最優化問題。如果覺得吃力,大家可以僅僅了解推導過程,記住結果即可。

第一步:給出表達式

對於有約束條件的最優化問題,用拉格朗日乘數法來解決,得到(是拉格朗日係數):

此時,我們要求基於的極小值。

第二步:求導

我們對進行求導,可以得到兩個式子:

從上兩式子可以看出,我們已經求得了的關係,只要後面接著能夠求出優化函數極大化對應的,就可以求出了,至於,由於上兩式已經沒有,所以最後的可以有多個。

第三步:轉換對偶問題

的求導結果帶回到原式中,得到新的目標函數

其實是對偶問題。我們可以通過拉格朗日對偶將優化問題轉化為等價的對偶問題來求解,原問題和對偶問題在一般情況下是不等價的,但是在SVM中是等價的。

第四步:求

方程解出來,會得到很多,大部分都為0,少部分非0,就是支撐向量。

第五步:求

我們將所有非零的支撐向量相乘並累加起來,最終得到

這裡要注意,兩個向量做內積,是SVM運算的精華所在。

第六步:求

已知,將的結果帶入,並且在兩側同時乘以後得到:,則得到:

3.2 SVM如何求解示例

通過一個簡單的例子,展示SVM如何求解。有兩個樣本:

通過約束條件:,可以得到:

我們要優化的表達式為:。需要先求出.

帶入到矩陣中,已知:;則有:

帶入到表達式中,得到:

則表達式的最大值為:

帶回到中則可以得到:;計算

最終得到判決平面為:;Margin為

0xFF 總結

其實我們可以看到,SVM算法也沒有多麼神秘。其最核心的思想就是從Input Space向更高維的Feature Space的映射,進行有Margin的線性分類。

在這一篇文章中,我們要做的就是學習支持向量機算法的相關概念、算法思想、推導過程。一邊體會算法的奧義,一邊為後續的進一步學習做準備。

在線性可分問題中,對於樣本點來說,存在一根直線可以將樣本點劃分,我們稱之為Hard Margin SVM;但是事實上,並不是所有情況都是完美的,這就引出了下一篇文章就講解Soft Margin SVM以及相關知識。大家加油!

相關焦點

  • 支持向量機(SVM)原理剖析
    1 SVM簡介支持向量機(support vector machines, SVM)是一種二分類模型,它的基本模型是定義在特徵空間上的「間隔最大的線性分類器」,間隔最大使它有別於感知機;SVM還包括「核技巧」,這使它成為實質上的非線性分類器。
  • 【機器學習基礎】數學推導+純Python實現機器學習算法8-9:線性可分支持向量機和線性支持向量機
    感知機作為一種線性分類模型,很難處理非線性問題。為了處理非線性的情況,在感知機模型的基礎上有了兩個方向,一個就是上一講說到的神經網絡,大家也看到了,現在深度學習大放異彩,各種網絡功能強大。但實際上在神經網絡興起之前,基於感知機的另一種模型——支持向量機,同樣可以解決非線性問題。     支持向量機一般來說有三種任務類型:線性可分情況,近似線性可分情況以及線性不可分情況。
  • 支持向量機SVM原理(參數解讀和python腳本)
    lagrange multipliers拉格朗日乘數法是解決支持向量機margin最大值方法在數學最優問題中,拉格朗日乘數法(以數學家約瑟夫·路易斯·拉格朗日命名)是一種尋找變量受一個或多個條件所限制的多元函數的極值的方法
  • 關於支持向量機(SVM)的原理,你了解多少?(萬字長文 速收)
    其實Coursera的課堂上Andrew Ng講過支持向量機,但顯然他沒有把這作為重點,加上Ng講支持向量機的方法我一時半會難以完全消化,所以聽的也是一知半解。真正開始了解支持向量機就是看的這篇「三重境界」,之後才對這個算法有了大概的概念,以至如何去使用,再到其中的原理為何,再到支持向量機的證明等。總之,這篇文章開啟了我長達數月的研究支持向量機階段,直到今日。」
  • 從零推導支持向量機 (SVM) | 雷鋒網
    摘要支持向量機 (SVM) 是一個非常經典且高效的分類模型。但是,支持向量機中涉及許多複雜的數學推導,並需要比較強的凸優化基礎,使得有些初學者雖下大量時間和精力研讀,但仍一頭霧水,最終對其望而卻步。儘管現在深度學習十分流行,了解支持向量機的原理,對想法的形式化、簡化,及一步步使模型更一般化的過程,及其具體實現仍然有其研究價值。另一方面,支持向量機仍有其一席之地。相比深度神經網絡,支持向量機特別擅長於特徵維數多於樣本數的情況,而小樣本學習至今仍是深度學習的一大難題。1.
  • 機器學習實戰 | 支持向量機·sklearn 參數詳解
    接上篇的內容「一文帶你了解什麼是支持向量機」,相信大家已經對 SVM 已有些了解,關於 SVM 的公式推導可參考李航《統計學習方法
  • 機器學習算法筆記-SVM支持向量機簡介及JAVA小實現
    前言最近開始學習一些機器學習裡的主要算法,SVM支持向量機是我目前產品裡用到的核心算法,想在這裡把我學到的一些東西記錄下來。
  • 機器學習算法入門之「支持向量機」
    對於邏輯回歸算法,在確定最優分類器時,藉助的工具有sigmoid函數和最大似然估計,對於接下來要介紹的支持向量機算法,藉助的工具有最大化間隔和核技巧。因此,簡單理解的話,支持向量機算法是通過某種方式,找到一個最優的分類器,從而實現分類的過程。明白了這一點,下面就具體介紹一下該算法的原理。
  • 支持向量機(SVM)算法總結
    今天我們就聊一聊支持向量機算法。要理解svm我們需要先理解什麼是間隔最大化,首先從簡單的線性二分類開始開始說起。要想對不用的樣本空間分開來,如下如所示,需要找出一條線將不同分類的樣本隔離開。最大間隔的原理就是通過選擇一個離兩個樣本都儘量遠的中間線。也就是下圖中的L2。這樣的好處就是,因為離兩邊的樣本都比較遠。所以誤判的情況相對較小。預測的精度更高。
  • 經典算法解讀:一文看懂支持向量機以及推導
    總之這個圖示有助於你理解支持向量機模型的做法,即努力將正樣本和負樣本用最大的間距分開。我將不會做全部的推導。實際上,支持向量機產生大間距分類器的結論,會被證明同樣成立,證明方式是非常類似的,是我們剛剛做的證明的推廣。
  • 如何學習SVM(支持向量機)以及改進實現SVM算法程序?
    MLNLP」,選擇「星標」公眾號重磅乾貨,第一時間送達編輯:憶臻https://www.zhihu.com/question/31211585/answer/640501555本文僅作為學術分享,如果侵權,會刪文處理如何學習SVM(支持向量機
  • 【機器學習基礎】數學推導+純Python實現機器學習算法10:線性不可分支持向量機
    ——非線性支持向量機。前面兩節我們探討了數據樣例是完全線性可分情況和近似線性可分情況下的支持向量機模型。但線性可分情況並非總如人願,大多數時候我們遇到的都是非線性情況。          所謂非線性可分問題,就是對於給定數據集,如果能用一個超曲面將正負實例正確分開,則這個問題為非線性可分問題。
  • 支持向量機SVM來預測晶片未知信息
    那麼本次就是要通過支持向量機SVM的方法,預測那5個樣本的信息。第一,加載數據增加一些分組信息,比如已知的樣本分類,訓練組,測試組。第四,支持向量機SVM以前我一直把這個東西當成機器,直到最近才知道這是個怎麼回事。
  • 機器學習 | 深入SVM原理及模型推導(一)
    SVM完全可以說是通過數學推導出來的模型,由於當時還沒有計算機,所以模型當中的參數都是數學家們用手來算的。它有一個巨大的應用就是前蘇聯的計劃經濟體系,我們知道在計劃經濟當中,國家有多少社會資源,每樣商品需要生產多少都是國家統籌規劃的。
  • SVM | 支持向量機原理講解(一)
    SVM本來是一種線性分類和非線性分類都支持的二元分類算法,但經過演變,現在也支持多分類問題,也能應用到了回歸問題。本篇文章重點講解線性支持向量機的模型原理和目標函數優化原理。目錄一、感知機模型在講解SVM模型之前,我們可以先簡單了解感知機模型的原理,因為這兩個模型有一些相同的地方。在二維平面中,感知機模型是去找到一條直線,儘可能地將兩個不同類別的樣本點分開。同理,在三維甚至更高維空間中,就是要去找到一個超平面。
  • 深入理解SVM
    SVM 作為有監督的學習模型,通常可以幫我們模式識別、分類以及回歸分析。但是寫這篇文章,確實有點難度,因為支持向量機的推導過程中涉及到很多的數學公式,什麼拉格朗日對偶,KKT等這些東西了。而如果真的要從原理上深挖,那就不叫白話機器學習算法理論了,所以這裡我還是會忽略掉推導演繹的過程,因為我覺得除了寫論文,大部分時候,不會用到這些公式推導。
  • 機器學習測試筆記(13)——支持向量機
    2 支持向量機原理支持向量機(Support Vector Machine,以下簡稱SVM),作為傳統機器學習的一個非常重要的分類算法,它是一種通用的前饋網絡類型,最早是由Vladimir支持向量機通過某非線性變換 φ( x) ,將輸入空間映射到高維特徵空間。特徵空間的維數可能非常高。如果支持向量機的求解只用到內積運算,而在低維輸入空間又存在某個函數 K(x, x') ,它恰好等於在高維空間中這個內積,即K( x, x') =<φ( x) ⋅φ( x') > 。
  • 理解支持向量機
    支持向量機是機器學習中最不易理解的算法之一,它對數學有較高的要求。之前SIGAI微信公眾號已經發過「用一張圖理解SVM脈絡」,「理解SVM的核函數和參數」這兩篇文章,今天重啟此話題,對SVM的推導做一個清晰而透徹的介紹,幫助大家真正理解SVM,掌握其精髓。市面上有不少講解支持向量機的文章和書籍,但真正結構清晰、觸達精髓的講解非常少見。
  • 數據分析入門系列教程-SVM原理
    SVM 的英文全稱是 Support Vector Machines,我們叫它支持向量機,支持向量機是用於分類的一種算法,當然也有人用它來做回歸。SVM 原理我們先通過一個分類的例子來看一下 SVM 的定義
  • Sklearn參數詳解—SVM
    在開始看本篇前你可以看看這篇:支持向量機詳解LinearSVCclass sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', dual=True, tol=0.0001, C=1.0, multi_class='ovr', fit_intercept=True, intercept_scaling=1,