在OpenCV Python中随机森林无法正常工作

我似乎无法正确地传递参数来在OpenCV的Python接口中训练随机森林分类器。

我在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的行为。

有什么想法吗?


回答:

不确定这是否会有很大帮助,但我认为:

n_active_vars=0

应该改为

nactive_vars=0

另外,你可以尝试调整term_crit参数。例如,尝试添加:

term_crit=(cv2.TERM_CRITERIA_MAX_ITER,1000,1)

到你的字典中。

我认为这将设置当森林中添加了1000棵树时终止的标准。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注