Matlab 的 vlfeat_svmtrain 参数介绍与用法原理

Vlfeat_svmtrain--- Train a Support Vector Machine:

      调用格式:[W B] = VL_svmtrain(X, Y, lambda),用来 从数据向量X 和标签Y 训练一个线性支持向量机

      X是 D乘N 的矩阵,每个示例有一列,一共有N列(N个训练样本),和 D个 单个元素或双元素 的特征维度(如4个LAB颜色特征通道)

      Y是两个元素的向量(即-1或+1标签),同样是N个训练样本。


      To a first order approximation,函数计算权重向量w和偏移b,使得计算得来的分数 w'.*x(:,i) + b,对于所有的 i 来说 具有相同的标签 (i),就是说训练出来的SVM分类器结果,与训练集x(:,i)里面带的标签 i 要一致的


      VL_SVMTRAIN(DATASET, LABELS, LAMBDA),(数据集、标签、λ),特别是输入数据集结构,其允许更复杂的输入格式被支持(参见VL_SVMDataSet());


      [W, B, INFO] = VL_SVMTRAIN(...) 还能额外返回以下字段结构信息:


      迭代:

      执行的迭代次数;

      Epoch:

      数据样本集反复训练的的迭代次数。(Epoch:当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个 epoch。然而,当一个 epoch 对于计算机而言太庞大的时候,就需要把它分成多个小块);

      ElapsedTime:

      训练开始后经过的时间;

      目标:

      支持向量机目标值;

      正则化:

      正则化值;

      损失:

      损失函数输出值。


      [W,B,INFO,Score]=VL_SVMTRAIN(X,Y,LABMDA)

      该形式为 每个训练样本 返回SVM得分的行向量。这可以与选项求解器、模型和偏差结合使用,以评估新数据点上现有的支持向量。此外,信息还将包含相应的SVM损失、正则化和目标函数值。如果这些信息不重要,则可以传递空向量Y而不是实际的标签以及空正则化参数,也就是在输出里 [   ,~] 表示即可。


       FORMULATION--公式献上:

       VL_SVMTRAIN() 最小化目标函数用如下形式:

       LAMBDA/2 |W|^2 + 1/N SUM_i LOSS(W' X(:,i), Y(i)),where LOSS(W' Xi,Yi) is the loss (hinge by default) for i-th
   data point,损失函数是hinge loss,即:

      

       通过将每个数据点X的特征扩展为常数B0,从而使目标成为 

       LAMBDA/2 (|W|^2 + WB^2) 1/N SUM_i LOSS(W' X(:,i) + WB B0, Y(i)),就会产生偏差,注意,这会导致学习偏差B=WB B0向原点收缩。


       以下为示例


       使用0.1作为正则化系数,从数据 X 和标签 Y 中学习线性支持向量机:


       [w, b] = vl_svmtrain(x, y, 0.1) ;


       支持向量机SVM可以通过以下方式对新数据XTEST进行评估:


       scores = w'*xtest + b ;           (这就是refine_pos_rf.m程序里的scores=svm_struct.w'*feat+svm_struct.b;)


       或者,VL_SVMTRAIN()也可用于评估:


       [~,~,~, scores] = vl_svmtrain(xtest, y, 0, 'model', w, 'bias', b, 'solver', 'none') ;

       [~,得分]=vl_svmtrain(xtest,y,0,‘model’,w,‘偏差’,b,‘求解器’,‘none’);该形式在X是数据集结构时特别有用。

  


       



      



猜你喜欢

转载自blog.csdn.net/skywalker_123/article/details/81026418