有沒有人有使用隨機森林與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 –