回顧一下上文的思路,對於線性可分問題,我們可以用超平面將訓練樣本分開。但是通常超平面有很多個,我們選擇距離兩類樣本點幾何間隔最大的那個,這樣能夠使得模型錯誤率的「上界」最小。而這個問題,有進一步的轉化為求超平面法向量||w||的值最小的問題。好,今天就從這裡開動。
【線性可分問題 之 問題轉化 之 凸二次規劃】
||w||表示向量w的「範數」,最常用的是二階範數,怎麼算呢?就是把向量w中的每個元素都平方,再求和,然後再開二次方根。嗯,我們從前在學習高數的時候經常算類似的東西,雖然我現在也想不起來高數到底學什麼了,呵呵。那其實這個問題很簡單啊,讓w中的每個元素都取值為零,則計算出的結果為零,最小啊。這時候w表示原點。怎麼回事?有地方不對。
是由地方不對,我們忘了要這個超平面幹什麼了——它是用來分隔兩類訓練樣本的,這是他的約束條件。所以,目標函式修正如下:
min pow (||w||, 2.0) / 2sorry 我用的c的語法來描述公式。把最小化||w||轉化成了最小化它的平方,在數學上是等價的,形式上卻有很多好處。subject to y(i) ( + b ) > 0
min pow (||w||, 2.0) / 2約束條件中可以用「=」了。subject to y(i) ( + b ) -1 >= 0
回到上面那個問題,為啥不是幾何距離,就可以呢?就能確保把兩類樣本都間隔開呢?我是這麼理解的,舉個例子吧:假設是在乙個二維平面上,有個點是(1, 1),它和原點(0, 0)的距離很容易計算出是1;如果不是幾何距離的概念,那我可以把(1, 1)進行縮放,例如都擴大兩倍,得到(2, 2),則和原點的距離變為4。同樣,在上面的約束條件中,也可以進行類似的縮放。我要說的是,有個間隔就好,他的值本身並不重要。如果還有問題,那麼好吧,我承認在這裡面我也有點糊塗。
優化上面的約束條件下的目標函式,有個專有名詞,很cool,叫「凸二次規劃問題」。簡單解釋一下。首先,上面的問題是乙個優化問題,而優化問題又稱為規劃問題;其次,上面的目標函式是二次函式,所以叫二次規劃問題;最後,上述的約束條件定義了乙個凸集(集合中任意取兩點連成一條直線,直線上的點依然在集合內部,想象成乙個圓或者橢圓內部區域),所以又稱為「凸二次規劃問題」。
【線性可分問題 之 問題轉化 之 支援向量機】
上面,我們遇到了這麼cool的乙個問題,可是怎麼解呢?
回想一下我們學習的高數。對於沒有約束的極值問題,我們可以求導數,並令導數等於零,求得極值。對於有等式約束的極值問題,我們利用拉格朗日乘子,轉換成無條件極值問題。那麼上面那個呢?是不等式的條件極值問題,咋辦?涼拌,呵呵。
還得繼續轉化。
我們跳出來想一下,我們最終獲得的模型引數是什麼?是w向量和b向量。而b向量可以通過w向量來獲得。(你要問,如何獲得?這個我沒看具體的推導,我是這樣想的:如果分類器描述的是二維空間的一條直線,那麼w就是斜率,b就是截距。當w確定的情況下,我們看平面上的樣本點,根據樣本點之間的間隔,很容易就算出最優分類線與兩類樣本點之間的最大間隔,也就能夠唯一確定最優分類線——間隔中間的那條,也就能確定b的值了。)接著上面的思路,w是根據什麼獲得的呢?根據的只有訓練樣本,即是說,w是訓練樣本的函式,可以表示如下:
w = a(1)y(1)x(1) + a(2)y(2)x(2) + ...... a(n)y(n)x(n)其中a(i)是乙個實數,x(i)和y(i)分別表示樣本i的特徵向量和分類結果。這樣,尋找優化w的問題就轉換成了尋找優化a的問題,a的個數與樣本數量相同。我在第一次看到這個的時候會問自己,這是不是把問題搞複雜了?其實不是,這裡面絕大多數的a的值都是0;而只有那些少數不為0的a,才是模型真正的引數,才是我們將來對未知樣本分類的主要考慮依據。而這些不為0的a所對應的訓練樣本,就是支援向量。最大幾何間隔的大小就由他們來決定。
回想一下上文中超平面的定義如下:
g(x) = + b將w的計算方式帶入之後,變為
g(x) = < * x > + b上面的公式中,只有x向量是變數,x(i)表示第i個訓練樣本,a(i)是實數,表示x(i)。同樣的,可以將w帶入到上面的優化目標函式中。據jasper說,經過上面的變換,就將原來的不等式約束變成了等式約束,就得到了解析解,至此,線性可分問題就能解了。= < a(1)y(1)x(1) * x > + < a(2)y(2)x(2) * x > + ...... < a(n)y(n)x(n) * x > + b
= sum_i + b
不過我個人是沒有看明白,如何就將原來的不等式約束變換成了等式約束;即便是有了等式約束,下面的故事呢?怎麼搞出解析解的?jasper在他的軟文裡面都沒說。這也埋下了乙個伏筆,我後文還要看其他的資料來了解相關的知識,這就留到svm訓練演算法部分來說吧。
看到這個變換,我的收穫主要有以下幾點:
1. 從前知道支援向量的直觀幾何意義,但是從代數推到上,不知道他是怎麼來的;現在知道了。
2. 了解svm對新樣本的分類過程了:就是找到不為零的a(i)以及相應的訓練樣本,與輸入向量做內積,判斷內積的值即可。
3. 能初窺一點兒訓練過程:在對每個a(i)進行優化的時候,至少要遍歷所有訓練樣本;引數空間受支援向量的影響很大。
這一篇先寫到這裡。
SVM (二)SVM理論基礎
上面我們討論了關於拉格朗日乘子法和kkt條件,下面我們討論一下svm的一些基礎概念。我們從乙個簡單地二分類問題來看,給定訓練樣本集合 d y i epsilon 如下圖所示 分類學習最基本的思想就是找到乙個超平面將不同的類別分開,因此我們希望找乙個決策面使得兩個類分開,那麼決策面一般表示就是 w t...
SVM學習筆記
svm方法被稱為最大間隔分類,考慮乙個兩個feature的例子,如下圖所示,所有的劃分都是正確的,但顯然紅色的線是最好的劃分,因為其抵抗擾動的能力更強,容錯性更好,魯棒性好。兩類中最靠近分類界限的點沿分類線 平面 的距離最大,這個距離就是所謂的magin,中文應該是間隔的意思。如下圖中的紅色兩個點,...
SVM學習筆記
最近在做模式識別,想通過svm opencv vs2015 mnist實現手寫數字識別,老師要求自己把模式識別的演算法寫出來,自己之前就對支援向量機的強大功能表示出興趣,正好利用這個機會好好學習一下svm,因此這就是這篇博文的由來。第一次寫博文,主要是作為乙個筆記記錄的工作,如果我的文章對你有一些幫...