0

我必须在监督学习中进行优化以获得我的权重。

我必须学习这些值(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 值。

有没有其他方法可以解决这个问题?

4

1 回答 1

0

您可以使用linprog.
A一个大小n为 4 的矩阵,由您拥有的所有n训练 4-vecotrs 组成。您还应该有一个y带有n元素(每个加或减 1)的向量,表示每个训练 4-vecvtor 的标签。

使用A并且y我们可以编写一个线性程序(查看文档以获取我正在使用的参数的名称)。现在,您没有目标函数,因此您可以简单地设置ff = zeros(4,1);
您唯一拥有的是不等式约束(< a_i , w > - .5) * y_i >= 0(其中是 4-vector和 weight vector<.,.>之间的点积)。 如果我的计算是正确的,这个约束可以写成a_iw

cmat = bsxfun( @times, A, y );

总的来说,你得到

w = linprog( zeros(4,1), -cmat, .5*y );
于 2013-04-07T18:40:07.013 回答