假设我们在MATLAB R2015b中有这个代码:
SVMModel = fitcsvm(INPUT, output,'KernelFunction','RBF','BoxConstraint',1);
CVSVMModel = crossval(SVMModel);
z = kfoldLoss(CVSVMModel)
fitcsvm
模型。在Crossval
中将on
设置为fitcsvm
的目的是什么(默认情况下,我们使用此选项进行10次交叉验证)? crossval
和kfoldLoss
使用与上述相同的方法?如果是,为什么MATLAB文档只提到这种方法没有设置Crossval
方法进行交叉验证?如果这些程序是相同的,我们如何使用第一个程序获得错误率?SVMModel
对象)?所以crossval
和kfoldLoss
仅用于计算误差,我们没有用这种验证方法进行预测。这是真的吗?使用整个数据对神经网络模型有效吗?关于第一个问题。将"CrossVal"
设置为"on"
并将训练好的模型设置为crossval()
函数都旨在实现同样的目标。你可以使用其中一种,这取决于你。
kFoldLoss()
是一个函数本身,不包含在“CrossVal”标志中。它将交叉验证的模型作为输入。无论您是使用fitcsvm()
中的“CrossVal”标志还是使用正确的crossval()
函数对此模型进行交叉验证。必须使用此功能是否要评估错误率。
关于第二个问题,简短的回答是肯定的。您必须使用fitcsvm()
返回的经过培训的支持向量机模型。交叉验证程序旨在验证您的模型,因此您可以了解其性能(并且10倍交叉验证只是众多可用方法中的一种),但它不执行任何预测。为此,您必须使用predict()
函数。我估计你有一个训练集和一个测试集(或验证集)及其各自的标签。使用训练集,您可以训练SVM模型,而使用验证集来执行预测阶段。 predict()
的主要输出是模型预测的标签向量,您可以将这些预测标签与验证集的真实标签相匹配,以便在验证中收集错误率。
我建议你避免使用"CrossVal"
旗帜,这样你就可以控制局势,因为你将拥有:
fitcsvm()
的输出crossval()
的输出,你也可以用kFoldLoss()
来评估它的表现predict()
和步骤#1中训练模型的预测标签