随机森林的例子

OpenCV - Random Forest Example

本文关键字:森林 随机      更新时间:2023-10-16

是否有人有一些使用随机森林与2.3.1 API Mat而不是cvMat的例子?

基本上,我有一个矩阵垫数据,由1000行16x16x3元素和矩阵垫响应一个1000x1矩阵,每行属于哪个类。我想用随机森林算法。

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

Random Trees v2.3的文档可以在这里找到。您还需要查看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);