Использование OpenCV Random Forest для регрессии

Ранее я использовал случайный лес для задачи классификации, устанавливая параметры с помощью примера Вот в качестве руководства. Работает отлично. Однако сейчас я хочу решить проблему регрессии.

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

Для задачи 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;

И настройка параметров:

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 так, чтобы он работал как регрессор. Я много искал, но не смог найти ответ на этот вопрос. Самое близкое объяснение, которое я получил, в этот ответ. Однако это все еще не имеет никакого смысла.

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

2

Решение

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

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

и вы можете установить regression_accuracy на очень маленькое число, например, 0,0001f.

3

Другие решения


По вопросам рекламы [email protected]