簡體   English   中英

在LIBSVM matlab中執行其他驗證

[英]Performing additional validation in LIBSVM matlab

我正在研究MATLAB LIBSVM一段時間做預測。 我有一個數據集,其中75%用於培訓,15%用於查找最佳參數並保留用於測試。 代碼如下。

trainX and trainY are the input and output training instances
testValX and testValY are the validation dataset I use
for j = 1:100
    for jj = 1:10
        model(j,jj) = svmtrain(trainY,trainX,...
        ['-s 3 -t 2 -c ' num2str(j) ' -p 0.001 -g ' num2str(jj) '-v 5']);
        [predicted_label, ~, ~]=svmpredict(testValY,...
        testValX,model(j,jj));
        MSE(j,jj) = sum(((predicted_label-testValY).^2)/2);
    end
end
[min_val,min_indi] = min(MSE(:));
best_predicted_model_rbf(i) = model(min_indi);

我的問題是這是否正確。 我正在創建具有不同c和g值的模型矩陣。 我使用-v選項,這是一個關鍵。 從預測的模型中,我使用驗證數據集進行預測,並使用計算均方誤差。 使用這個MSE我選擇最好的c和g。 由於我使用-v返回交叉驗證輸出,我遵循的程序是否正確?

首先,我認為顯示的代碼存在輕微問題,即num2str(jj) '-v 5']); 在-v之前沒有空格。 這可能導致該標志無法讀取。 在另一個問題中,你說過這個“有時會返回一個模型”,如果沒有讀取該標志會發生這種情況。 如果讀取該標志,則在使用'-v'標志時,您應該只獲得一個數字,而不是模型。

其次,看起來你在這里做了兩件不同的事情,其中​​任何一件都是合理的。 使用'-v'調用svmtrain會在訓練集上運行交叉驗證。 這不應該返回一個模型,它應該只返回一個mse估計。 您可以使用這些估計值來確定哪個參數設置最佳,然后在所有訓練數據上訓練一個具有該設置的模型。

無論如何,接下來你在保持驗證集testValX上調用svmpredict(y,x,model),但是用'-v'調用了svmtrain,模型在這一點上應該只是一個標量。 為了使此調用正確運行,您必須從svmtrain獲取模型而不使用'-v',以便它是一個結構。 你正在做的其他事情對於這種情況是有意義的,你正在使用testValX進行保持驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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