随机森林RF算法简介
随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器。它包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。随机森林是一种灵活且易于使用的机器学习算法,即便没有超参数调优,也可以在大多数情况下得到很好的结果。随机森林也是最常用的算法之一,因为它很简易,既可用于分类也能用于回归。
随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的Bagging思想。
1、RF基本的构建算法过程
1. 用N来表示训练用例(样本)的个数,M表示特征数目。
2. 输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。
3. 从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
4. 对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。
5. 每棵树都会完整成长而不会剪枝,这有可能在建完一棵正常树状分类器后被采用)。
2、RF算法相关文献、论文
1. Panda Biswanath , Joshua S. Herbach , Sugato Basu , and Roberto J. Bayardo .( 2009 ).PLANET: Massively Parallel Learning of Tree Ensembles with MapReduce. Proceedings of the 35th International Conference on Very Large Data Bases. Retrieved from http://research.google.com/pubs/pub36296.html .
2. Leo Breiman . (September, 1994 ). Bagging Predictors. Technical Report No. 421.Department of Statistics, UC Berkeley. Retrieved from http:// statistics.berkeley.edu/sites/default/files/tech-reports/421.pdf .
3. Leo Breiman . (2001). Random forests . Machine Learning g , 45 : 5 – 32 . Retrieved from http://oz.berkeley.edu/~breiman/randomforest2001.pdf .
4. J.H. Friedman . (2001). Greedy Function Approximation: A Gradient Boosting Machine .Annals of Statistics,29(5): 1189–1232.Retrieved from http://statweb. stanford.edu/~jhf/ftp/trebst.pdf.
5. J.H. Friedman . (2002). Stochastic Gradient Boosting . Computational Statistics and Data Analysis , 38 (4): 367– 378 . Retrieved from http://statweb.stanford.edu/~jhf/ftp/stobst.pdf .
随机森林RF算法的应用
1、RF用于回归
klearn.ensemble.RandomForestRegressor的类构造函数
(1)、重点参数解释
n_estimators:整型,可选(缺省值为10)。此参数指定集成方法中决策树的数目。通常缺省值就可以工作得很好。如果想获得最佳的性能,就需要多于10 个决策树。可以通过做实验尝试确定最佳的决策树数目。正如全书始终强调的,合适的模型复杂度(决策树的深度和决策树的数目)取决于问题的复杂度和可获得的数据的规模。比较好的尝试是100 ~ 500。
max_depth:整型或者none, 可选(缺省值为None)。如果这个参数设置为None,决策树就会持续增长,直到叶子节点为空或者所含数据实例小于min_samples_split。除了指定决策树的深度,可以用参数max_leaf_nodes 来指定决策树的叶子节点数。如果指定了max_leaf_nodes,max_depth 参数就会被忽略。不设置max_depth,让决策树自由生长,形成一个满度的决策树可能可以获得性能上的好处。当然与之相伴的代价就是训练时间。在模型的训练过程中,可能需要尝试不同深度的决策树。
min_sample_split:整型,可选(缺省值为2)。当节点含有的数据实例少于min_sample_split 时,此节点不再分割。对含有较少实例的节点进行分割是过拟合错误的源头。
min_samples_leaf:整型,可选(缺省值为1)。如果分割导致节点拥有的数据实例少于min_sample_leaf,分割就不会进行。这个参数的缺省值实际上导致此参数被忽略。通常这是可行的,特别是对数据集进行头几次试运行时。可以用各种方法为这个参数选择一个更有意义的值。一个方法是参数选取为叶子节点含有实例数的平均值,这样如果叶节点含有多于1 个的数据实例,就可以获得更低的均方差。另一种方法是将此参数看作控制决策树深度的替代方法。
max_features:整型、浮点型或字符串型,可选(缺省值为None)。当查找最佳分割点时,需要考虑多少个属性是由max_features 参数和问题中一共有多少个属性共同决定的。假设问题数据集中共有nFeatures 个属性。则:
● 如果 max_features 是整型,则在每次分割时考虑 max_features 个属性。注:如果max_features > nFeatures,则抛出错误。
● 如果 max_features 是浮点型,max_features 表示需考虑的属性占全部属性的百分比,即int( max_features*nFeatures)。
● 可选择的字符串值如下:
auto max_features=nFeatures
sqrt max_features=sqrt(nFeatures)
log2 max_features=log2(nFeatures)
● 如果 max_features=None, 则 max_features=nFeatures。绝大多数训练过程的参数都在RandomForestRegressor的构造函数中设置。max_features参数是唯一没有使用缺省值。
(1)、此参数的缺省值(None)会导致在决策树的每个节点都要考虑全部的属性。这意味着实际上实现的是Bagging 方法,因为这里没有随机选择属性的过程。
Brieman 和Cutler 建议对回归问题使用sqrt(nFeatues) 个属性。模型通常对max_features 不是很敏感,但是这个参数还是有一些影响,因此可以根据需要尝试一些不同的值。
random_state:整型,RandomState 实例,或者None ( 缺省值为None)。
● 如果类型是整型,则此整数作为随机数生成器的种子。
● 如果是 RandomState 的一个实例,则此实例用来作为随机数生成器。
● 如果是None,则随机数生成器是numpy.random用的RandomState的一个实例。
RandomForestRegressor 类有几个属性,包括用来构成集成方法的决策树。RandomForestRegressor 类有用训练好的决策树进行预测的方法,因此通常不需要直接访问这些属性。但是可能需要访问变量importances。下面是对此变量的描述。
feature_importances这是一个数组,数组的长度等于问题的属性数(也就是nFeatures)。数组中的值是正的浮点数,表明对应的属性对预测结果的贡献重要性。属性的重要性由Brieman 在最初的随机森林论文中所提的一个方法来确定。基本思想是,每次选中一个属性,然后对属性的值进行随机置换,记录下预测准确性的变化,预测的准确性越高,此属性也越重要。
(2)、重点类解释
fit(XTrain, yTrain, sample_weight=None)
XTrain 是属性值的数组(训练数据),它有nInstances 行和nFeatures 列。yTrain 是目标(标签)值的数组。y 同样有nInstances 行。在本章的例子中可以看到yTrain 只有一列,但是此方法可以应用于具有不同目标的模型。因此y 可以有nTargets 列,每列对应一个结果(目标,标签)集合。Sample_weight 用来对训练数据集中的每个实例分配不同的权重,它有两种形式:缺省值是None,意味着所有输入实例具有相同的权重;如果对每个实
例分配不同的权重,sample_weight 就是一个数组,具有nInstances 行和1 列。
predict(XTest)
XTest 是属性值的数组(测试数据),基于这些属性值进行预测。此数组是predict() 方法的输入,此数组的列数与输入fit() 的数组的列数相同,但是可能具有不同的行数,也可能只有一行。Predict() 的输出形式与用于训练的目标数组y 相同。