我必须在监督学习中进行优化以获得我的权重。
我必须学习值(w1,w2,w3,w4)
,这样每当我的向量A = [a1 a2 a3 a4]
为1时,总和w1*a1 + w2*a2 + w3*a3 + w4*a4
变得大于0.5,当它为-1(标签)时,它变得小于0.5。
有人可以告诉我如何在Matlab中解决这个问题吗?我知道的一种方法是使用进化算法,采用随机值向量然后改变以选择最佳n值。
还有其他方法可以解决这个问题吗?
答案 0 :(得分:0)
您可以使用linprog
执行此操作
让A
成为一个大小为n
的矩阵,由4个由所有n
训练4-vecotrs组成的矩阵组成。您还应该有一个带有y
元素的向量n
(每个元素加上或减去1),代表每个培训4-vecvtor的标签。
使用A
和y
我们可以编写一个线性程序(请查看doc以获取我正在使用的参数的名称)。现在,您没有目标函数,因此您只需将f
设置为f = zeros(4,1);
您唯一拥有的是不等式约束(< a_i , w > - .5) * y_i >= 0
(其中<.,.>
是4向量a_i
和权重向量w
之间的点积。)
如果我的计算是正确的,那么这个约束可以写成
cmat = bsxfun( @times, A, y );
总的来说,你得到了
w = linprog( zeros(4,1), -cmat, .5*y );