【问题标题】:matlab - vlfeat - vl_pegasos (svm) classificationmatlab - vlfeat - vl_pegasos (svm) 分类
【发布时间】:2013-01-23 00:44:12
【问题描述】:

我在 Matlab 中使用 VLFeat 库进行一些图像分析工作。我想使用他们的 Pegasos SVM 实现,因为他们已经实现了一些内核,特别是 Chi2 内核。

但是,我发现文档让我感到困惑。在this tutorial 之后,我有一个模型w 和一个偏差b,但是如何使用它来对我的测试数据进行分类?

我的起始数据是这样的(维度)..

size(train_data) = 
    200    210

size(train_labels) =
    1      210

size(test_data) =
    200    140

size(test_labels) =
    1      140

我可以用..构建一个数据集。

dataset = vl_maketrainingset(train_data, int8(train_labels))

给我..

dataset = 
      data: [200x210 double]
    labels: [1x210 int8]

然后我可以构建模型..

[w b info] = vl_svmpegasos(dataset,0.01,'MaxIterations',5000);

w is my model ('w'eights?) is a vector size of size 200 x 1 with values range from 0 to 1.

我认为我需要将此向量乘以我的test_data 以获得某种分数,但我不确定这些分数的含义是什么。

非常感谢任何方向。

【问题讨论】:

    标签: matlab svm vlfeat


    【解决方案1】:

    你看过他们的Caltech 101 example code吗?它使用 pegasos 并对结果进行了很好的评估。

    这里是相关代码sn-p:

    % --------------------------------------------------------------------
    %                                                            Train SVM
    % --------------------------------------------------------------------
    
    lambda = 1 / (conf.svm.C *  length(selTrain)) ;
    w = [] ;
    for ci = 1:length(classes)
      perm = randperm(length(selTrain)) ;
      fprintf('Training model for class %s\n', classes{ci}) ;
      y = 2 * (imageClass(selTrain) == ci) - 1 ;
      data = vl_maketrainingset(psix(:,selTrain(perm)), int8(y(perm))) ;
      [w(:,ci) b(ci)] = vl_svmpegasos(data, lambda, ...
                                      'MaxIterations', 50/lambda, ...
                                      'BiasMultiplier', conf.svm.biasMultiplier) ;
    
      model.b = conf.svm.biasMultiplier * b ;
      model.w = w ;
    
    % --------------------------------------------------------------------
    %                                                Test SVM and evaluate
    % --------------------------------------------------------------------
    
    % Estimate the class of the test images
    scores = model.w' * psix + model.b' * ones(1,size(psix,2)) ;
    [drop, imageEstClass] = max(scores, [], 1) ;
    
    % Compute the confusion matrix
    idx = sub2ind([length(classes), length(classes)], ...
                  imageClass(selTest), imageEstClass(selTest)) ;
    confus = zeros(length(classes)) ;
    confus = vl_binsum(confus, ones(size(idx)), idx) ;
    

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 2016-01-15
      • 2014-06-18
      • 2019-01-30
      • 2013-07-04
      • 1970-01-01
      • 2013-05-20
      • 2011-03-05
      • 2013-04-20
      相关资源
      最近更新 更多