Я не могу правильно передать параметры для обучения классификатора случайного леса в opencv из python.Случайный лес не работает в opencv python (cv2)
Я написал реализацию на C++, которая работала корректно, но не получала одинаковых результатов в python.
Я нашел некоторые примеры кода здесь: http://fossies.org/linux/misc/opencv-2.4.7.tar.gz:a/opencv-2.4.7/samples/python2/letter_recog.py
, который, кажется, указывает, что вы должны передать параметры в Словаре. Вот код, я использую:
rtree_params = dict(max_depth=11, min_sample_count=5, use_surrogates=False, max_categories=15, calc_var_importance=False, n_active_vars=0, max_num_of_trees_in_the_forest=1000, termcrit_type=cv2.TERM_CRITERIA_MAX_ITER)
classifier = cv2.RTrees()
classifier.train(train_data, cv2.CV_ROW_SAMPLE, label_data, params=rtree_params);
Я могу сказать, что классификатор становится обучен правильно, но это не так точно, как тот, который я тренировался с теми же параметрами в C++. Я довольно уверен, что параметры становятся признанными, потому что я получаю разные результаты, когда я настраиваю значения.
Я заметил, что когда я выдаю классификатор в файл, он имеет только одно дерево. Я уверен, что это проблема. Я посмотрел на реализацию OpenCV:
http://www.code.opencv.org/svn/gsoc2012/denoising/trunk/opencv-2.4.2/modules/ml/src/rtrees.cpp
Учитывая мои параметры, он должен вывести лес с 1000 деревьев. Я попытался установить аргументы max_num_of_trees_in_the_forest
на всевозможные сумасшедшие значения, и это не изменило поведение OpenCV.
Мысли?
Это второе предложение, похоже, сработало, но как вы это поняли? Было ли это просто просвещенное предположение о том, как обучаются некоторые из других классификаторов? Структура данных CvRTreeParams определяется здесь: http://docs.opencv.org/modules/ml/doc/random_trees.html#cvrtparams-cvrtparams Как вы выяснить соответствие между типом и C++ его представление python? – user3043337
Я искал в файле cv2.so текстовые символы и не видел max_num_of_trees_in_the_forest, а затем перешел через источник C++ для других способов настройки этого. Насколько мне известно, отображение автоматически генерируется, поэтому просто опыт или практика постепенно изучают, как он сопоставляется. Мне это кажется не очень удовлетворительным - хотя я предпочитаю использовать привязки Python, чем вообще C++. –