1. 程式人生 > >在matlab環境下實現支援向量機演算法

在matlab環境下實現支援向量機演算法

作者:faaronzheng 轉載請註明出處!
關於支援向量機的理論部分我就不進行介紹了,網上有很多關於支援向量機的講解。如: 支援向量機通俗導論(理解SVM的三層境界)有興趣的可以自行查詢一下。這裡我主要介紹一下如何在matlab環境下自己實現支援向量機演算法。

需要用到的工具:matlab,cvx工具包
首先需要配置一下cvx的環境。cvx的配置和具體語法請參考 CVX Users’ Guide。cvx工具包和手冊
接下來我們直接從最後推匯出的對偶形式入手(不清楚為什麼是這個形式及各個符號意思的還請參考理論部分)
這裡寫圖片描述

function arf=getArf(xapp1,xapp2,C,eveSigma)
format long; data=[xapp1;xapp2]; K=CreateKernelMatrix(data,data,eveSigma); %構造核矩陣 label1=ones(size(xapp1,1),1); label2=ones(size(xapp2,1),1); label2(:,1)=2; label=[label1;label2]; n=size(data,1); vecone=ones(n,1); cvx_begin %用cvx優化目標函式 variable arf(n); expression part1; expression part2; part1=vecone'
*arf; part2=quad_form(arf,label'*K*label); max part1-1/2*part2; subject to %約束條件 for i=1:n arf(i)>=0; arf(i)<=C; end arf'*label==0; cvx_end end
上面這段程式碼的主要目的是獲得拉格朗日乘子α。一定有人想問知道α有什麼用呢?這是因為超平面都可以用α來表示。

這裡寫圖片描述
拉格朗日乘子α不為零的即為支援向量。這樣就可以求出w和b了。將w和b求出後我們就可以得到超平面。有了超平面就可以進行分類啦!

PS.上面程式碼中構造核矩陣的程式碼我是參考的SimpleMKL中的程式碼。具體可以參考Code部分