Hai già ottenuto i dati nel formato corretto; non resta che istanziare un oggetto CvRTrees ed eseguire la tua previsione.
La documentazione per Random Trees v2.3 può essere trovata here. Dovrai anche esaminare la documentazione CvStatModel::train()
, che in realtà ha la descrizione della maggior parte dei parametri per CvRTree::train
. Tom ha fatto riferimento a un buon esempio completo nei commenti che dovresti usare.
Insieme ai dati, è necessario un tappetino per specificare il tipo di ciascun attributo. Questo tappetino ha una riga per ogni attributo di input e una riga aggiuntiva per il tipo di output (quindi 16x16x3 + 1 righe, nel tuo caso).
Opzionalmente, è possibile utilizzare un oggetto CvRTParams per specificare parametri come numero di alberi, profondità massima, ecc. Uso i valori predefiniti nell'esempio seguente.
Se lo si desidera, è possibile passare in valIdx e sampleIdx Mats che specificano quali attributi e quali righe di dati, rispettivamente, utilizzare per l'allenamento. Questo potrebbe essere utile per i training di selezione/i dati di validazione senza fare un po 'di ginnastica per ottenerli in Mats separati.
Ecco un rapido esempio:
#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);
fonte
2017-07-23 00:50:20
http://breckon.eu/toby/teaching/ml/examples/c++/opticaldigits_ex/randomforest.cpp –