我必须在监督学习中进行优化以获得我的权重。
我必须学习这些值(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 值。
有没有其他方法可以解决这个问题?
我必须在监督学习中进行优化以获得我的权重。
我必须学习这些值(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 值。
有没有其他方法可以解决这个问题?
您可以使用linprog
.
设A
一个大小n
为 4 的矩阵,由您拥有的所有n
训练 4-vecotrs 组成。您还应该有一个y
带有n
元素(每个加或减 1)的向量,表示每个训练 4-vecvtor 的标签。
使用A
并且y
我们可以编写一个线性程序(查看文档以获取我正在使用的参数的名称)。现在,您没有目标函数,因此您可以简单地设置f
为f = zeros(4,1);
。
您唯一拥有的是不等式约束(< a_i , w > - .5) * y_i >= 0
(其中是 4-vector和 weight vector<.,.>
之间的点积)。
如果我的计算是正确的,这个约束可以写成a_i
w
cmat = bsxfun( @times, A, y );
总的来说,你得到
w = linprog( zeros(4,1), -cmat, .5*y );