繁体   English   中英

如何使用libsvm matlab固定参数cost和gamma以提高准确性?

[英]how can fixed parameters cost and gamma using libsvm matlab to improve accuracy?

我使用libsvm对包含1000个标签的数据库进行分类。 我是libsvm的新手,我发现选择参数c和g来提高性能的问题。 首先,这是我用来设置参数的程序:

  bestcv = 0;
for log2c = -1:3,
 for log2g = -4:1,
  cmd = ['-v 5 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g)];
  cv = svmtrain(yapp, xapp, cmd);
  if (cv >= bestcv),
   bestcv = cv; bestc = 2^log2c; bestg = 2^log2g;
 end
  fprintf('%g %g %g (best c=%g, g=%g, rate=%g)\n', log2c, log2g, cv, bestc, bestg, bestcv);
end
end

结果,该程序给出c = 8和g = 2,当我使用这些值c和g时,我发现准确率为55%。 为了进行分类,我对所有人使用svm one。

 numLabels=max(yapp);
 numTest=size(ytest,1);

   %# train one-against-all models
    model = cell(numLabels,1);
   for k=1:numLabels
      model{k} = svmtrain(double(yapp==k),xapp, '  -c 1000 -g 10 -b 1 ');
    end

 %# get probability estimates of test instances using each model
 prob_black = zeros(numTest,numLabels);
   for k=1:numLabels
     [~,~,p] = svmpredict(double(ytest==k), xtest, model{k}, '-b 1');
     prob_black(:,k) = p(:,model{k}.Label==1);    %# probability of class==k
   end

 %# predict the class with the highest probability
 [~,pred_black] = max(prob_black,[],2);
 acc = sum(pred_black == ytest) ./ numel(ytest)    %# accuracy

问题是我需要更改这些参数以提高性能。 例如,当我随机放置c = 10000和g = 100时,我发现更好的准确率:70%。

请帮助我,如何设置这些参数(c和g)以找到最佳准确率? 先感谢您

在机器学习中,超参数调整是一个重要的问题。 最简单的方法就是已经实现的方法:定义值的网格,然后在网格上计算模型,直到找到最佳的组合。 一个关键的假设是,网格本身是曲面的良好近似:它足够精细,不会错过任何重要的东西,但又不够精细,以至于浪费时间来计算与相邻值基本相同的值。 我不知道任何方法通常可以提前知道网格的精细程度。 举例说明:假设全局最优值为$(5,5)$,而该函数在其他位置基本平坦。 如果您的网格是$(0,0),(0,10),(10,10),(0,10)$,则将完全错过最优值。 同样,如果网格为$(0,0),(-10,-10),(-10,0),(0,-10)$,则您永远都不会接近最优值。 在这两种情况下,您都不希望找到最佳的自身。

但是,对于具有RBF内核的SVM,存在一些经验法则:$ \\ gamma \\ in \\ {2 ^ {-15},2 ^ {-14},...,2 ^ 5 \\} $和$ C的网格\\ in \\ {2 ^ {-5},2 ^ {-4},...,2 ^ {15} \\} $中的一个就是这样的建议。

如果在测试的网格值范围之外找到更好的解决方案,则建议您定义一个更大的网格。 但是,较大的网格需要花费更多时间进行评估,因此您要么必须等待一段时间才能获得结果,要么要采用更有效的方法来探索超参数空间。

另一种选择是随机搜索:定义要尝试的SVM数量的“预算”,并生成要测试的这么多随机元组。 这种方法大多数情况下仅用于基准测试,因为它完全不智能。

网格搜索和随机搜索都具有非常容易并行实现的优势。

更好的选择属于全局优化领域。 Marc Claeson等人设计了Optunity软件包,该软件包使用粒子群优化。 我的研究集中在高效全局优化算法( EGO )的改进上,该算法建立了一个高斯过程作为超参数响应面的近似值,并使用该方法对当前的最佳估计最有可能改善哪些超参数元组进行有根据的预测。

想象一下,您已经在一些超参数元组$(\\ gamma,C)$上评估了SVM,并且它具有一些样本外性能指标$ y $。 受EGO启发的方法的一个优点是,它假定附近$(\\ gamma,C)$的值y ^ * $将“接近”到y $,因此我们不必花时间探索这些值。附近的元组,尤其是在$ y-y_ {min} $非常大的情况下(其中$ y_ {min} $是我们发现的最小$ y $值)。 EGO将在估计有改善的可能性的点上识别和评估SVM,因此它将智能地在超参数空间中移动:在理想情况下,它将跳过性能低下的区域,而专注于高性能区域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM