假设我们获得{yᵢ, xᵢ}
的培训数据集i = 1, ..., n
,其中yᵢ
可以是-1
或1
,xᵢ
可以例如2D或3D点。
通常,当输入点可线性分离时,SVM模型可以定义如下
min 1/2*||w||²
w,b
受限制(对于i = 1, ..., n
)
yᵢ*(w*xᵢ - b) >= 1
这通常称为hard-margin SVM model,因此是constrained minimization problem,其中未知数为w
和b
。我们也可以省略函数中的1/2
,因为它只是一个常数。
现在,documentation关于Matlab的quadprog
个州
x = quadprog(H, f, A, b)
根据限制1/2*x'*H*x + f'*x
最小化A*x ≤ b
。A
是双打矩阵,b
是双精度数。
我们可以使用quadprog
函数实现硬边距SVM模型,以获得权重向量w
,如下所示
H
成为单位矩阵。f'
成为零矩阵。A
是约束的左侧b
等于-1
,因为原始约束为>= 1
,当我们在两边乘以<= -1
时,它变为-1
。现在,我正在尝试实施soft-margin SVM model。这里的最小化方程是
min (1/2)*||w||² + C*(∑ ζᵢ)
w,b
受限制(对于i = 1, ..., n
)
yᵢ*(w*xᵢ - b) >= 1 - ζᵢ
ζᵢ >= 0
,其中∑
是求和符号,ζᵢ = max(0, 1 - yᵢ*(w*xᵢ - b))
和C
是hyper-parameter。
如何使用Matlab的quadprog
函数解决此优化问题?我不清楚如何将等式映射到quadprog
函数的参数。
软边距SVM模型的“原始”形式(即上面的定义)可以转换为“dual”形式。我做到了,我能够得到拉格朗日变量值(双重形式)。但是,我想知道我是否可以使用quadprog
直接解决原始形式而无需将其转换为双重形式。
答案 0 :(得分:9)
我不明白这是怎么回事。让z
成为(2n + 1)
变量的载体:
z = (w, eps, b)
然后,H
变为对角矩阵,对角线上的前n
值等于1
,最后n + 1
设为零:
H = diag([ones(1, n), zeros(1, n + 1)])
向量f
可表示为:
f = [zeros(1, n), C * ones(1, n), 0]'
第一组约束变为:
Aineq = [A1, eye(n), zeros(n, 1)]
bineq = ones(n, 1)
其中A1
是与原始形式相同的矩阵。
第二组约束成为下界:
lb = (inf(n, 1), zeros(n, 1), inf(n, 1))
然后你可以调用MATLAB:
z = quadprog(H, f, Aineq, bineq, [], [], lb);
P.S。我可能会在一些小细节中弄错,但总的想法是正确的。
答案 1 :(得分:-1)
如果让z =(w; w0; eps)T是具有n + 1 + m个元素的长向量。(m个点数) 然后,
H= diag([ones(1,n),zeros(1,m+1)]).
f = [zeros(1; n + 1); ones(1;m)]
不等式约束可以指定为:
A = -diag(y)[X; ones(m; 1); zeroes(m;m)] -[zeros(m,n+1),eye(m)],
其中X是原始形式的n x m输入矩阵。在A的2个部分中,第一部分用于w0,第二部分用于eps。
b = ones(m,1)
等式约束:
Aeq = zeros(1,n+1 +m)
beq = 0
边界:
lb = [-inf*ones(n+1,1); zeros(m,1)]
ub = [inf*ones(n+1+m,1)]
现在,z=quadprog(H,f,A,b,Aeq,beq,lb,ub)
答案 2 :(得分:-1)
完整的代码。这个想法和上面一样。
n = size(X,1);
m = size(X,2);
H = diag([ones(1, m), zeros(1, n + 1)]);
f = [zeros(1,m+1) c*ones(1,n)]';
p = diag(Y) * X;
A = -[p Y eye(n)];
B = -ones(n,1);
lb = [-inf * ones(m+1,1) ;zeros(n,1)];
z = quadprog(H,f,A,B,[],[],lb);
w = z(1:m,:);
b = z(m+1:m+1,:);
eps = z(m+2:m+n+1,:);