«Не указана допустимая система или набор данных» при использовании predict() в MATLAB

#matlab #svm #cross-validation #predict

#matlab #svm #перекрестная проверка #прогнозировать

Вопрос:

Я пытаюсь классифицировать мои входные функции на два класса, используя 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:

Я думаю, вы неправильно поняли функциональность перекрестной проверки. Ваш CVSVMModel так называемый ClassificationPartitionedModel , который не имеет функции predict() , поскольку перекрестная проверка предназначена для тестирования обобщения вашей модели, ПРЕЖДЕ чем вы обучите ее ВСЕМУ набору данных (без перекрестной проверки).

Я предлагаю следующее:

  1. Вызовите [Predict_Labels,Predict_Scores] = kfoldPredict(CVSVMModel); , чтобы узнать, насколько хорошо он работает с каждым набором данных проверки во время перекрестной проверки
  2. Если вы удовлетворены, обучите новый SVMModel со всем набором данных и прогнозируйте с этим.

РЕДАКТИРОВАТЬ: A ClassificationPartitionedModel — это набор моделей (в вашем случае 10 разных). Вы можете получить к ним доступ и даже вызвать predict() их, например:

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