2014-02-17 3 views
1

Я пытаюсь получить простейший пример случайного леса для работы. Данные обучения составляют 2 балла {0,0} с меткой 0 и {1,1} с меткой 1. Проба для прогнозирования - {2,2}. OpenCV возвращает 0, а не 1. Вот код OpenCV в C++ (main.cpp):Тривиальный случайный лес с OpenCV не работает и не совпадает с sklearn

#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) << " <-- predict\n"; 
    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 

Для сравнения, вот код sklearn python (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] 

ответ

1

количество баллов для обучения на слишком мало. если я изменю его на 3, все будет работать.

изменение min_sample_count 2 также работает.