«Не была указана допустимая система или набор данных» при использовании предиката () в MATLAB - PullRequest
1 голос
/ 11 апреля 2019

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

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

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

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

EDIT: A ClassificationPartitionedModel - это коллекция моделей (в вашем случае 10 разных). Вы можете получить к ним доступ и даже позвонить predict(), например:

[Predict_Labels,Predict_Scores] = predict(CVSVMModel.Trained{1, 1},X);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...