Opencv 300 - 随机森林预测返回错误答案

Posted

技术标签:

【中文标题】Opencv 300 - 随机森林预测返回错误答案【英文标题】:Opencv 300 - Random Forest Predict returns wrong answer 【发布时间】:2016-02-15 17:40:41 【问题描述】:

你们对以下 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";

谢谢,

【问题讨论】:

【参考方案1】:

我知道我可能有点晚了,但我在使用 OpenCV 2.4.13 时遇到了同样的问题,而且似乎 OpenCV 的 RandomTrees 算法不喜欢值为 0 的类,

我的意思是,如果您的 响应矩阵的一个或多个元素为 0,则 RTree 算法将始终预测为 0。

我通过用另一个值替换 response 矩阵中的所有 0 来解决它(例如,在你的情况下 2 就可以了)。

【讨论】:

以上是关于Opencv 300 - 随机森林预测返回错误答案的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 随机决策森林:如何获得后验概率

在 Python 中创建随机森林预测模型时面临错误

r 随机森林错误 - 新数据中的预测变量类型不匹配

随机森林算法怎么提高预测数据的准确率

当训练数据居中时,XGBoost 和随机森林导致对测试集的持续预测

如何在python中用随机森林预测多个类?