我正在尝试使用SVM将输入功能分为两类。我想使用10倍交叉验证来训练SVM分类器。我正在使用MATLAB内置函数。但是在将predict()
函数与crossval()
函数一起使用时,出现了错误:
未指定有效的系统或数据集。
有人知道如何解决此问题吗?
Training_Features = X;
Training_Labels = Y;
SVMModel =
fitcsvm(Training_Features,Training_Labels,'KernelFunction','RBF');
CVSVMModel = crossval(SVMModel);
[Predict_Labels,Predict_Scores] =
predict(CVSVMModel,Training_Features);
答案 0 :(得分:0)
我认为您对交叉验证功能的理解不正确。您的CVSVMModel
是所谓的ClassificationPartitionedModel
,它没有功能predict()
,因为交叉验证用于在使用WHOLE数据集进行训练之前测试模型的泛化(未经交叉验证)
我建议以下内容:
[Predict_Labels,Predict_Scores] = kfoldPredict(CVSVMModel);
,查看其在交叉验证期间在每个验证数据集上的表现SVMModel
并对其进行预测。编辑:
ClassificationPartitionedModel
是模型的集合(在您的情况下为10个不同的模型)。您可以通过以下方式访问甚至致电predict()
:
[Predict_Labels,Predict_Scores] = predict(CVSVMModel.Trained{1, 1},X);