支援向量機SVM

2022-09-17 17:39:16 字數 3384 閱讀 9769

支援向量機學習

支援向量機(support vector machine,svm):是統計學習理論的重要組成部分,也是最實用部分。支援向量機是一種基於結構風險最小化原理機器學習演算法,它具有很好的泛化能力,能夠有效地解決小樣本、非線性、高維數、區域性極小等問題。

閱讀參考:

svm入門精品系列講解目錄:

支援向量機:

核函式:

如何解決分類中的樣本傾斜問題:

使用mapreduce對svm模型進行訓練:

說明:

支援向量機方法是建立在統計學習理論的vc維理論結構風險最小原理基礎上的,根據有限的樣本資訊在模型的複雜性(即對特定訓練樣本的學習精度,accuracy)和學習能力(即無錯誤地識別任意樣本的能力)之間尋求最佳折衷,以期獲得最好的推廣能力

(或稱泛化能力)。

所謂vc維是對函式類的一種度量,可以簡單的理解為問題的複雜程度,vc維越高,乙個問題就越複雜。

這個與問題真實解之間的誤差,就叫做風險(更嚴格的說,誤差的累積叫做風險)。

統計學習的目標從經驗風險最小化變為了尋求經驗風險與置信風險的和最小,即結構風險最小。

svm正是這樣一種努力最小化結構風險的演算法。

什麼叫線性函式呢?在一維空間裡就是乙個點,在二維空間裡就是一條直線,三維空間裡就是乙個平面,可以如此想象下去,如果不關注空間的維數,這種線性函式還有乙個統一的名稱——超平面(hyper plane)!

尋優問題,也叫規劃問題——programming。當目標函式是二次函式,所有的約束條件都是線性函式時,這種規劃問題有個很有名氣的稱呼——二次規劃(quadratic programming,qp),而且可以更進一步的說,由於它的可行域是乙個凸集,因此它是乙個凸二次規劃

在問題求解之前,我們必須先問自己:這個問題是不是有解?如果有解,是否能找到?

對於一般意義上的規劃問題,兩個問題的答案都是不一定。但是凸二次規劃讓人喜歡的地方就在於,它有解(教科書裡面為了嚴謹,常常加限定成分,說它有全域性最優解,由於我們想找的本來就是全域性最優的解,所以不加也罷),而且可以找到!(當然,依據你使用的演算法不同,找到這個解的速度,行話叫收斂速度,會有所不同)。

乙個線性不可分的問題,向高維空間轉化,使其變得線性可分。是的,

有這樣一種函式k(w,x),他接受低維空間的輸入值,卻能算出高維空間的內積值?,這樣的函式就是核函式,使得乙個線性不可分的問題變成線性可分的。

鬆弛變數也是解決線性不可分問題的方法,但是回想一下,核函式的引入不也是為了解決線性不可分的問題麼?為什麼要為了乙個問題使用兩種方法呢?

其實,兩者還有微妙的不同。一般的過程應該是這樣,還以文字分類為例。在原始的低維空間中,樣本相當的不可分,無論你怎麼找分類平面,總會有大量的離群點,此時用核函式向高維空間對映一下,雖然結果仍然是不可分的(也就是說絕大部分點是線性可分的,只有極少數點是線性不可分的),但比原始空間裡的要更加接近線性可分的狀態(就是達到了近似線性可分的狀態),此時再用鬆弛變數處理那些少數「冥頑不化」的離群點,就簡單有效得多啦。

我們想求得這樣乙個線性函式(在n維空間中的線性函式):

g(x)=wx+b

求這樣的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表示數字和向量的乘積,而用1,x2>表示向量x1,x2的內積(也叫點積,注意與向量叉積的區別)。因此g(x)的表示式嚴格的形式應該是:

g(x)=+b

但是上面的式子還不夠好,你回頭看看圖中正樣本和負樣本的位置,想像一下,我不動所有點的位置,而只是把其中乙個正樣本點定為負樣本點(也就是把乙個點的形狀從圓形變為方形),結果怎麼樣?三條直線都必須移動(因為對這三條直線的要求是必須把方形和圓形的點正確分開)!這說明w不僅跟樣本點的位置有關,還跟樣本的類別有關(也就是和樣本的「標籤」有關)。因此用下面這個式子表示才算完整:

w=α1y1x1+α2y2x2+…+αnynxn (式1)

其中的yi就是第i個樣本的標籤,它等於1或者-1。其實以上式子的那一堆拉格朗日乘子中,只有很少的一部分不等於0(不等於0才對w起決定作用),這部分不等於0的拉格朗日乘子後面所乘的樣本點,其實都落在h1和h2上,也正是這部分樣本(而不需要全部樣本)唯一的確定了分類函式,當然,更嚴格的說,這些樣本的一部分就可以確定,因為例如確定一條直線,只需要兩個點就可以,即便有三五個都落在上面,我們也不是全都需要。這部分我們真正需要的樣本點,就叫做支援(撐)向量!(名字還挺形象吧,他們「撐」起了分界線)

式子也可以用求和符號簡寫一下:

\[ w=\sum_^n \left(\alpha_i y_i x_i\right) \] 

因此原來的g(x)表示式可以寫為:

\[ g(x)=\langle w,x \rangle +b = \sum_^n \left(\alpha_i y_i \langle x_i,x \rangle \right)+b \]

注意式子中x才是變數,也就是你要分類哪篇文件,就把該文件的向量表示代入到 x的位置,而所有的xi統統都是已知的樣本。還注意到式子中只有xi和x是向量,因此一部分可以從內積符號中拿出來,得到g(x)的式子為:

\[ g(x)=\sum_^n \left(\alpha_i y_i \langle x_i,x \rangle \right)+b \] (式2)

問題:

對於大樣本資料和小樣本資料,**的時候怎麼區分?希望高手指點一二!

支援向量機(SVM)

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

支援向量機SVM

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

SVM支援向量機

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