c++ - 训练 cv:ml::DTrees 时如何修复“断言失败”
问题描述
我想训练一个具有猪特征的决策树。当我尝试训练我的 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)。
解决方案
推荐阅读
- swift - 字符串中的撇号
- sql - SQL 连接,所有连接都满足条件
- spring-boot - Spring Reactive 流不适用于 Netflix Zuul 反向代理
- php - Symfony 4 - 错误 11:启动服务器时出现分段错误
- c# - 第二个 Log4net 记录器未写入唯一文件
- tsql - 利用 SQL 数据自动执行调查并提取结果
- reactjs - ESLint:WebStorm 中的语言服务超时 ReactJS
- javascript - 为什么你必须在一个数字周围加上括号才能调用 toFixed 呢?
- angular - 值绑定在自定义组件中不起作用
- mysql - 使用转义字符编写“latin1”编码字节数组