Scikit-Learn随机森林回归

本文深入探讨了随机森林的概念,包括集成学习、Bagging方法和随机森林算法。随机森林是一种通过组合多个决策树降低方差、防止过拟合的模型。在Scikit-Learn库中,随机森林回归提供了强大的预测能力和模型稳定性。文章还介绍了如何在加州房价预测数据集上应用随机森林回归,并展示了优于其他模型的性能。
摘要由CSDN通过智能技术生成





1、随机森林


随机森林是一种由决策树构成的集成算法,它在大多情况下都能有不错的表现。随机森林既可用于回归也可用于分类。随机森林回归在机器学习知识结构中的位置如下:

在这里插入图片描述

1.1、集成学习


随机森林是一种由决策树构成的(并行)集成算法,属于Bagging类型,随机森林通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能,同时也有很好的稳定性,因此广泛应用在各种业务场景中

随机森林有如此优良的表现,主要归功于随机和森林。顾名思义,随机森林是一个比喻,它由若干决策树构成,每棵决策树都是其基本单元。至于随机,只是一个数学抽样概念。随机使它具有抗过拟合能力,森林使它更加精准

关于决策树的介绍详见文章:回归树决策树

随机森林的基本思想在于集思广益,集中群众的智慧,广泛吸收有益的意见。这往往可以得到更好的解决方案。集思广益在机器学习中对应一个关键概念——集成学习

集成学习(Ensemble Learning)通过训练学习多个个体学习器,当预测时通过结合策略将多个个体学习器的结果组合作为最终强学习器的结果输出

对于训练数据集,我们训练一系列个体学习器,再通过结合策略将它们集成起来,形成一个更强的学习器,这就是集成学习所做的事情

在这里插入图片描述
其中,个体学习器是相对于集成学习来说的,其实我们在之前了解到的很多模型,例如决策树算法、朴素贝叶斯算法等,都是个体学习器

而集成可以分为同质集成和异质集成:

  • 同质集成:只包含同种类型的个体学习器,个体学习器称作基学习器。例如随机森林中全是决策树集成
  • 异质集成:包含不同类型的个体学习器,个体学习器称作组件学习器。例如同时包含决策树和神经网络进行集成

个体学习器代表的是单个学习器,集成学习代表的是多个学习器的结合

集成学习的核心问题有两个:

  • 使用什么样的个体学习器?
    • 准确性:个体学习器不能太弱,需要有一定的准确性
    • 多样性:个体学习器之间要存在差异性,即具有多样性
  • 如何选择合适的结合策略构建强学习器?
    • 并行组合方式:例如随机森林
    • 传统组合方式:例如Boosting树模型

1.2、Bagging方法


这里我们只讲随机森林的并行集成模型,而Bagging是并行式集成学习方法最著名的代表

Bagging方法全称为自助聚集(Bootstrap Aggregating),顾名思义,Bagging由Bootstrap与Aggregating两部分组成

要理解Bagging,首先要了解自助采样法(Bootstrap Sampling)

在这里插入图片描述
自助采样的过程为

  • 给定包含m个样本的数据集,先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中
  • 重复上述过程m轮,得到包含m个样本的采样集,初始数据集中有的样本在采样集中多次出现,有的则从未出现
  • 假设约63.2%的样本出现在采样集中,而未出现的约36.8%的样本可用作验证集来对后续的泛化性能进行包外/袋外估计

Bagging方法是在自助采样基础上构建的,上述的采样过程我们可以重复T次,采样出T个包含m个样本的采样集,然后基于每个采样集训练出一个基学习器,然后将这些基学习器进行结合

在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法,这就是Bagging方法的基本流程

在这里插入图片描述
从偏差-方差分解的角度看,Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等易受到样本扰动的学习器上效用更明显

1.3、随机森林算法


随机森林(Random Forest,RF)是一种基于树模型的Bagging的优化版本。核心思想依旧是Bagging,但是做了一些独特的改进——RF使用了CART决策树作为基学习器。具体过程如下:

  • 输入样本集 D D D= { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } \{ { (x_1,y_1),(x_2,y_2),...,(x_m,y_m) \}} { (x1,y1
1. n_estimators:森林中树的数量。通常设置较大的值来获得更好的性能。 2. max_features:每个决策树节点可用于分割的最大特征数量。一般而言,对于分类问题,建议使用sqrt(n_features);对于回归问题,建议使用n_features。 3. max_depth:每个树的最大深度。这个参数可以控制模型的复杂度。通常而言,较小的值会有较好的泛化性能。但是,如果太小,模型可能就不能很好地捕捉数据中的复杂关系,导致欠拟合。 4. min_samples_split:一个节点必须具有的最小样本数才能分裂。这个参数可以控制模型的复杂度。通常而言,较大的值会有较好的泛化性能。但是,如果太大,模型可能就不能很好地捕捉数据中的复杂关系,导致欠拟合。 5. min_samples_leaf:叶节点必须具有的最小样本数。这个参数可以控制模型的复杂度。通常而言,较大的值会有较好的泛化性能。但是,如果太大,模型可能就不能很好地捕捉数据中的复杂关系,导致欠拟合。 6. bootstrap:是否使用有放回的抽样方式进行样本选择。 7. oob_score:是否使用袋外样本计算泛化误差。 8. random_state:随机数生成器的种子。可以使用该参数来重现结果。 以下是一个调参的例子: ``` from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import GridSearchCV param_grid = {'n_estimators': [100, 200, 500], 'max_features': ['sqrt', 'log2'], 'max_depth': [10, 20, 30], 'min_samples_split': [2, 5, 10], 'min_samples_leaf': [1, 2, 4], 'bootstrap': [True, False]} rf = RandomForestRegressor() grid_search = GridSearchCV(rf, param_grid=param_grid, cv=5, n_jobs=-1) grid_search.fit(X_train, y_train) print("Best parameters:", grid_search.best_params_) ``` 这个例子中,我们使用了GridSearchCV来进行调参。我们定义了一个参数网格,包含了所有我们想要调节的参数和它们的值。然后,我们使用GridSearchCV来搜索最佳参数组合。在执行fit方法之后,我们可以通过best_params_属性来查看最佳参数组合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值