#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()
, поскольку перекрестная проверка предназначена для тестирования обобщения вашей модели, ПРЕЖДЕ чем вы обучите ее ВСЕМУ набору данных (без перекрестной проверки).
Я предлагаю следующее:
- Вызовите
[Predict_Labels,Predict_Scores] = kfoldPredict(CVSVMModel);
, чтобы узнать, насколько хорошо он работает с каждым набором данных проверки во время перекрестной проверки - Если вы удовлетворены, обучите новый
SVMModel
со всем набором данных и прогнозируйте с этим.
РЕДАКТИРОВАТЬ: A ClassificationPartitionedModel
— это набор моделей (в вашем случае 10 разных). Вы можете получить к ним доступ и даже вызвать predict()
их, например:
[Predict_Labels,Predict_Scores] = predict(CVSVMModel.Trained{1, 1},X);