有没有人有使用随机森林与2.3.1 API垫,而不是cvMat一些例子?OpenCV - 随机森林示例
基本上我有一个矩阵矩阵数据,它由1000行16x16x3的元素组成,矩阵矩阵响应一个1000x1的矩阵来保存每行所属的类。我想对此运行随机森林算法。
有没有人有使用随机森林与2.3.1 API垫,而不是cvMat一些例子?OpenCV - 随机森林示例
基本上我有一个矩阵矩阵数据,它由1000行16x16x3的元素组成,矩阵矩阵响应一个1000x1的矩阵来保存每行所属的类。我想对此运行随机森林算法。
您已经获得正确格式的数据;剩下的就是实例化一个CvRTrees对象并执行你的预测。
Random Trees v2.3的文档可以找到here。您还需要查看CvStatModel::train()
文档,该文档实际上对CvRTree::train
的大多数参数进行了说明。汤姆在您应该使用的评论中引用了一个很好的完整示例。
随着你的数据,你需要一个Mat来指定你的每个属性的类型。这个Mat对于每个输入属性都有一行,对于输出类型有一行(在你的情况下是16x16x3 + 1行)。
(可选)您可以使用CvRTParams对象来指定像树数,最大深度等参数。我在下面的示例中使用默认值。
如果您愿意,您可以传入valIdx和sampleIdx 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);
http://breckon.eu/toby/teaching/ml/examples/c++/opticaldigits_ex/randomforest.cpp –