随机森林回归器的参数详解

整体参数分类

类型 参数
弱分类器数量 n_estimators
弱分类器的训练数据 bootstrap, oob_score, max_samples, max_features, random_state
弱分类器结构 criterion, max_depth, min_samples_split,
min_samples_leaf, min_weight_fraction_leaf, max_leaf_nodes,
min_impurity_decrease
其他 n_jobs, verbose, ccp_alpha

其中弱分类器结构参数

类型 参数
弱分类器结构 criterion:弱评估器分枝时的不纯度衡量指标

max_depth:弱评估器被允许的最大深度,默认None

min_samples_split:弱评估器分枝时,父节点上最少要拥有的样本个数

min_samples_leaf:弱评估器的叶子节点上最少要拥有的样本个数

min_weight_fraction_leaf:当样本权重被调整时,叶子节点上最少要拥有的样本权重

max_leaf_nodes:弱评估器上最多可以有的叶子节点数量

min_impurity_decrease:弱评估器分枝时允许的最小不纯度下降量

弱分类器的训练数据

类型 参数
弱分类器的训练数据 bootstrap:是否对样本进行随机抽样

oob_score:如果使用随机抽样,是否使用袋外数据作为验证集

max_samples:如果使用随机抽样,每次随机抽样的样本量

max_features:随机抽取特征的数目

random_state:控制一切随机模式

其他参数

类型 参数
其他 n_jobs:允许调用的线程数

verbose:打印建树过程

ccp_alpha:结构风险上的系数,可用于控制过拟合

warm_start:支持增量学习

如下是对上述参数的详解(如有需要可自行查看)

n_estimators

n_estimators是森林中树木的数量,即弱评估器的数量,在sklearn中默认100,它是唯一一个对随机森林而言必填的参数。n_estimators对随机森林模型的精确程度、复杂度、学习能力、过拟合情况、需要的计算量和计算时间都有很大的影响,因此n_estimators往往是我们在调整随机森林时第一个需要确认的参数。对单一决策树而言,模型复杂度由树结构(树深、树宽、树上的叶子数量等)与数据量(样本量、特征量)决定,而对随机森林而言,模型复杂度由森林中树的数量、树结构与数据量决定,其中树的数量越多,模型越复杂。

criterion与feature_importances_

与分类树中的信息熵/基尼系数不同,回归树中的criterion可以选择"squared_error"(平方误差),“absolute_error”(绝对误差)以及"poisson"(泊松偏差)。对任意样本 i i i而言, y i y_i yi为真实标签, y i ^ \hat{y_i} yi^为预测标签,则各个criterion的表达式为:

平方误差: ∑ ( y i − y i ^ ) 2 \sum{(y_i - \hat{y_i})^2} (yiyi^)2


绝对误差: ∑ ∣ y i − y i ^ ∣ \sum{|y_i - \hat{y_i}|} yiyi^


泊松偏差: 2 ∑ ( y i l o g ( y i y i ^ ) − ( y i − y i ^ ) ) 2\sum{(y_ilog(\frac{y_i}{\hat{y_i}})-(y_i - \hat{y_i}))} 2(yilog(yi^yi)(yiyi^))

其中平方误差与绝对误差是大家非常熟悉的概念,作为分枝标准,平方误差比绝对误差更敏感(类似于信息熵比基尼系数更敏感),并且在计算上平方误差比绝对误差快很多。泊松偏差则是适用于一个特殊场景的:当需要预测的标签全部为正整数时,标签的分布可以被认为是类似于泊松分布的。正整数预测在实际应用中非常常见,比如预测点击量、预测客户/离职人数、预测销售量等。我们现在正在使用的数据(房价预测),也可能比较适合于泊松偏差。

另外,当我们选择不同的criterion之后,决策树的feature_importances_也会随之变化,因为在sklearn当中,feature_importances_是特征对criterion下降量的总贡献量,因此不同的criterion可能得到不同的特征重要性。

对我们来说,选择criterion的唯一指标就是最终的交叉验证结果——无论理论是如何说明的,我们只取令随机森林的预测结果最好的criterion。

调节树结构来控制过拟合

max_depth

最粗犷的剪枝方式,从树结构层面来看,对随机森林抗过拟合能力影响最大的参数。max_depth的默认值为None,也就是不限深度。因此当随机森林表现为过拟合时,选择一个小的max_depth会很有效。

max_leaf_nodes与min_sample_split

比max_depth更精细的减枝方式,但限制叶子数量和分枝,既可以实现微调,也可以实现大刀阔斧的剪枝。max_leaf_nodes的默认值为None,即不限叶子数量。min_sample_split的默认值为2,等同于不限制分枝。

min_impurity_decrease

最精细的减枝方式,可以根据不纯度下降的程度减掉相应的叶子。默认值为0,因此是个相当有空间的参数。

bootstrap,oob_score,max_samples

bootstrap参数的输入为布尔值,默认True,控制是否在每次建立决策树之前对数据进行随机抽样。如果设置为False,则表示每次都使用全部样本进行建树,如果为True,则随机抽样建树。从语言的意义上来看,bootstrap可以指代任意类型的随机抽样,但在随机森林中它特指有放回随机抽样技术

在随机森林回归器中,当boostrap=True时,我们可以使用参数oob_scoremax_samples,其中:

oob_score控制是否使用袋外数据进行验证,输入为布尔值,默认为False,如果希望使用袋外数据进行验证,修改为True即可。

max_samples表示自助集的大小,可以输入整数、浮点数或None,默认为None。

输入整数m,则代表每次从全数据集中有放回抽样m个样本

输入浮点数f,则表示每次从全数据集中有放回抽样f*全数据量个样本

输入None,则表示每次抽样都抽取与全数据集一致的样本量(X.shape[0])

在使用袋外数据时,我们可以用随机森林的另一个重要属性:oob_score_来查看我们的在袋外数据上测试的结果,遗憾的是我们无法调整oob_score_输出的评估指标,它默认是R2。

max_features

数据抽样还有另一个维度:对特征的抽样。在学习决策树时,我们已经学习过对特征进行抽样的参数max_features,在随机森林中max_features的用法与决策树中完全一致,其输入也与决策树完全一致:

输入整数,表示每次分枝时随机抽取max_features个特征

输入浮点数,表示每次分枝时抽取round(max_features * n_features)个特征

输入"auto"或者None,表示每次分枝时使用全部特征n_features

输入"sqrt",表示每次分枝时使用sqrt(n_features)

输入"log2",表示每次分枝时使用log2(n_features)

你可能感兴趣的:(随机森林,回归)