Как исправить «утверждение не удалось» при обучении cv: ml :: DTrees - PullRequest
0 голосов
/ 13 января 2019

Я хочу тренировать дерево решений с функциями борова. Когда я пытаюсь обучить мою модель 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).

...