我有来自两个类的一些对象的特征向量,我的目标是用这些信息训练一个提升的分类器。在查看documentation和字母识别示例后,我认为这样做会很简单,但出于某种原因,我在训练分类器时遇到以下错误:
OpenCV错误:未实现功能/功能(Boosted树只能用于2级分类。)
以下是我的代码的相关部分:
Mat X = Mat::zeros(train_size, feat_size, CV_32F);
Mat Y = Mat::zeros(train_size, 1, CV_32S);
// filling of X with the corresponding features for each training sample
// filling of Y with labels 1 and -1 depending on the class
CvBoostParams params(CvBoost::DISCRETE, 100, 0.95, 1, false, 0);
Mat var_type = Mat(feat_size+1, 1, CV_8U, Scalar::all(CV_VAR_ORDERED));
var_type.ptr<uchar>(feat_size)[1] = CV_VAR_CATEGORICAL;
CvBoost boost;
boost.train(X, CV_ROW_SAMPLE, Y, Mat(), Mat(), var_type, Mat(), params);
我认为这里的问题是var_type Mat。据我所知,它必须包含每个功能一个条目和一个响应条目。由于我的特征都是数值测量,我将第一个元素设置为CV_VAR_ORDERED,将最后一个元素设置为CV_VAR_CATEGORICAL。
有人可以向我解释为什么OpenCV这不是2级分类吗?
另一件事:对于预测,我不想要实际预测的标签,但是想要属于第1类的概率。如果我能得到加权投票的总和,这实际上并不难计算。预测方法有一个标志 returnSum ,但documentation表示:如果为真,则返回投票总数而不是类别标签。它们是否真的意味着总票数或加权投票的总和?