Подтвердить что ты не робот

OpenCV - Пример случайного леса

Есть ли у кого-нибудь пример использования Random Forests с API-интерфейсом 2.3.1 API, а не cvMat?

В основном у меня есть Matrix Mat data, который состоит из 1000 строк с элементами 16x16x3, а Matrix Mat отвечает матрица 1000x1, которая содержит класс, к которому принадлежит каждая строка. Я хотел бы запустить алгоритм случайного леса на этом.

4b9b3361

Ответ 1

У вас уже есть данные в правильном формате; все, что осталось, - создать экземпляр объекта CvRTrees и выполнить ваше предсказание.

Документацию для Random Trees v2.3 можно найти здесь. Вы также захотите посмотреть документацию CvStatModel::train(), которая фактически содержит описание большинства параметров для CvRTree::train. Том упомянул хороший полный пример в комментариях, которые вы должны использовать.

Наряду с вашими данными вам понадобится Mat, чтобы указать тип каждого из ваших атрибутов. Этот Mat имеет одну строку для каждого входного атрибута и одну дополнительную строку для типа вывода (так что 16x16x3 + 1 строка в вашем случае).

При желании вы можете использовать объект CvRTParams для указания таких параметров, как количество деревьев, максимальная глубина и т.д. Я использую значения по умолчанию в приведенном ниже примере.

Если вам нравится, вы можете передать valIdx и sampleIdx Mats, которые определяют, какие атрибуты и какие строки данных, соответственно, использовать для обучения. Это может быть полезно для отбора/валидации данных, не выполняя кучу гимнастики, чтобы получить их в отдельных матах.

Вот пример:

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