2013-03-20 228 views
6

我想使用Quadprog函數在MATLAB中求解SVM原始形式。當兩個類是線性可分,則SVM優化問題以得到權向量w,變得 1/2(|| || w^2)如何在MATLAB中求解SVM軟邊緣原始形式quadprog

服從約束義(WXI-B)> = 1

http://en.wikipedia.org/wiki/Support_vector_machine#Primal_form

這個matlab quadprog功能解決了以下方程

X = quadprog(H,F,A,b)最小化2分之1* X '* H * X + F' * X受限制A * x≤b。 A是雙打的矩陣,而b是雙打的矢量。

因此,原始形式可以很容易地映射到quadprog函數,以輕鬆獲得權重向量w .. H成爲一個單位矩陣。 f'變成零點矩陣。 A是較早 的約束的左側,因爲原始約束> = 1,b等於-1,因此當我們在兩側乘以-1時,它變爲< = -1。

當我這樣做時,體重矢量變得非常好。現在

,我試圖從這裏

http://en.wikipedia.org/wiki/Support_vector_machine#Soft_margin

這裏最小化方程是

分鐘((1/2)||解決SVM軟保證金情況瓦特|| 2 + C(小量的總和(I)) W,b

服從約束 義(WXI-b)> = 1 - eplison(I)> = 0。

如何使用MATLAB quadprog函數解決這個優化問題。它不清楚如何將方程映射到quadprog函數的參數。我一直在不顧運氣的情況下喋喋不休地說。

自從我研究SVM以來,雖然我花了很長時間,但從模糊的記憶中,我記得Soft Margin中的Primal Form是一個NP問題,這就是爲什麼我們將它轉​​換爲Wolfe Dual Representation來解決它,但我是不確定。

我將它轉換成雙重形式,並能夠在雙重形式中得到拉格朗日變量值,但是我想確認原始形式本身無法解決。

有誰知道如何使用matlab quadprog函數來解決這個問題嗎?或者如果它實際上是一個NP問題?

+0

這是一個二次規劃問題,所以 - 是的,它可以通過MATLAB的'quadprog'解決。你有什麼困難? – Romeo 2013-03-20 16:27:01

+0

我能夠解決正常的SVM罰款。但對於軟邊緣SVM,我無法理解最小化問題如何映射到quadprog函數。哪個變量映射到quadprog函數中的哪個參數,這就是我發現的困難。 – user1067334 2013-03-20 16:41:17

+0

看到我對這個問題的回答。 – Romeo 2013-03-20 16:45:59

回答

9

我不明白它是如何成爲問題的。讓z是我們(2n + 1)變量的向量:

z = (w, eps, b) 

然後,H成爲對角矩陣與第一n值在對角線上等於1最後n + 1設置爲零:

H = diag([ones(1, n), zeros(1, n + 1)]) 

矢量f可以可表示爲:

f = [zeros(1, n), C * ones(1, n), 0]' 

第一組約束的變爲:

Aineq = [A1, eye(n), zeros(n, 1)] 
bineq = ones(n, 1) 

其中A1是相同的基質如在原始的格式。

二組約束變爲下限:

lb = (inf(n, 1), zeros(n, 1), inf(n, 1)) 

然後就可以調用MATLAB:

z = quadprog(H, f, Aineq, bineq, [], [], lb); 

附:我可能會在一些小細節上弄錯,但總體思路是正確的。

+0

「n」變量被拋出的方式讓我更困惑,但我得到了一般想法。在很多地方,n變量不匹配。 非常感謝。 – user1067334 2013-03-22 02:48:42

+0

這裏A1是什麼? – tusharfloyd 2015-11-01 22:43:21

+0

@ user1067334 n代表特徵的數量或訓練樣本的數量? – tusharfloyd 2015-11-01 22:52:20

0

如果讓Z =(W; W0; EPS)。T爲一個長矢量具有n + 1個+ m個元素(M點的數量) 然後,

H= diag([ones(1,n),zeros(1,m+1)]). 
f = [zeros(1; n + 1); ones(1;m)] 

不等式約束可以

A = -diag(y)[X; ones(m; 1); zeroes(m;m)] -[zeros(m,n+1),eye(m)], 

其中X是在2份爲A的原始form.Out的n×m個輸入矩陣,第一部分是爲W0和第二部分是用於EPS:作爲被指定。

b = ones(m,1) 

等式約束:

Aeq = zeros(1,n+1 +m) 
beq = 0 

邊界:

lb = [-inf*ones(n+1,1); zeros(m,1)] 
ub = [inf*ones(n+1+m,1)] 

現在,z=quadprog(H,f,A,b,Aeq,beq,lb,ub)

0

完整代碼。這個想法和上面一樣。

n = size(X,1); 
m = size(X,2); 
H = diag([ones(1, m), zeros(1, n + 1)]); 
f = [zeros(1,m+1) c*ones(1,n)]'; 
p = diag(Y) * X; 
A = -[p Y eye(n)]; 
B = -ones(n,1); 
lb = [-inf * ones(m+1,1) ;zeros(n,1)]; 
z = quadprog(H,f,A,B,[],[],lb); 
w = z(1:m,:); 
b = z(m+1:m+1,:); 
eps = z(m+2:m+n+1,:);