[英]Variable error rate of SVM Classifier using K-Fold Cross Vaidation Matlab
我正在使用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
代碼執行的平均錯誤率嗎? 還是我應該使用什么值?
您可以檢查Wiki ,
在k倍交叉驗證中,原始樣本被隨機分為k個相等大小的子樣本。
和
然后可以將來自折疊的k個結果進行平均(或以其他方式組合)以產生單個估計。
因此,不必擔心隨機選擇折疊的不同錯誤率。
當然結果會有所不同。
但是,如果您的錯誤率范圍很廣,那么增加k
會有所幫助。
也可以使用rng
獲得固定結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.