使用K-fold交叉验证Matlab的SVM分类器的可变错误率

时间:2014-11-22 17:04:23

标签: matlab svm fold cross-validation

我使用K-Fold交叉验证来获取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代码执行的平均错误率吗?或者我应该使用什么价值?

1 个答案:

答案 0 :(得分:0)

您可以查看wiki

  

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

  

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

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

当然结果会有所不同。

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

此外,rng可用于获得固定的结果。