Python随机森林模型RandomForestClassifier参数说明
A. max_features:
随机森林允许单个决策树使⽤特征的最⼤数量。 Python为最⼤特征数提供了多个可选项。 下⾯是其中的⼏个:
Auto/None :简单地选取所有特征,每颗树都可以利⽤他们。这种情况下,每颗树都没有任何的限制。
sqrt :此选项是每颗⼦树可以利⽤总特征数的平⽅根个。 例如,如果变量(特征)的总数是100,所以每颗⼦树只能取其中的10个。“log2”是另⼀种相似类型的选项。
0.2:此选项允许每个随机森林的⼦树可以利⽤变量(特征)数的20%。如果想考察的特征x%的作⽤, 我们可以使⽤“0.X”的格式。
max_features如何影响性能和速度?
增加max_features⼀般能提⾼模型的性能,因为在每个节点上,我们有更多的选择可以考虑。 然⽽,这未必完全是对的,因为它降低了单个树的多样性,⽽这正是随机森林独特的优点。 但是,可以肯定,你通过增加max_features会降低算法的速度。 因此,你需要适当的平衡和选择最佳max_features。
B. n_estimators:
在利⽤最⼤投票数或平均值来预测之前,你想要建⽴⼦树的数量。 较多的⼦树可以让模型有更好的性能,但同时让你的代码变慢。 你应该选择尽可能⾼的值,只要你的处理器能够承受的住,因为这使你的预测更好更稳定。
C. min_sample_leaf:
如果您以前编写过⼀个决策树,你能体会到最⼩样本叶⽚⼤⼩的重要性。 叶是决策树的末端节点。 较⼩的叶⼦使模型更容易捕捉训练数据中的噪声。 ⼀般来说,我更偏向于将最⼩叶⼦节点数⽬设置为⼤于50。在你⾃⼰的情况中,你应该尽量尝试多种叶⼦⼤⼩种类,以到最优的那个。
1) RF划分时考虑的最⼤特征数max_features: 可以使⽤很多种类型的值,默认是"None",意味着划分时考虑所有的特征数;如果random python
是"log2"意味着划分时最多考虑log2Nlog2N 个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑N−−√N 个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分⽐,即考虑(百分⽐xN)取整后的特征数。其中N为样本总特征数。⼀般来说,如果样本特征数不多,⽐如⼩于50,我们⽤默认的"None"就可以了,如果特征数⾮常多,我们可以灵活使⽤刚才描述的其他取值来控制划分时考虑的最⼤特征数,以控制决策树的⽣成时间。
2) 决策树最⼤深度max_depth: 默认可以不输⼊,如果不输⼊的话,决策树在建⽴⼦树的时候不会限制⼦树的深度。⼀般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最⼤深度,具体的取值取决于数据的分布。常⽤的可以取值10-100之间。
3) 内部节点再划分所需最⼩样本数min_samples_split: 这个值限制了⼦树继续划分的条件,如果某节点的样本数少于
min_samples_split,则不会继续再尝试选择最优特征来进⾏划分。 默认是2.如果样本量不⼤,不需要管这个值。如果样本量数量级⾮常⼤,则推荐增⼤这个值。
4) 叶⼦节点最少样本数min_samples_leaf: 这个值限制了叶⼦节点最少的样本数,如果某叶⼦节点数⽬⼩于样本数,则会和兄弟节点⼀起被剪枝。 默认是1,可以输⼊最少的样本数的整数,或者最少样本数占样本总数的百分⽐。如果样本量不⼤,不需要管这个值。如果样本量数量级⾮常⼤,则推荐增⼤这个值。
5)叶⼦节点最⼩的样本权重和min_weight_fraction_leaf:这个值限制了叶⼦节点所有样本权重和的最⼩值,如果⼩于这个值,则会和兄弟节点⼀起被剪枝。 默认是0,就是不考虑权重问题。⼀般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很⼤,就会引⼊样本权重,这时我们就要注意这个值了。
6) 最⼤叶⼦节点数max_leaf_nodes: 通过限制最⼤叶⼦节点数,可以防⽌过拟合,默认是"None”,即不限制最⼤的叶⼦节点数。如果加了限制,算法会建⽴在最⼤叶⼦节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。
7) 节点划分最⼩不纯度min_impurity_split:  这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均⽅差)⼩于这个阈值,则该节点不再⽣成⼦节点。即为叶⼦节点 。⼀般不推荐改动默认值1e-7。
上⾯决策树参数中最重要的包括最⼤特征数max_features, 最⼤深度max_depth, 内部节点再划分所需最⼩样本数min_samples_split 和叶⼦节点最少样本数min_samples_leaf。