我想训练具有生猪特征的决策树。 当我尝试训练我的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;
}
}
有人可以指出正确的方向来解决此问题吗?
编辑: 如果将MinSampleCount设置为388(样本数),我不会收到错误,但预测将无法正常工作(它始终返回标签5)。