【问题标题】:Wierd behavoir while training an SVM classifier训练 SVM 分类器时的奇怪行为
【发布时间】:2016-12-20 19:28:15
【问题描述】:

我正在寻找 C(成本参数)的最佳值来训练我的 SVM 分类器。这是我的代码:

clear all; close all; clc

% Load training features and labels
[y, x] = libsvmread('training_data.train'); %the training dataset is named training_data.train


cost=[2^-7,2^-5,2^-3,2^-1,2^1,2^3,2^5,2^7,2^9,2^11,2^13,2^15];
accuracy=zeros(1,length(cost)); %This array will store the accuracy values corresponding to each element in the cost array

for i = 1:length(cost)
  opt = sprintf('-c %i -v 3',cost(i));
  accuracy(i)=svmtrain(y,x,opt);
end

accuracy

我正在使用 LIBSVM 库。当我运行这个程序时,准确度数组中填充了非常奇怪的值: 这是输出:

第 1 至 8 列:

67.335 93.696 91.404 92.550 93.696 93.553 93.553 93.553

第 9 到 12 列:

93.553 93.553 93.553 93.553

这意味着我在 2^-5 上获得了最高的交叉验证准确度。我应该在 C 的最高值上获得最高精度吗? (据我所知,这是错误分类的惩罚因素)。这是预期的行为吗? (我正在使用 UCI ML 数据库构建一个用于乳腺癌识别的分类器)。

【问题讨论】:

    标签: machine-learning svm


    【解决方案1】:

    我应该在 C 的最高值上获得最高的准确度吗? (据我所知,这是错误分类的惩罚因素)。

    不,不能保证,因为 SVM 成本不是基于准确度的,它使用特定的 代理 函数,该函数仅表现得大致类似于准确度,但您可以预期会有许多随机波动。一般来说,您应该期望高 C 的值很高,但不一定是一般的最高值。

    这是预期的行为吗? (我正在使用 UCI ML 数据库构建一个用于乳腺癌识别的分类器)。

    是的,这是可能的结果。

    【讨论】:

    • 感谢您的回答。我是 Stack Overflow 的新手,因此,我不能赞成你的回答。但它仍然有帮助。
    • @PrashantPandey 如果它回答了你的问题,你应该接受他的回答(尽管有 SO 分数,这应该总是可能的)。
    • 做到了。感谢您的提示。
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 2013-08-12
    • 2014-05-05
    • 1970-01-01
    • 2019-04-20
    • 2012-06-27
    • 2018-05-26
    • 2019-06-28
    相关资源
    最近更新 更多