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