出處:
從最一般的定義上說,乙個求最小值的問題就是乙個優化問題(也叫尋優問題,更文縐縐的叫法是規劃
——programming
),它同樣由兩部分組成,目標函式和約束條件,可以用下面的式子表示:
約束條件用函式
c來表示,就是
constrain
的意思啦。你可以看出一共有
p+q個約束條件,其中
p個是不等式約束,
q個等式約束。
關於這個式子可以這樣來理解:式中的
x是自變數,但不限定它的維數必須為
1(視乎你解決的問題空間維數,對我們的文字分類來說,那可是成千上萬啊)。要求
f(x)
在哪一點上取得最小值(反倒不太關心這個最小值到底是多少,關鍵是哪一點),但不是在整個空間裡找,而是在約束條件所劃定的乙個有限的空間裡找,這個有限的空間就是優化理論裡所說的可行域。注意可行域中的每乙個點都要求滿足所有
p+q個條件,而不是滿足其中一條或幾條就可以(切記,要滿足每個約束),同時可行域邊界上的點有乙個額外好的特性,它們可以使不等式約束取得等號!而邊界內的點不行。
這對一般的優化問題可能提供不了什麼幫助,但對我們的
svm來說,邊界上的點有其特殊意義,實際上是它們唯一的決定了分類超平面,這些點(想象他們就是以前的圖中恰好落在h1和
h2上的點,在文字分類問題中,每乙個點代表乙個文件,因而這個點本身也是乙個向量)就被稱為支援向量。
關於可行域還有個概念不得不提,那就是凸集,凸集是指有這麼乙個點的集合,其中任取兩個點連一條直線,這條線上的點仍然在這個集合內部,因此說「凸
」是很形象的(乙個反例是,二維平面上,乙個月牙形的區域就不是凸集,你隨便就可以找到兩個點違反了剛才的規定)。
回頭再來看我們線性分類器問題的描述,可以看出更多的東西。
在這個問題中,自變數就是
w,而目標函式是
w的二次函式,所有的約束條件都是
w的線性函式(哎,千萬不要把
xi當成變數,它代表樣本,是已知的),這種規劃問題有個很有名氣的稱呼
——二次規劃(
quadratic programming,qp
),而且可以更進一步的說,由於它的可行域是乙個凸集,因此它是乙個凸二次規劃。
一下子提了這麼多術語,實在不是為了讓大家以後能向別人炫耀學識的淵博,這其實是我們繼續下去的乙個重要前提,因為在動手求乙個問題的解之前(好吧,我承認,是動計算機求
……),我們必須先問自己:這個問題是不是有解?如果有解,是否能找到?
對比(式
2)和(式
1)還可以發現,我們的線性分類器問題只有不等式約束,因此形式上看似乎比一般意義上的規劃問題要簡單,但解起來卻並非如此。
因為我們實際上並不知道該怎麼解乙個帶約束的優化問題。如果你仔細回憶一下高等數學的知識,會記得我們可以輕鬆的解乙個不帶任何約束的優化問題(實際上就是當年背得爛熟的函式求極值嘛,求導再找
0點唄,誰不會啊?笑),我們甚至還會解乙個只帶等式約束的優化問題,也是背得爛熟的,求條件極值,記得麼,通過新增拉格朗日乘子,構造拉格朗日函式,來把這個問題轉化為無約束的優化問題云云(如果你一時沒想通,我提醒一下,構造出的拉格朗日函式就是轉化之後的問題形式,它顯然沒有帶任何條件)。
讀者問:如果只帶等式約束的問題可以轉化為無約束的問題而得以求解,那麼可不可以把帶不等式約束的問題向只帶等式約束的問題轉化一下而得以求解呢?
聰明,可以,實際上我們也正是這麼做的。下一節就來說說如何做這個轉化,一旦轉化完成,求解對任何學過高等數學的人來說,都是小菜一碟啦。
*****
svm入門(六)線性分類器的求解
——問題的轉化,直觀角度**********
圓形的樣本點定為正樣本(連帶著,我們可以把正樣本所屬的類叫做正類),方形的點定為負例。我們想求得這樣乙個線性函式(在
n維空間中的線性函式):
g(x)=wx+b
使得所有屬於正類的點
x+代入以後有
g(x+)≥1
,而所有屬於負類的點
x-代入後有
g(x-)≤-1
(之所以總跟
1比較,無論正一還是負一,都是因為我們固定了間隔為
1,注意間隔和幾何間隔的區別)。代入
g(x)
後的值如果在1和
-1之間,我們就拒絕判斷。
求這樣的
g(x)
的過程就是求
w(乙個
n維向量)和
b(乙個實數)兩個引數的過程(但實際上只需要求
w,求得以後找某些樣本點代入就可以求得
b)。因此在求
g(x)
的時候,
w才是變數。
你肯定能看出來,一旦求出了
w(也就求出了
b),那麼中間的直線
h就知道了(因為它就是
wx+b=0
嘛,哈哈),那麼h1和
h2也就知道了(因為三者是平行的,而且相隔的距離還是
||w||
決定的)。那麼
w是誰決定的?顯然是你給的樣本決定的,一旦你在空間中給出了那些個樣本點,三條直線的位置實際上就唯一確定了(因為我們求的是最優的那三條,當然是唯一的),我們解優化問題的過程也只不過是把這個確定了的東西算出來而已。
樣本確定了
w,用數學的語言描述,就是
w可以表示為樣本的某種組合:
w=α1x1+α2x2+…+αnxn
式子中的
αi是乙個乙個的數(在嚴格的證明過程中,這些
α被稱為拉格朗日乘子),而
xi是樣本點,因而是向量,
n就是總樣本點的個數。為了方便描述,以下開始嚴格區別數字與向量的乘積和向量間的乘積,我會用
α1x1
表示數字和向量的乘積,而用
表示向量
x1,x2
的內積(也叫點積,注意與向量叉積的區別)。因此
g(x)
的表示式嚴格的形式應該是:
g(x)=+b
但是上面的式子還不夠好,你回頭看看圖中正樣本和負樣本的位置,想像一下,我不動所有點的位置,而只是把其中乙個正樣本點定為負樣本點(也就是把乙個點的形狀從圓形變為方形),結果怎麼樣?三條直線都必須移動(因為對這三條直線的要求是必須把方形和圓形的點正確分開)!這說明
w不僅跟樣本點的位置有關,還跟樣本的類別有關(也就是和樣本的「標籤
」有關)。因此用下面這個式子表示才算完整:
w=α1y1x1+α2y2x2+…+αnynxn(式1
) 其中的yi
就是第i
個樣本的標籤,它等於1或者
-1。其實以上式子的那一堆拉格朗日乘子中,只有很少的一部分不等於
0(不等於0才對
w起決定作用),這部分不等於
0的拉格朗日乘子後面所乘的樣本點,其實都落在h1和
h2上,也正是這部分樣本(而不需要全部樣本)唯一的確定了分類函式,當然,更嚴格的說,這些樣本的一部分就可以確定,因為例如確定一條直線,只需要兩個點就可以,即便有三五個都落在上面,我們也不是全都需要。這部分我們真正需要的樣本點,就叫做支援(撐)向量!(名字還挺形象吧,他們「撐
」起了分界線)
式子也可以用求和符號簡寫一下:
發現了什麼?
w不見啦!從求
w變成了求α。
但肯定有人會說,這並沒有把原問題簡化呀。嘿嘿,其實簡化了,只不過在你看不見的地方,以這樣的形式描述問題以後,我們的優化問題少了很大一部分不等式約束(記得這是我們解不了極值問題的萬惡之源)。但是接下來先跳過線性分類器求解的部分,來看看
svm——
核函式。
SVM入門 線性分類器(2)
線性分類器 一定意義上,也可以叫做感知機 是最簡單也很有效的分類器形式.在乙個線性分類器中,可以看到svm形成的思路,並接觸很多svm的核心概念.用乙個二維空間裡僅有兩類樣本的分類問題來舉個小例子。如圖所示 c1和c2是要區分的兩個類別,在二維平面中它們的樣本如上圖所示。中間的直線就是乙個分類函式,...
文字分類學習 (八)SVM 入門之線性分類器
所以要理解svm首先要明白的就是線性可分和線性分類器。可以先解釋這張圖,通過這張圖就可以了解線性分類器了。這是乙個在二維平面的圖。其中實心點和空心點是分別屬於兩類的,origin 是原點。先看中間那條直線,中間的直線就是一條可以實心點和空心點分隔開來的直線,所以上圖中的資料點是線性可分的。這條直線其...
Matlab 線性分類器與SVM
利用最小二乘法求線性分類器係數 如下 function w,b leastsquares traindata,trainlabel 最小二乘法線性分類器 nums,demens size traindata traindata traindata,ones nums,1 r traindata tr...