Support Vector Regression Implementation in CVX


(Lk V) #1

Hello experts,

I am new to CVX. I might be overlooking the DCP set rules. But I do not manage to run the problem (related to support vector regression–please see the attachment) in CVX.

Updated (to make the software run):

clear variables
N   = 100; 
M  = 2;
w  = [1;-1];     % weights
x  = randn(2,N); % input data
e  = randn(1,N); % noise
y  =  (w.')*x + e;
y  = y.';

lambda = 0.9;
eps = 0.5;
C   = 1/lambda;

cvx_begin 
    variables a(N) a_hat(N)
    minimize( norm((sum(a-a_hat))*x, 2)  - ((a-a_hat)'*y) + eps * sum(a+a_hat) )
    subject to
    0 <= a  <= C;
    0 <= a_hat  <= C;
    sum(a) - sum(a_hat) == 0;
cvx_end

Your help will be highly appreciated.

Additional questions: For some reasons, I can’t reply to Mark et al.
Instead of this cost " norm((sum(a-a_hat))*x, 2) ", I would like to implement with summation as given in the last part of eqn. (11.48) in the snapshot. Please suggest.

Thank you so much


(Mark L. Stone) #2

I believe you want
((a-a_hat)'*y')
i.e., with transpose on y. That will at least be conformal, and accepted by CVX.

You also need to use == , not = for equality constraints, such as what you intended with sum(a) - sum(a_hat) = 0;

Those two changes will allow the program to run. I leave it to you to determine whether that solves the correct optimization problem. Perhaps you’re off by a factor of 1/2 on the norm term, as well as not having squared it, etc. You can determine whether these really matter to you.


(Lk V) #3

Thank you for your help Mark!


(Lk V) #4

Thank you again for your help, Mark. For some reasons, I could not reply. Now, it seems, I can do it.
Now, the program runs at least. I have one more question.

Instead of this cost " norm((sum(a-a_hat))*x, 2) ", I would like to implement with summation as given in the last part of eqn. (11.48) in the snapshot. Please suggest.


(Mark L. Stone) #5

Your initial reply required moderator approval - perhaps an overactive spam filter or something.

You can apply square_pos to the norm, and then the multiplicative factor of 1/2.


(Lk V) #6

I see. Thank you. I will try.

I don’t know where to ask, why my support-vector regression (SVR) implementation in CVX do not produce sensible results. I need to dig into it further. I need to compare it with the implementation in matlab toolboox.