"No valid system or dataset was specified" 在 MATLAB 中使用 predict()

"No valid system or dataset was specified" while using predict() in MATLAB

我正在尝试使用 SVM 将我的输入特征分为两个 类。我想使用 10 折交叉验证来训练 SVM 分类器。我正在使用 MATLAB 内置函数。但是在使用 predict() 函数和 crossval() 函数时,出现错误:

No valid system or dataset was specified.

有谁知道如何解决这个问题?

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);

我认为您对交叉验证功能的理解有误。您的 CVSVMModel 是所谓的 ClassificationPartitionedModel,它没有任何功能 predict(),因为交叉验证用于在使用整个数据集(未交叉验证)训练模型之前测试模型的泛化.

我建议如下:

  1. 调用 [Predict_Labels,Predict_Scores] = kfoldPredict(CVSVMModel); 以查看它在交叉验证期间对每个验证数据集的表现如何
  2. 如果您满意,请使用整个数据集训练新的 SVMModel 并使用该数据集进行预测。

编辑: ClassificationPartitionedModel 是模型的集合(在您的例子中是 10 个不同的模型)。您可以通过以下方式访问甚至调用 predict()

[Predict_Labels,Predict_Scores] = predict(CVSVMModel.Trained{1, 1},X);