使用 OpenCV 的琐碎随机森林不起作用,与 sklearn 不同

Trivial random forest with OpenCV doesn't work and isn't the same as sklearn

本文关键字:不起作用 sklearn 不同 森林 随机 OpenCV 使用      更新时间:2023-10-16

我正在尝试让最简单的随机森林示例起作用。训练数据为 2 个点 {0,0},标签为 0,{1,1},标签为 1。要预测的样本是 {2,2}。OpenCV 返回 0 而不是 1。以下是 C++ ( main.cpp 中的 OpenCV 代码:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/ml/ml.hpp>
using namespace std;
using namespace cv;
int main(int argc, char const *argv[]) {
  cout << " hi n";
  float trainingData[2][2] = { {0.0, 0.0}, {1.0, 1.0}};
  Mat training_data(2, 2, CV_32FC1, trainingData);
  float trainingClass[2] = {0.0,1.0};
  Mat training_class(2, 1, CV_32FC1, trainingClass);
  CvRTrees rtree;
  rtree.train(training_data, CV_ROW_SAMPLE, training_class);
  float sampleData[2] = {2.0, 2.0};
  Mat sample_data(2, 1, CV_32FC1, sampleData);
  cout << rtree.predict(sample_data) << "  <-- predictn";
  return 0;
}

cmake 文件:

cmake_minimum_required(VERSION 2.8)
project( main )
find_package( OpenCV REQUIRED )
add_executable( main main.cpp )
target_link_libraries( main ${OpenCV_LIBS} )

运行:

> cmake .;make;./main
 hi 
0  <-- predict

为了进行比较,这里有一个python的sklearn代码(rfc.py):

from sklearn.ensemble import RandomForestClassifier
X = [[0, 0], [1, 1]]
Y = [0, 1]
clf = RandomForestClassifier(n_estimators=10)
clf = clf.fit(X, Y)
print clf.predict([[2., 2.]])

运行:

> python rfc.py 
[1]

要训练的点数太少。 如果我将其更改为 3,一切正常。

min_sample_count更改为 2 也有效。