OpenCV - 随机森林示例

Posted

技术标签:

【中文标题】OpenCV - 随机森林示例【英文标题】:OpenCV - Random Forest Example 【发布时间】:2011-11-28 09:04:33 【问题描述】:

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

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

【问题讨论】:

@TomJMuthirenthi 该链接不会将我带到我可以看到的相关位置.. 【参考方案1】:

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

可以在here 找到 Random Trees v2.3 的文档。您还需要查看CvStatModel::train() 文档,其中实际上包含CvRTree::train 的大多数参数的描述。 Tom 在您应该使用的 cmets 中引用了一个很好的完整示例。

除了您的数据,您还需要一个 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);

【讨论】:

以上是关于OpenCV - 随机森林示例的主要内容,如果未能解决你的问题,请参考以下文章

Opencv 300 - 随机森林预测返回错误答案

使用 OpenCV 的平凡随机森林不起作用,并且与 sklearn 不同

OpenCV 迭代随机森林训练

OpenCV 随机决策森林:如何获得后验概率

张量流随机森林回归

sklearn库学习----随机森林(RandomForestClassifier,RandomForestRegressor)