我正在尝试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++ 实现,它具有加载/保存功能、更新功能和返回的预测类的概率?