Я пытаюсь использовать CvNormalBayesClassifier
от OpenCV. Но я не могу обновить модель, которую я уже тренировал.
Вот мой код для обучения модели на начальном этапе:
Mat training_data = Mat(counter_instances, ALLFEATURESIZE, CV_32FC1);
Mat training_classifications = Mat(counter_instances, 1, CV_32SC1);;
CvNormalBayesClassifier *bayes = new CvNormalBayesClassifier;
//filling the training data, 1 row per instance.
//filling the classification data, 1 row and 1 column per instance, integer as class label
bayes->train(training_data, training_classifications);
bayes->save("bayes.model");
Таким образом, это работает без ошибок, и модель сохраняется.
Но когда я пытаюсь загрузить эту модель и обновить ее, я получаю сообщение об ошибке.
Я использую этот код:
Mat newTraining_data = Mat(1, ALLFEATURESIZE, CV_32FC1);
//fill data with one instance
Mat newLabel = Mat(1, 1, CV_32SC1);
newLabel.at<int>(0, 0) = (int) label; //some label
bayes->load("bayes.model");
bayes->train(newTraining_data, newLabel, Mat(), Mat(), true);
Это ошибка, которую я получаю:
OpenCV Error: Bad argument (There is only a single class) in
cvPreprocessCategoricalResponses, file /tmp/buildd/libopencv-2.3.1+svn6514+branch23
/modules/ml/src/inner_functions.cpp, line 729
Я попытался вставить все экземпляры, которые я использовал изначально, и просто добавить одну строку с новым экземпляром. Это работает как-то, но занимает столько же времени, сколько необходимо для обучения новой модели. Что действительно долго …
Что я делаю неправильно? Как это сделать правильно?
если никто не может помочь мне с этим:
Кто-нибудь знает реализацию наивного байесовского языка в C ++ с функцией загрузки / сохранения, функцией обновления и вероятностью возврата предсказанного класса?
Задача ещё не решена.
Других решений пока нет …