【问题标题】:How to implement a soft-margin SVM model using Matlab's quadprog?如何使用 Matlab 的 quadprog 实现软边距 SVM 模型?
【发布时间】:2013-03-09 18:54:40
【问题描述】:

假设我们有一个训练数据集{yᵢ, xᵢ},对于i = 1, ..., n,其中yᵢ 可以是-11xᵢ 可以是例如2D 或 3D 点。

一般来说,当输入点线性可分时,SVM模型可以定义如下

min 1/2*||w||²
w,b

受约束(对于i = 1, ..., n

yᵢ*(w*xᵢ - b) >= 1

这通常称为hard-margin SVM model,因此是constrained minimization problem,其中未知数是wb。我们也可以在要最小化的函数中省略1/2,因为它只是一个常数。

现在,documentation 关于 Matlab 的 quadprog 状态

x = quadprog(H, f, A, b) 最小化1/2*x'*H*x + f'*x 受限于A*x ≤ bA 是双精度矩阵,b 是双精度向量。

我们可以使用quadprog函数实现hard-margin 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))Chyper-parameter

如何使用 Matlab 的 quadprog 函数解决这个优化问题?我不清楚方程应该如何映射到quadprog 函数的参数。

soft-margin SVM 模型的“primal”形式(即上面的定义)可以转换为“dual”形式。我这样做了,我能够得到拉格朗日变量值(以对偶形式)。但是,我想知道我是否可以使用quadprog 直接解决原始形式而无需将其转换为对偶形式。

【问题讨论】:

    标签: matlab machine-learning svm quadprog


    【解决方案1】:

    我不明白这怎么会是个问题。让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);
    

    附:我可能会在一些小细节上犯错,但总体思路是正确的。

    【讨论】:

    • “n”变量被抛出的方式让我更加困惑,但我明白了。 n 变量在很多地方都不能很好地匹配。非常感谢。
    • @user1067334 n代表特征数还是训练样本数?
    【解决方案2】:

    如果让 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 的两部分中,第一部分用于 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)

    【讨论】:

      【解决方案3】:

      完整的代码。思路和上面一样。

      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,:);
      

      【讨论】:

      • 此代码不可运行。你能提供一个可运行的例子吗?例如,您应该提供X等。
      猜你喜欢
      • 2016-06-28
      • 2011-06-05
      • 2012-02-08
      • 2015-04-17
      • 1970-01-01
      • 2014-05-31
      • 2018-06-19
      • 1970-01-01
      • 2016-01-15
      相关资源
      最近更新 更多