【问题标题】:Variable error rate of SVM Classifier using K-Fold Cross Vaidation Matlab使用 K-Fold 交叉验证 Matlab 的 SVM 分类器的可变错误率
【发布时间】:2015-01-20 16:53:15
【问题描述】:

我正在使用 K 折交叉验证来获取 SVM 分类器的错误率。这是我得到 8 折交叉验证错误率的代码:

data = load('Entrenamiento.txt');
group = importdata('Grupos.txt');
CP = classperf(group);

N = length(group);
k = 8; 
indices = crossvalind('KFold',N,k); 
single_error = zeros(1,k);
    for j = 1:k 
        test = (indices==j);
        train = ~test;
        SVMModel_1 = fitcsvm(data(train,:),group(train,:),'BoxConstraint',1,'KernelFunction','linear');
        classification = predict(SVMModel_1,data(test,:)); 
        classperf(CP,classification,test); 
        single_error(1,j) = CP.ErrorRate;
    end
confusion_matrix = CP.CountingMatrix 
VP = confusion_matrix(1,1);
FP = confusion_matrix(1,2);
FN = confusion_matrix(2,1);
VN = confusion_matrix(2,2);
mean_error = mean(single_error)

但是,每次运行脚本时,mean_error 都会发生变化。这是由于crossvalind,它会生成随机交叉验证索引,所以每次我运行脚本时,它都会生成不同的随机索引。

我应该怎么做才能计算出真正的错误率?我应该计算n 代码执行的平均错误率吗?或者我应该使用什么值?

【问题讨论】:

  • 他们都是真实的错误率。只接受其中一个是安全的。您可以增加k 以使错误更接近(如果不是)。错误率的范围是多少?
  • 错误率的范围是0.0785,方差是1.3103e-04。
  • 我相信错误率很好。您可以选择一个结果,或者可能对某些结果变得刻薄,但这不是必需的。也许使用rng 可以帮助您获得固定的随机化。其实交叉验证的目的就是把数据打乱一次,不多!

标签: matlab svm fold cross-validation


【解决方案1】:

您可以查看wiki

在 k 折交叉验证中,原始样本被随机划分为 k 个大小相等的子样本。

然后可以对折叠的 k 个结果进行平均(或以其他方式组合)以产生单个估计。

所以不用担心随机选择折叠的不同错误率。

当然结果会有所不同。

但是,如果您的错误率范围很广,那么增加 k 会有所帮助。

还可以使用rng 获得固定结果。

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 2020-07-30
    • 2018-09-11
    • 2019-02-19
    • 2011-10-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多