构造随机森林的步骤:
①确定用于构造的树的个数
②对数据进行自助采样
③基于新数据集构造决策树
第一步是确定森林中树的数目,通过模型的 进行调节。n_estimators越大越好,但占用的内存与训练和预测的时间也会相应增长,且边际效益是递减的,所以要在可承受的内存/时间内选取尽可能大的n_estimators。而在sklearn中,n_estimators默认为10。
随机森林之所以称为随机森林,是因为构造时添加了随机性,②与③正是随机性的体现。
第二步是对数据进行自助采样,也就是说,从n_sample个数据点中有放回地重复随机抽取一个样本,共抽取n_sample次。新数据集的容量与原数据集相等,但抽取的采样往往与原数据集不同。注意,构建的n_estimators棵树采用的数据集都是独立自助采样的,这样才能保证所有树都互不相同。
接下来第三步就是基于这个新数据集来构造决策树。由于加入了随机性,故构造时与一般的决策树不同。构造时,在每个结点处选取特征的一个子集,并对其中一个特征寻找最佳测试。
sklearn.ensemble.RandomForestRegressor(
n_estimators=10, # 数值型参数,默认值为100,此参数指定了弱分类器的个数。设置的值越大,精确度越好,但是当 n_estimators 大于特定值之后,带来的提升效果非常有限。
criterion='mse', # 其中,参数criterion 是字符串类型,默认值为 ‘mse’,是衡量回归效果的指标。可选的还有‘mae’ 。
max_depth=None, # 数值型,默认值None。这是与剪枝相关的参数,设置为None时,树的节点会一直分裂,直到:(1)每个叶子都是“纯”的;(2)或者叶子中包含于min_sanples_split个样本。推荐从 max_depth = 3 尝试增加,观察是否应该继续加大深度。
min_samples_split=2, # 数值型,默认值2,指定每个内部节点(非叶子节点)包含的最少的样本数。与min_samples_leaf这个参数类似,可以是整数也可以是浮点数。
min_samples_leaf=1, # 数值型,默认值1,指定每个叶子结点包含的最少的样本数。参数的取值除了整数之外,还可以是浮点数,此时(min_samples_leaf * n_samples)向下取整后的整数是每个节点的最小样本数。此参数设置的过小会导致过拟合,反之就会欠拟合。
min_weight_fraction_leaf=0.0, # (default=0) 叶子节点所需要的最小权值
max_features='auto', # 可以为整数、浮点、字符或者None,默认值为None。此参数用于限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。
max_leaf_nodes=None, # 数值型参数,默认值为None,即不限制最大叶子节点数。这个参数通过限制树的最大叶子数量来防止过拟合,如果设置了一个正整数,则会在建立的最大叶节点内的树中选择最优的决策树。
min_impurity_split=1e-07, # float, optional (default=0.)如果节点的分裂导致不纯度的减少(分裂后样本比分裂前更加纯净)大于或等于min_impurity_decrease,则分裂该节点。
bootstrap=True, # 是否有放回的采样。
oob_score=False, # oob(out of band,带外)数据,即:在某次决策树训练中没有被bootstrap选中的数据
n_jobs=1, # 并行job个数。
random_state=None, # # 随机种子
verbose=0, # (default=0) 是否显示任务进程
warm_start=False) # 热启动,决定是否使用上次调用该类的结果然后增加新的。
)
max_features
由于加入了随机性,故构造时与一般的决策树不同。构造时,在每个结点处选取特征的一个子集,并对其中一个特征寻找最佳测试。选取的特征子集中特征的个数通过max_features参数来控制,max_features越小,随机森林中的树就越不相同,但过小(取1时)会导致在划分时无法选择对哪个特征进行测试。而在sklearn中,max_features有以下几种选取方法:“auto”, “sqrt”, “log2”, None。auto与sqrt都是取特征总数的开方,log2取特征总数的对数,None则是令max_features直接等于特征总数,而max_features的默认值是"auto"。
预测时,若是回归任务,则对森林中的每棵树进行预测,对结果取平均值作为预测值;若是分类任务,则对森林中每棵树进行预测,每棵树给出每个可能输出的标签的概率,对每个标签取每棵树给出的概率的平均值,取概率最大的标签作为预测结果,称为软投票。
随机森林拥有决策树的所有优点,且给出的特征重要性比单棵树给出的更为可靠。但随机森林对维度较高的稀疏数据表现不好,且训练和预测的速度比线性模型要慢。