Q:支持向量機是什么鬼?
支持向量機不是一臺“機”,而是一個算法。一般來說認為這是一個分類算法,而且分類效果極佳。
以基本的二分類任務為例。給定一堆訓練數據,假設每個樣本只有兩個屬性。我們試圖在坐標系中找出一條線,把不同類的樣本分開來。從圖中可以看出,有多條直線可以把兩類樣本分開。但是從直覺上就可以察覺,在兩類點中間的那條線(加粗那條),是最合適的。因為這條線離兩類樣本的距離都適中,因此最能適應新樣本,也就是說泛化能力最強。
圖中有很多樣本,但真正決定這條線的位置和方向的,只有兩個點,那就是每個類的點中離直線最近的點。因為它們代表了各自所在的類的邊界,只有它們的變化會引起線的位置變化,所以說這兩個點支持著這條線。這些樣本在坐標系中表現為點,用代數表示就是向量(每個分量是對應的屬性值)。這就是“支持向量機”算法名稱的又來。
Q:怎樣找出支持向量機用來分類的那根線?
支持向量機在樣本屬性只有兩個的時候的任務是找一條線,在屬性有三個的時候就是找一個平面。在樣本屬性有三個以上的時候找的是“超平面”。線、平面,都是超平面的特例,所以他們都可以用一個方程來表示:
這個方程就是我們要找的超平面的代數表示。其參數w和b就是我們要確定的參數,也就是我們要學習的目標。這個超平面也可以認為是使得分類函數f(x)=0的點集:
支持向量機的分類方式略有別于logistic回歸——logistic回歸是把樣本值代入分類函數后得出一個0到1之間的數,根據這個數是否大于某個閥值(如0.5)來進行分類。
支持向量機則是把樣本值代入分類函數后得出一個實數,根據這個數是否大于0來分類。而且在用訓練數據訓練過程中,會設置約束條件,讓所有樣本數據的計算值在 “>1” 和 “<-1” 之間。也就是在兩個類別之間留出一道間隙。
由空間幾何理論可以知道,空間中一個點到超平面的距離是
因為把樣本值代入分類函數后得出的計算值在 “>1” 和 “<-1” 之間,所以超平面能正確分類的前提(即約束條件)之一是
那么離超平面最近的兩個樣本,代入分類函數后的計算值必然分別是1和-1。所以兩個類之間的間隙就是這兩個點到超平面的舉例的和,也就是
要是的支持向量機效果最好,也就是說最能適應新樣本,那就意味著是的兩類訓練樣本之間的間隙最大化,所以我們的訓練的具體目標就是——
求得參數w和b使得兩類樣本間的間隙最大,同時還要讓各個樣本代入分類函數后的計算值大于1(或小于-1)。
這個最值問題的求解過程相當燒腦,用到對偶問題思想、拉格朗日乘子法、KKT條件、SMO算法等,略過。
當我們把訓練數據一個個輸入支持向量機,逐漸調整參數w和b,最后得到了分類函數。這就是支持向量機的基本形式。
Q:如果得到的訓練數據在各個類別的邊界處彼此混淆,不能用一個超平面劃分,怎么辦?
現實中確實存在線性不可分的數據集
但我們可以將樣本向量映射到一個高維空間,在更高維度的空間中我們就能找到一個劃分各類的超平面了。這中數據升維的手段被稱為核方法,其映射函數被稱為核函數。
當樣本向量x映射后,超平面的方程也就變成了
而訓練的具體目標則變成了