2014-06-20 2 views
1

Раньше я использовал задачу Random Forest for Classification, задав параметры с помощью примера here в качестве руководства. Он работает отлично. Однако теперь я хочу решить проблему регрессии.Использование OpenCV Random Forest для регрессии

У меня есть идея, что это связано с матом var_type, определяющим тип данных в методе поездов Random Forest, однако не совсем уверен, что соответствует каждому из этих флагов.

Для задачи Classifcation это выглядит следующим образом (код, скопированный из ссылки выше):

// define all the attributes as numerical 
// alternatives are CV_VAR_CATEGORICAL or CV_VAR_ORDERED(=CV_VAR_NUMERICAL) 
// that can be assigned on a per attribute basis 

Mat var_type = Mat(ATTRIBUTES_PER_SAMPLE + 1, 1, CV_8U); 
var_type.setTo(Scalar(CV_VAR_NUMERICAL)); // all inputs are numerical 

// this is a classification problem (i.e. predict a discrete number of class 
// outputs) so reset the last (+1) output var_type element to CV_VAR_CATEGORICAL 

var_type.at<uchar>(ATTRIBUTES_PER_SAMPLE, 0) = CV_VAR_CATEGORICAL; 

И настройки Params:

float priors[] = {1,1,1,1,1,1,1,1,1,1}; // weights of each classification for classes 
    // (all equal as equal samples of each digit) 

CvRTParams params = CvRTParams(25, // max depth 
           5, // min sample count 
           0, // regression accuracy: N/A here 
          false, // compute surrogate split, no missing data          
           15, // max number of categories (use sub-optimal algorithm for larger numbers) 
          priors, // the array of priors 
          false, // calculate variable importance 
           4,  // number of variables randomly selected at node and used to find the best split(s). 
           100, // max number of trees in the forest 
          0.01f,    // forrest accuracy 
     CV_TERMCRIT_ITER | CV_TERMCRIT_EPS // termination cirteria 
           ); 

Обучение использует var_type и Params следующим образом:

CvRTrees* rtree = new CvRTrees; 

rtree->train(training_data, CV_ROW_SAMPLE, training_classifications, 
       Mat(), Mat(), var_type, Mat(), params); 

Мой вопрос в том, как я могу настроить OpenCV Random Forest так, чтобы он работал как regre SSOR. Я много искал, но не смог найти ответ на этот вопрос. Самое близкое объяснение у меня есть в ответе this. Однако это все еще не имеет никакого смысла.

Я ищу простой ответ, объясняющий var_type и params для регрессии.

ответ

2

использовать его для регрессии, вы просто должны установить var_type в CV_VAR_ORDERED т.е.

var_type.at<uchar>(ATTRIBUTES_PER_SAMPLE, 0) = CV_VAR_ORDERED;

и вы можете установить regression_accuracy в очень небольшом количестве, как 0.0001f.

Смежные вопросы