在MATLAB中使用predict()时,“未指定有效的系统或数据集”

时间:2019-04-11 04:15:34

标签: matlab svm cross-validation predict

我正在尝试使用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);

1 个答案:

答案 0 :(得分:0)

我认为您对交叉验证功能的理解不正确。您的CVSVMModel是所谓的ClassificationPartitionedModel,它没有功能predict(),因为交叉验证用于在使用WHOLE数据集进行训练之前测试模型的泛化(未经交叉验证)

我建议以下内容:

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

编辑: ClassificationPartitionedModel是模型的集合(在您的情况下为10个不同的模型)。您可以通过以下方式访问甚至致电predict()

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