Bạn đã có dữ liệu ở định dạng phù hợp; tất cả những gì còn lại là để khởi tạo một đối tượng CvRTrees và thực hiện dự đoán của bạn.
Tài liệu cho Random Trees v2.3 có thể được tìm thấy here. Bạn cũng sẽ muốn xem tài liệu CvStatModel::train()
, thực tế có mô tả hầu hết các tham số cho CvRTree::train
. Tom đã tham chiếu một ví dụ hoàn chỉnh tốt trong các bình luận mà bạn nên sử dụng.
Cùng với dữ liệu của bạn, bạn sẽ cần một Mat để chỉ định loại của mỗi thuộc tính của bạn. Mat này có một hàng cho mỗi thuộc tính đầu vào và một hàng bổ sung cho loại kết xuất (do đó, 16x16x3 + 1 hàng, trong trường hợp của bạn).
Tùy chọn, bạn có thể sử dụng đối tượng CvRTParams để chỉ định các tham số như số lượng cây, độ sâu tối đa, v.v. Tôi sử dụng các giá trị mặc định trong ví dụ bên dưới.
Nếu bạn thích, bạn có thể chuyển vào valIdx và sampleIdx Mats chỉ định thuộc tính nào và hàng dữ liệu nào tương ứng, để sử dụng cho đào tạo. Điều này có thể hữu ích cho việc lựa chọn đào tạo/xác nhận dữ liệu mà không làm một loạt các thể dục dụng cụ để có được chúng trong Mats riêng biệt.
Dưới đây là một ví dụ nhanh:
#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);
Nguồn
2017-07-23 00:50:20
http://breckon.eu/toby/teaching/ml/examples/c++/opticaldigits_ex/randomforest.cpp –