2011-09-30 12 views
17

Có ai có một số ví dụ sử dụng Rừng ngẫu nhiên với API 2.3.1 và không phải là cvMat không?OpenCV - Ví dụ về rừng ngẫu nhiên

Về cơ bản, tôi có dữ liệu Ma trận Mat bao gồm 1000 hàng có 16x16x3 phần tử và ma trận Mat phản hồi ma trận 1000x1 chứa lớp mà mỗi hàng thuộc về. Tôi muốn chạy thuật toán rừng ngẫu nhiên về điều này.

+1

http://breckon.eu/toby/teaching/ml/examples/c++/opticaldigits_ex/randomforest.cpp –

Trả lời

0

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);