支援向量機(SVM)

2021-10-10 13:17:56 字數 3537 閱讀 6994

在這裡,二維平面變成了三維空間。原來的曲線變成了乙個平面。這個平面,我們就叫做超平面。

用 svm 計算的過程就是幫我們找到那個超平面的過程,這個超平面就是我們的 svm 分類器。

對於上圖而言,其實我們可以有多種直線的劃分,比如下圖所示的直線 a、直線 b 和直線 c,究竟哪種才是更好的劃分呢?

很明顯圖中的直線 b 更靠近藍色球,但是在真實環境下,球再多一些的話,藍色球可能就被劃分到了直線 b 的右側,被認為是紅色球。同樣直線 a 更靠近紅色球,在真實環境下,如果紅色球再多一些,也可能會被誤認為是藍色球。所以相比於直線 a 和直線 b,直線 c 的劃分更優,因為它的魯棒性更強。

那怎樣才能尋找到直線 c 這個更優的答案呢?這裡,我們引入乙個 svm 特有的概念:分類間隔。

實際上,我們的分類環境不是在二維平面中的,而是在多維空間中,這樣直線 c 就變成了決策面 c。在保證決策面不變,且分類不產生錯誤的情況下,我們可以移動決策面 c,直到產生兩個極限的位置:如圖中的決策面 a 和決策面 b。極限的位置是指,如果越過了這個位置,就會產生分類錯誤。這樣的話,兩個極限位置 a 和 b 之間的分界線 c 就是最優決策面。極限位置到最優決策面 c 之間的距離,就是「分類間隔」,英文叫做 margin。

如果我們轉動這個最優決策面,你會發現可能存在多個最優決策面,它們都能把資料集正確分開,這些最優決策面的分類間隔可能是不同的,而那個擁有「最大間隔」(max margin)的決策面就是 svm 要找的最優解。

在上面這個例子中,如果我們把紅藍兩種顏色的球放到乙個三維空間裡,你發現決策面就變成了乙個平面。這裡我們可以用線性函式來表示,如果在一維空間裡就表示乙個點,在二維空間裡表示一條直線,在三維空間中代表乙個平面,當然空間維數還可以更多,這樣我們給這個線性函式起個名稱叫做「超平面」。超平面的數學表達可以寫成:

在這個公式裡,w、x 是 n 維空間裡的向量,其中 x 是函式變數;w 是法向量。法向量這裡指的是垂直於平面的直線所表示的向量,它決定了超平面的方向。

svm 就是幫我們找到乙個超平面,這個超平面能將不同的樣本劃分開,同時使得樣本集中的點到這個分類超平面的最小距離(即分類間隔)最大化。

在這個過程中,支援向量就是離分類超平面最近的樣本點,實際上如果確定了支援向量也就確定了這個超平面。所以支援向量決定了分類間隔到底是多少,而在最大間隔以外的樣本點,其實對分類都沒有意義。

所以說, svm 就是求解最大分類間隔的過程,我們還需要對分類間隔的大小進行定義。

首先,我們定義某類樣本集到超平面的距離是這個樣本集合內的樣本到超平面的最短距離。我們用 di 代表點 xi 到超平面 wxi+b=0 的歐氏距離。因此我們要求 di 的最小值,用它來代表這個樣本到超平面的最短距離。di 可以用公式計算得出:

其中||w||為超平面的範數,di 的公式可以用解析幾何知識進行推導,這裡不做解釋。

我們的目標就是找出所有分類間隔中最大的那個值對應的超平面。在數學上,這是乙個凸優化問題(凸優化就是關於求凸集中的凸函式最小化的問題,這裡不具體展開)。通過凸優化問題,最後可以求出最優的 w 和 b,也就是我們想要找的最優超平面。中間求解的過程會用到拉格朗日乘子,和 kkt(karush-kuhn-tucker)條件。數學公式比較多,這裡不進行展開。

假如資料是完全的線性可分的,那麼學習到的模型可以稱為硬間隔支援向量機。換個說法,硬間隔指的就是完全分類準確,不能存在分類錯誤的情況。軟間隔,就是允許一定量的樣本分類錯誤。我們知道,實際工作中的資料沒有那麼「乾淨」,或多或少都會存在一些噪點。所以線性可分是個理想情況。這時,我們需要使用到軟間隔 svm(近似線性可分),比如下面這種情況:

