在前一篇文章中介紹的 SVM 基本型,其實還可以進行優化。主要是利用核函數對向量內積的計算進行優化。另外,我們還將詳細分析拉格朗日乘子法與KKT條件,以及KKT條件對SVM分類的作用。那我們先來看看核函數是什麼。
在異或問題中,由於 、 、 、 ,所有隻有兩類結果,我們將 0 標記爲負號,將 1 標記爲正號,並且將這四種情況形象地標註在下圖左側中。可以看到,對於這類樣本點,我們無法找到線性可分的超平面,而只能繪製一條非線性曲線將他們劃分開。那麼有什麼辦法可以將他們劃分開呢?這時候,核方法(kernel trick)就出場啦。
所謂的核方法,其實就是將樣本從原始的特徵空間映射到一個高維的特徵空間,以使得樣本在高維特徵空間中仍然線性可分。正如下圖中所示,我們對 使用一個映射函數 ,得到映射到高維特徵空間的特徵向量 ,然後這些樣本點在三維空間的確可以找到一個平面將樣本點線性可分(黑色實線所畫的平面)。幸運的是,如果原始空間是有限維,即屬性數有限,那麼一定存在一個高維特徵空間使樣本可分。那麼其實我們只要找到映射函數,就可以將線性不可分的樣本轉爲線性可分的情況了。但是,這個映射函數很難尋找,SVM模型沒有直接硬來,而是巧妙的引入核函數來間接地解決實現這種變換。
那麼接下來我們看看核函數如何應用於模型上。
在前一篇文章中的 SVM 對偶問題爲:
可以看到,我們需要計算第 i 和第 j 兩個樣本的內積。
另外,對應的分類決策函數的公式爲:
我們也需要計算總樣本 X 和樣本 i之間的內積。我們發現,這裏其實存在着重複的內積計算,並且在高維中內積計算非常耗時,可不可以只算一次?事實上,是可以的,我們完全可以提前將兩兩樣本間以及樣本與自身的內積都算出來並存儲下來,下次使用時只需直接取出使用即可,這大大提高了計算效率。但是,現在問題是當樣本點映射到高維空間中內積計算的問題。這裏,就巧妙引入了核函數,替代了向量內積。它可表示爲:
所以我們只需要計算核函數的值即可,而核函數的計算只需套用公式。常用的核函數有線性核( ,線性核代表了原始特徵空間,爲了統一寫法,有了線性核)以及高斯核( ) 等。
注意到大部分的拉格朗日乘子 都是 0。因爲大部分的樣本都會被分類正確,只有少部分的樣本被誤分類,也就說只要被分類正確, ,該樣本不會出現在分類決策函數的求和公式中,自然不會對最終的決策結果產生任何影響。
最後,支持向量機的決策過程也可以看做一種相似性比較的過程。首先,輸入樣本與一系列模板樣本進行相似性比較,模板樣本就是訓練過程決定的支持向量,而採用的相似性度量就是核函數。樣本與各支持向量比較後的得分進行加權後求和,權值就是訓練時得到的各支持向量的係數 和類別標號的成績。最後根據加權求和值大小來進行決策。而採用不同的核函數,就相當於採用不同的相似度的衡量方法。
到這裏,SVM的理論基礎基本都介紹完了。總的來說,首先進行特徵空間的非線性映射,然後在這個新的空間中求最優分類面即最大間隔分類面,而這種非線性映射是通過定義適當的內積核函數來巧妙實現的。
接下來,我們介紹下凸優化問題中涉及的KKT條件。
KKT 是一組不等式約束,主要應用在凸優化問題上。其實大家在高數中曾使用過拉格朗日乘子法求解帶等式約束的優化問題,而KKT條件解優化問題就是升級版啦。
假設有如下帶等式約束的優化問題:
我們使用拉格朗日乘子法通過引入拉格朗日乘子將等式約束的優化問題轉化爲無等式約束的優化問題。
所以我們通過一個拉格朗日乘子組成的行向量
(其中
),將目標函數和等式約束組合成
,其中
。然後就可以求最優值,也就是利用費馬引理,將函數 L 對各個參數求導取零,然後等式聯立進行求解。
假設有如下帶不等式約束的優化問題:
這樣之後就能求得最優值。其中第三個式子比較有意思。由於 ,因此只有 或 時,等式才成立。而這裏是 SVM 中很多重要性質的來源,比如支持向量的概念。後面我們在介紹KKT條件與 SVM 的關係時再具體解釋。那爲什麼拉格朗日乘子法和KKT條件能夠得到最優值?
對於拉格朗日乘子法,假設目標函數爲 。
這樣之後就能求得最優值。其中第三個式子比較有意思。由於 ,因此只有 或 時,等式才成立。而這裏是 SVM 中很多重要性質的來源,比如支持向量的概念。後面我們在介紹KKT條件與 SVM 的關係時再具體解釋。那爲什麼拉格朗日乘子法和KKT條件能夠得到最優值?
對於拉格朗日乘子法,假設目標函數爲 ,要求其極值,且滿足