我使用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
代码执行的平均错误率吗?或者我应该使用什么价值?
答案 0 :(得分:0)
您可以查看wiki,
在k-fold交叉验证中,原始样本被随机分为k个相等大小的子样本。
和
然后可以对折叠的k结果进行平均(或以其他方式组合)以产生单一估计。
所以不用担心随机选择折叠的错误率不同。
当然结果会有所不同。
但是,如果您的错误率很宽,那么增加k
会有所帮助。
此外,rng
可用于获得固定的结果。