另外還存在一種情況,就是非線性支援向量機。

比如下面的樣本集就是個非線性的資料。圖中的兩類資料,分別分布為兩個圓圈的形狀。那麼這種情況下,不論是多高階的分類器,只要對映函式是線性的,就沒法處理,svm 也處理不了。這時,我們需要引入乙個新的概念:核函式。它可以將樣本從原始空間對映到乙個更高維的特質空間中,使得樣本在新的空間中線性可分。這樣我們就可以使用原來的推導來進行計算,只是所有的推導是在新的空間,而不是在原來的空間中進行。

所以在非線性 svm 中,核函式的選擇就是影響 svm 最大的變數。最常用的核函式有線性核、多項式核、高斯核、拉普拉斯核、sigmoid 核,或者是這些核函式的組合。這些函式的區別在於對映方式的不同。通過這些核函式,我們就可以把樣本空間投射到新的高維空間中。

當然軟間隔和核函式的提出,都是為了方便我們對上面超平面公式中的 w* 和 b* 進行求解,從而得到最大分類間隔的超平面。

svm 本身是乙個二值分類器,最初是為二分類問題設計的,也就是回答 yes 或者是 no。而實際上我們要解決的問題,可能是多分類的情況,比如對文字進行分類,或者對影象進行識別。

針對這種情況,我們可以將多個二分類器組合起來形成乙個多分類器,常見的方法有「一對多法」和「一對一法」兩種。

假設我們要把物體分成 a、b、c、d 四種分類,那麼我們可以先把其中的一類作為分類 1,其他類統一歸為分類 2。這樣我們可以構造 4 種 svm,分別為以下的情況:

(1)樣本 a 作為正集,b,c,d 作為負集;

(2)樣本 b 作為正集,a,c,d 作為負集;

(3)樣本 c 作為正集,a,b,d 作為負集;

(4)樣本 d 作為正集,a,b,c 作為負集。

這種方法,針對 k 個分類,需要訓練 k 個分類器,分類速度較快,但訓練速度較慢,因為每個分類器都需要對全部樣本進行訓練,而且負樣本數量遠大於正樣本數量,會造成樣本不對稱的情況,而且當增加新的分類,比如第 k+1 類時,需要重新對分類器進行構造。

一對一法的初衷是想在訓練的時候更加靈活。我們可以在任意兩類樣本之間構造乙個 svm,這樣針對 k 類的樣本,就會有 c(k,2) 類分類器。比如我們想要劃分 a、b、c 三個類,可以構造 3 個分類器:

(1)分類器 1:a、b;

(2)分類器 2:a、c;

(3)分類器 3:b、c。

當對乙個未知樣本進行分類時,每乙個分類器都會有乙個分類結果,即為 1 票,最終得票最多的類別就是整個未知樣本的類別。

這樣做的好處是,如果新增一類,不需要重新訓練所有的 svm,只需要訓練和新增這一類樣本的分類器。而且這種方式在訓練單個 svm 模型的時候,訓練速度快。

但這種方法的不足在於,分類器的個數與 k 的平方成正比,所以當 k 較大時,訓練和測試的時間會比較慢。

支援向量機(SVM)

簡介 術語 支援向量機 svm 是乙個類分類器,正式的定義是乙個能夠將不同類樣本在樣本空間分隔的超平面。換句話說,給定一些標記 label 好的訓練樣本 監督式學習 svm演算法輸出乙個最優化的分隔超平面。首先我們假定有乙個未知的欲分類的集合,可以進行分割,但是我們不知道分割的函式 超平面,也叫真實...

支援向量機SVM

支援向量機svm support vector machine 是機器學習領域的乙個有監督的學習模型。一 簡介 支援向量機建立在統計學習理論的基礎之上。統計學習理論 statistical learning theory簡稱slt 是一種處理小樣本的統計理論 為研究有限樣本情況下的統計模式識別和更廣...

SVM支援向量機

在機器學習領域,很多時候會用到分類的一些演算法,例如knn,貝葉斯。我們可以把分類的樣本簡單除暴的分為兩種型別。線性可分和非線性可分。可以使用乙個非常簡單的例子來解釋什麼是線性可分,什麼是線性不可分。a 線性可分的2類樣本 b 非線性可分的2類樣 已知乙個線性可分的資料集,其中x表示乙個n維向量,當...