2

我有来自两个类的一些对象的特征向量,我的目标是用这些信息训练一个增强的分类器。查看文档和字母识别示例后,我认为这样做很简单,但由于某种原因,在训练分类器时出现以下错误:

OpenCV 错误:功能/特征未实现(提升树只能用于 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 类的概率。如果我能得到加权投票的总和,这实际上并不难计算。predict 方法有一个标志returnSum文档说:如果为真,则返回投票总和而不是类标签。它们真的是指票数总和还是加权票数总和?

4

0 回答 0