Opencv 300 — Random Forest Predict возвращает неверный ответ

Ребята, вы понимаете, что не так со следующим простым примером Random Forest в OpenCV 300 (он всегда предсказывает «0», что неправильно):

Mat train_data= (Mat_<int>(6,3) << 1, 1, 1, 2, 2, 2, -1, -1, -1, 0, 1, 2, 2, 3, 4, -1, -2, -3);
Mat response = (Mat_<int>(1,6) << 0,0,0,1, 1, 1);

Ptr<TrainData> tdata = TrainData::create(train_data, ROW_SAMPLE, response);

Ptr<RTrees> model;
model = RTrees::create();
model->setMaxDepth(4);
model->setMinSampleCount(5);
model->setRegressionAccuracy(0);
model->setUseSurrogates(false);
model->setMaxCategories(15);
model->setPriors(Mat());
model->setCalculateVarImportance(true);
model->setActiveVarCount(4);
model->setTermCriteria(TC(100,0.01f));
model->train(tdata);

Mat sample;
sample = (Mat_<float>(1,3) << 0,0,0);  // if I use <int> I'll get error
cout << model->predict(sample) <<"\n";

sample = (Mat_<float>(1,3) << -4,-5,-6);
cout << model->predict(sample) <<"\n";

sample = (Mat_<float>(1,3) << 9,9,9);
cout << model->predict(sample) <<"\n";

sample = (Mat_<float>(1,3) << 19,20,21);
cout << model->predict(sample) <<"\n";

Спасибо,

2

Решение

Я знаю, что могу немного опоздать, но у меня была та же проблема с OpenCV 2.4.13, и кажется, что алгоритм RandomTrees в OpenCV не любит классы со значением 0,

Я имею в виду, если один или несколько элементов вашего ответ Matrice равно / равно 0, алгоритм RTree всегда будет предсказывать 0.

Я решил это, заменив все 0 в ответ Матрица на другое значение (например, 2 в вашем случае будет в порядке).

1

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

Других решений пока нет …

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