我想解决凸优化问题。我需要最小化(1/2)*(||W||^2)
。 W是一个变量向量。这也是一个约束:y(i)*(transpose(W)*x(i)+b)>=1
。
我们需要使用SVM来解决这个问题。所以Y=[1;1;1;-1;-1]
。 b也是一个变量向量,它是截距项。我们需要找到最优W和最优b,以使(1/2)*(||W||^2)
最小。 x(i)是我们想要分类的域中的点。
这是我编码的但却错了。它只是不起作用。
cvx_begin
variables W(2, 1) b(5, 1)
minimize( 0.5*(pow_cvx(norm(W, 2), 2, 2)) )
subject to
Y*(x*W+b) >= One
cvx_end
答案 0 :(得分:2)
如果没有提供重现错误消息的代码,很难猜出CVX的问题。但作为第一个提示,您可以将问题中的目标修改为
cvx_begin
variables W(2, 1) b(5, 1)
minimize( norm(W, 2) )
subject to
Y*(x*W+b) >= One
cvx_end
,这将提供相同的最佳解决方案。您的目标(1/2)*(||W||^2)
的形式通常用于派生,以使数学更容易处理,但您不需要此表格用于CVX。否则你可以写
cvx_begin
variables W(2, 1) b(5, 1)
minimize( 0.5*sum(W.*W) )
subject to
Y*(x*W+b) >= One
cvx_end