Я хочу тренировать дерево решений с функциями борова.
Когда я пытаюсь обучить мою модель cv :: ml :: DTrees, я получаю следующую ошибку:
OpenCV(3.4.3) Error: Assertion failed (n >= 0) in cv::ml::TrainDataImpl::getValues, file C:\build\3_4_winpack-build-win64-vc14\opencv\modules\ml\src\data.cpp, line 890
Я понимаю, что количество образцов (признаков) должно соответствовать количеству ответов (меток), и оба должны быть> = 0.
Мои метки cv :: Mat и cv :: Mat имеют одинаковое количество строк (388).
Вот как я пытаюсь это сделать:
cv::Ptr<cv::ml::DTrees> model = cv::ml::DTrees::create();
cv::Ptr<cv::ml::TrainData> data = cv::ml::TrainData::create(feats, cv::ml::ROW_SAMPLE, labels);
model->train(data);
model-> train (data) завершается ошибкой, когда вызывает эту функцию:
void getValues( int vi, InputArray _sidx, float* values ) const CV_OVERRIDE
{
Mat sidx = _sidx.getMat();
int i, n = sidx.checkVector(1, CV_32S), nsamples = getNSamples();
CV_Assert( 0 <= vi && vi < getNAllVars() );
CV_Assert( n >= 0 );
const int* s = n > 0 ? sidx.ptr<int>() : 0;
if( n == 0 )
n = nsamples;
}
}
Может кто-нибудь указать мне правильное направление, чтобы решить эту проблему?
EDIT:
Если я установлю MinSampleCount на 388 (количество выборок), я не получу ошибку, но прогноз не будет работать правильно (он всегда возвращает метку 5).