随机森林顾名思义,是用随机的方式建立一个森林。简单来说,随机森林就是由多棵CART(Classification And Regression Tree)构成的。对于每棵树,它们使用的训练集是从总的训练集中有放回采样出来的,这意味着,总的训练集中的有些样本可能多次出现在一棵树的训练集中,也可能从未出现在一棵树的训练集中。在训练每棵树的节点时,使用的特征是从所有特征中按照一定比例随机地无放回的抽取的,根据Leo Breiman的建议,假设总的特征数量为M,这个比例可以是sqrt(M),1/2sqrt(M),2sqrt(M)。
随机森林在多类识别上有足够的优点:随机森林可以作为天然的多类分类器,通过其学习特性进行bag弱分类器,不需要SVM类似的顶层多类训练;随机森林在训练的同时使用随机采样和特征选择,因此并不需要特别的剪枝,可以防止过拟合;并由于随机森林使用决策树,在本质上等同于布尔逻辑,理论上可以表达任意复杂的布尔函数,有强大的可扩充特性,因此随机森林在处理多样本问题上看似是无边界的,并容易实现在线学习方式。
其他描述可参考:http://www.cnblogs.com/hrlnw/p/3850459.html
一、OpenCV的RTrees:
- RTrees参数,参考链接:http://blog.csdn.net/pi9nc/article/details/12197731
------------CvRTParams --------------定义R.T.训练用参数,CvDTreeParams的扩展子类,但并不用到CvDTreeParams(单一决策树)所需的所有参数。比如说,R.T.通常不需要剪枝,因此剪枝参数就不被用到。
max_depth: :单棵树所可能达到的较大深度
min_sample_count: 树节点持续分裂的最小样本数量,也就是说,小于这个数节点就不持续分裂,变成叶子。
regression_accuracy: 回归树的终止条件,如果所有节点的精度都达到要求就停止
use_surrogates: 是否使用代理分裂。通常都是false,在有缺损数据或计算变量重要性的场合为true,比如,变量是色彩,而图片中有一部分区域因为光照是全黑的
max_categories: 将所有可能取值聚类到有限类,以保证计算速度。树会以次优分裂(suboptimal split)的形式生长。只对2种取值以上的树有意义
priors : 优先级设置,设定某些你尤其关心的类或值,使训练过程更关注它们的分类或回归精度。通常不设置
calc_var_importance : 设置是否需要获取变量的重要值,一般设置true
nactive_vars : 树的每个节点随机选择变量的数量,根据这些变量寻找较佳分裂。如果设置0值,则自动取变量总和的平方根
max_num_of_trees_in_the_forest: R.T.中可能存在的树的较大数量
forest_accuracy : 准确率(作为终止条件)
termcrit_type: 终止条件设置
— CV_TERMCRIT_ITER 以树的数目为终止条件,max_num_of_trees_in_the_forest生效
—CV_TERMCRIT_EPS 以准确率为终止条件,forest_accuracy生效
— CV_TERMCRIT_ITER | CV_TERMCRIT_EPS 两者同时作为终止条件
-------------CvRTrees::train -------------训练R.T.
return bool : 训练是否成功
train_data : 训练数据:样本(一个样本由固定数量的多个变量定义),以Mat的形式存储,以列或行排列,必须是CV_32FC1格式(Float格式!)
tflag train