1.演算法思想:在特徵空間上通過最大化間隔(硬間隔和軟間隔)的思想來實現分類,支援向量機的間隔最大化有別於感知機的誤差(損失函式)最小化思想。在非線性分類時,通過引入核函式,將線性不可分的資料特徵對映到無限維的特徵空間,使得資料線性可分。支援向量機的間隔最大化,可形式化為乙個求解凸二次規劃問題,通常採用序列最小最優化(smo)演算法,將原二次規劃問題分解為只有兩個變數的二次規劃子問題,並對子問題求解,直到所有變數滿足kkt條件為止。
2.支援向量機基本包括:線性可分支援向量機、線性支援向量機、非線性支援向量機。
1)線性可分支援向量機:線性可分支援向量機適合資料線性可分的情況,它是支援向量機的基礎,其他都是在此基礎上改進而得到的。支援向量機是乙個二分類的演算法,目標是通過使距離分離超平面距離最近的點距離最大化,通過固定函式間隔為1,簡化優化問題,進而尋找最優的分類超平面。為了方便求解,引用拉格朗日乘子構建拉格朗日函式,將原問題轉化成對偶問題。這樣做,一是對偶問題往往容易求解;二是自然引入核函式,進而推廣到非線性分類問題。通過求解拉格朗日乘子α,求出原問題的w和b,從而得到分離超平面及分類決策函式。
2)線性支援向量機:在現實問題中,訓練資料集往往是線性不可分的,即在樣本中出現雜訊或特異點。此時,就要引入鬆弛變數ξ≥0,使線性分類中的硬間隔變成這裡的軟間隔。即允許部分資料點的函式間隔小於1。為了實現結構風險最小化,同時引入懲罰引數c>0,來平衡經驗風險和期望風險。
3)非線性支援向量機:對解線性分類問題,線性支援向量機是一種非常有效的方法。但是,當分類問題是非線性時,就需要非線性支援向量機了。其主要特點四和i利用核技巧。其基本思想是通過乙個非線性變換將輸入空間(歐式空間或離散空間)對應於乙個特徵空間(希爾伯特空間),使得原本線性不可分的資料變得線性可分,再求解線性分類問題即可。常用的核函式包括:多項式核函式和高斯核函式等。
3.下面給出非線性支援向量機的演算法流程:
4.序列最小化演算法(smo)
接下來就是最關鍵的求解分類函式的部分了。在支援向量機學習問題中,可以形式化為求解凸二次規劃問題。但是當訓練樣本容量很大時,這些演算法效率會非常低,以至於無法使用。為了高效地實現支援向量機學習,人們提出了許多快速實現演算法,這裡介紹其中的序列最小化(sequential minimal optimization)演算法。
使用smo求解上述演算法(1)部分的優化問題,在這個問題中,變數是拉格朗日乘子,乙個變數αi對應乙個樣本點,變數總數等於訓練樣本數n。
smo 是一種啟發式演算法,其基本思想是:若所有變數滿足kkt條件,則完成最優化求解。否則選取兩個變數,固定其他變數,針對這兩個變數構建乙個二次規劃問題。整個smo演算法包括兩個部分:求解兩個變數二次規劃的解析方法和選擇變數的啟發式方法。由於公式繁多,具體不再敘述。
5.使用簡化版smo演算法求解線性可分支援向量機分類函式的python**:
#載入資料
def loaddataset(filename):
datamat=;labelmat=
fr=open(filename)
for line in fr.readlines():
linearr=line.strip().split('\t')
return datamat,labelmat
#從0-m中選擇乙個!=i的數
def selectjrand(i,m):
j=iwhile(j==i):
j=int(random.uniform(0,m))
return j
#調整alpha的值在l-h之間
def clipalpha(aj,h,l):
if aj>h:
aj=h
if ajtoler) and (alphas[i]>0)):
j=selectjrand(i,m)
fxj=float(multiply(alphas,labelmat).t*(datamatrix*datamatrix[j,:].t))+b
ej=fxj-float(labelmat[j])
alphaiold=alphas[i].copy()
alphajold=alphas[j].copy()
if(labelmat[i]!=labelmat[j]):
l=max(0,alphas[j]-alphas[i])
h=min(c,c+alphas[j]-alphas[i])
else:
l=max(0,alphas[j]+alphas[i]-c)
h=min(c,alphas[j]+alphas[i])
if l==h:print "l==h";continue
eta=2.0*datamatrix[i,:]*datamatrix[j,:].t-\
datamatrix[i,:]*datamatrix[i,:].t-\
datamatrix[j,:]*datamatrix[j,:].t
if eta>=0:print "eta>=0";continue
alphas[j]-=labelmat[j]*(ei-ej)/eta
alphas[j]=clipalpha(alphas[j],h,l)
if(abs(alphas[j]-alphajold)<0.00001):
print "j not moving enough";
continue
alphas[i]+=labelmat[j]*labelmat[i]*(alphajold-alphas[j])
b1=b-ei-labelmat[i]*(alphas[i]-alphaiold)*\
datamatrix[i,:]*datamatrix[i,:].t-\
labelmat[j]*(alphas[j]-alphajold)*\
datamatrix[i,:]*datamatrix[j,:].t
b2=b-ej-labelmat[i]*(alphas[i]-alphaiold)*\
datamatrix[i,:]*datamatrix[j,:].t-\
labelmat[j]*(alphas[j]-alphajold)*\
datamatrix[j,:]*datamatrix[j,:].t
if(0alphas[i]):b=b1
elif(0alphas[j]):b=b2
else:b=(b1+b2)/2.0
alphapairschanged+=1
print "iter:%d i:%d,paris changed %d"%\
(iter,i,alphapairschanged)
if (alphapairschanged==0):iter+=1
else:iter=0
print "iteration number:%d"%iter
return b,alphas
6.思考:(暫略。。。) 機器學習之支援向量機
描述 用於處理二分類問題,對於二維線性可分的問題,尋找決策邊界 分割線 使得支撐向量到決策邊界的距離盡可能的大.對於線性不可分的問題,則首先將樣本特徵對映到更高維度,再尋找乙個超平面,使得支撐向量到超平面的距離盡可能的小.通過核函式得展開達到這一目的.常用的核函式有線性核,多項式核,高斯核.引入正則...
機器學習筆記 支援向量機演算法
基本思想 定義在特徵空間上的間隔最大的線性分類器。主要學習策略為使得間隔最大化,可形式化為乙個求解二次規劃的問題,等價於正則化的合頁損失函式的最小化問題。分類 線性 線性可分支援向量機 線性支援向量機 非線性 非線性支援向量機 當訓練資料線性可分時,通過硬間隔最大化,學習乙個線性的分類器,即線性可分...
機器學習 支援向量機
線性可分支援向量機 1.回顧感知機模型 2.函式間隔與幾何間隔 3.支援向量 4.svm模型目標函式與優化 5.線性可分svm的演算法過程 線性可分支援向量機 1.軟間隔最大化 2.線性分類svm的軟間隔最大化目標函式的優化 3.軟間隔最大化時的支援向量 4.軟間隔最大化的線性可分svm的演算法過程...