簡體   English   中英

使用K折交叉驗證Matlab的SVM分類器的可變錯誤率

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM