2011-09-30 10 views
17

Czy ktoś ma przykład z losowych lasów z macierzą API 2.3.1, a nie z cvMat?OpenCV - Losowy las Przykład

Zasadniczo mam dane Matrix Matrix, które składają się z 1000 wierszy z elementami 16x16x3 i Matrix Mat odpowiada na matrycę 1000x1, która określa, do której klasy należy dany wiersz. Chciałbym uruchomić na tym algorytmie losowego lasu.

+1

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

Odpowiedz

0

Masz już dane we właściwym formacie; wszystko, co pozostało, to utworzenie obiektu CvRTrees i wykonanie prognozy.

Dokumentacja dla Drzewa losowego v2.3 można znaleźć here. Będziesz także chciał zapoznać się z dokumentacją CvStatModel::train(), która faktycznie zawiera opis większości parametrów dla CvRTree::train. Tom odwołał się do dobrego kompletnego przykładu w komentarzach, których powinieneś użyć.

Wraz z Twoimi danymi będziesz potrzebować maty do określenia typu każdego z atrybutów. Ta mata ma jeden wiersz dla każdego atrybutu wejściowego i jeden dodatkowy wiersz dla typu wyjściowego (czyli 16x16x3 + 1 wiersze, w twoim przypadku).

Opcjonalnie można użyć obiektu CvRTParams do określenia parametrów takich jak liczba drzew, maksymalna głębokość itp. Używam wartości domyślnych w poniższym przykładzie.

Jeśli chcesz, możesz przekazać maty valIdx i sampleIdx, które określają, które atrybuty i które wiersze danych mają być użyte do treningu. Może to być przydatne do treningu selekcyjnego/danych walidacyjnych bez wykonywania ćwiczeń gimnastycznych, aby uzyskać je w oddzielnych Mats.

Oto krótki przykład:

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