c++ - OpenCV - 随机森林示例

标签 c++ opencv decision-tree random-forest

有没有人使用带有 2.3.1 API Mat 而不是 cvMat 的随机森林的例子?

基本上,我有一个 Matrix Mat 数据,它由 1000 行和 16x16x3 个元素组成,一个 Matrix Mat 响应一个 1000x1 矩阵,该矩阵包含每行所属的类。我想对此运行随机森林算法。

最佳答案

您已经获得了正确格式的数据;剩下的就是实例化一个 CvRTrees 对象并执行您的预测。

可以找到随机树 v2.3 的文档 here .您还需要查看 CvStatModel::train()文档,实际上有 CvRTree::train 的大部分参数的描述。 Tom 在您应该使用的评论中引用了一个很好的完整示例。

除了您的数据,您还需要一个 Mat 来指定每个属性的类型。这个 Mat 每个输入属性有一行,输出类型有另外一行(在你的情况下是 16x16x3 + 1 行)。

您可以选择使用 CvRTParams 对象来指定参数,如树的数量、最大深度等。我在下面的示例中使用默认值。

如果您愿意,您可以传入 valIdx 和 sampleIdx Mats,它们分别指定哪些属性和哪些数据行用于训练。这对于选择训练/验证数据很有用,而无需做一堆体操来将它们放在单独的 Mats 中。

这是一个简单的例子:

#define ATTRIBUTES_PER_SAMPLE (16*16*3)
// Assumes training data (1000, 16x16x3) are in training_data
// Assumes training classifications (1000, 1) are in training_classifications

// All inputs are numerical. You can change this to reflect your data
Mat var_type = Mat(ATTRIBUTES_PER_SAMPLE + 1, 1, CV_8U );
var_type.setTo(Scalar(CV_VAR_NUMERICAL) ); // all inputs are numerical

// Output is a category; this is classification, not regression
var_type.at<uchar>(ATTRIBUTES_PER_SAMPLE, 0) = CV_VAR_CATEGORICAL;

// Train the classifier
CvRTrees* rtree = new CvRTrees;
rtree->train(training_data, CV_ROW_SAMPLE, training_classifications,
             Mat(), Mat(), var_type);

关于c++ - OpenCV - 随机森林示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7609150/

相关文章:

opencv - 如何将 remove_if 与 vector<point2f> 一起使用

machine-learning - 创建决策树和分割属性时遇到问题吗?

c++ - 使用指针,不调用重写的方法

python - OpenCV DestroyWindow 在 Ubuntu 上不工作。如何正确关闭窗口?

c++ - 删除最后一个节点,并将尾部更新为最后一个节点

python - 收到 “ValueError: not enough values to unpack (expected 2, got 1)”时,如何强制程序忽略并继续?

c# - 节点上的 Accord 决策树空输出

python - 如何使用 sklearn 提高决策树模型预测的准确性?

c++ - 在派生类构造函数中抛出异常。为什么调用基类析构函数而不调用派生类析构函数?

c++ - 模板类的模板成员函数的类外定义语法