【发布时间】: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