2011-09-30 17 views
17

2.3.1 API Matıyla birlikte rastgele ormanlar kullanan bir örnek var mı, cvMat değil mi?OpenCV - Rasgele Orman Örneği

Temel olarak, 16x16x3 öğelerine sahip 1000 satırdan oluşan bir Matris Mat verisine ve Matrix Mat yanıtlarına her satırın hangi sınıfa ait olduğunu gösteren 1000x1 matrisine sahibim. Bu konuda rasgele orman algoritmasını çalıştırmak istiyorum.

+1

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

cevap

0

Verileri zaten doğru biçimde aldınız; Tüm kalan bir CvRTrees nesnesini başlatmak ve tahmininizi gerçekleştirmek.

Rastgele Ağaçlar v2.3 belgeleri için here bulunabilir. Ayrıca, CvRTree::train için parametrelerin çoğunun açıklamasına sahip olan CvStatModel::train() belgelerine de bakmak isteyeceksiniz. Tom, kullanmanız gereken yorumlarda iyi bir örnek oluşturdu.

Verilerinizle birlikte, özniteliklerinizin her birinin türünü belirtmek için bir Mat'a ihtiyacınız olacaktır. Bu Mat, her giriş özniteliği için bir satır ve çıktı türü için bir ek satır daha vardır (bu durumda davanızda 16x16x3 + 1 satır).

İsteğe bağlı olarak, ağaç sayısı, maksimum derinlik vb. Gibi parametreleri belirtmek için bir CvRTParams nesnesi kullanabilirsiniz. Aşağıdaki örnekte varsayılanları kullanıyorum.

İsterseniz, eğitim için hangi özellikleri ve hangi veri satırlarının kullanılacağını belirten valIdx ve sampleIdx Paspaslarını kullanabilirsiniz. Bu, ayrı paspaslarda onları almak için bir grup jimnastik yapmadan seçim eğitimi/validasyon verileri için yararlı olabilir. İşte

hızlı bir örnek:

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