gpt4 book ai didi

matlab - 在 LIBSVM matlab 中执行额外验证

转载 作者:行者123 更新时间:2023-11-30 08:55:39 24 4
gpt4 key购买 nike

我正在 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 进行保留验证。

关于matlab - 在 LIBSVM matlab 中执行额外验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20388324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com