繁体   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