欢迎光临散文网 会员登陆 & 注册

Scikit-Learn -集成学习:boosting(3万字详解)

2022-03-15 09:58 作者:python风控模型  | 我要投稿

在公众号「python风控模型」里回复关键字:学习资料 

QQ学习群:1026993837 领学习资料            

图片


目录¶

  • 介绍

  • GradientBoostingRegressor

  • GradientBossting分类器

  • AdaBoost 回归器

  • AdaBoost分类器

  • 参考



介绍¶

Boosting 是一种集成学习,我们按顺序训练估计器,而不是并行训练所有估计器。我们尝试创建一些快速简单(弱但比随机猜测更好)的模型,然后结合所有弱估计器的结果来做出最终预测。我们已经在bagging & random forests教程中讨论了另一种集成学习方法。如果您想了解它,请随时浏览它。


Scikit-learn 为分类和回归问题提供了两种不同的增强算法:

  • 梯度树提升(梯度提升决策树) - 它迭代地构建学习器,弱学习器在预测错误的样本错误上进行训练。它最初从一个学习者开始,然后迭代地添加学习者。它试图通过迭代地添加新树来最小化损失。它使用决策树是弱估计器。Scikit-learn 提供了两个类,用于实现Gradient Tree Boosting分类和回归问题。


    • 梯度提升分类器GradientBoostingClassifier

    • 梯度提升回归器GradientBoostingRegressor


  • Adaptive Boost - 它在修改后的数据上迭代地拟合弱估计器列表。然后它根据加权投票组合所有估计器的结果以生成最终结果。在每次迭代中,将高权重分配给在前一次迭代中预测错误的样本,并为那些在前一次迭代中预测正确的样本减少权重。这使模型能够专注于出错的样本。最初,所有样本都被分配相同的权重(1/ n_samples)。它让我们指定用于该过程的估计器。Scikit-learn 提供了两个类,用于实现Adaptive Boosting分类和回归问题。


    • AdaBoost分类器

    • AdaBoost 回归器

这结束了我们对 Boosting 过程的简短介绍。我们现在将从编码部分开始。


我们将从导入必要的库开始。


加载数据集¶

为了我们的目的,我们将加载下面提到的两个。

  • 数字数据集:我们将使用具有数字大小图像的数字数据8x80-9。我们将在下面的分类任务中使用数字数据。

  • 波士顿住房数据集:我们将使用波士顿住房数据集,其中包含有关各种房屋属性的信息,例如平均房间数量、城镇人均犯罪率等。我们将使用它进行回归任务。


Sklearn 提供这两个数据集作为datasets模块的一部分。我们可以通过调用load_digits()load_boston()方法来加载它们。它返回类似字典的对象BUNCH,可用于检索特征和目标。


GradientBoostingRegressor¶

GradientBoostingRegressor  作为ensemblesklearn 模块的一部分使用。我们将使用波士顿住房数据训练默认模型,然后通过尝试各种超参数设置来调整模型以提高其性能。我们还将它与其他回归估计器进行比较,以检查其相对于其他机器学习模型的性能。


GradientBoostingRegressor的重要属性

以下是一些重要属性,GradientBoostingRegressor一旦模型经过训练,这些属性就可以提供重要信息。

  • feature_importances_- 它返回一个浮点数组,表示数据集中每个特征的重要性。

  • estimators_- 它返回训练有素的估计器。

  • oob_improvement_- 它返回大小数组 (n_estimators,)。数组中的每个值都表示袋外样本相对于前一次迭代的损失有所改善。

  • loss_- 它返回损失函数作为对象。


通过对各种超参数进行网格搜索来微调模型¶

以下是需要调整以获得最适合我们数据的常见超参数列表。我们将尝试对训练/测试数据的各种拆分进行各种超参数设置,以找出最佳拟合,这对于训练和测试数据集具有几乎相同的精度,或者在精度之间的差异非常小。

  • learning_rate - 它缩小了每棵树的贡献。learning_rate 和 n_estimatros 之间存在权衡。

  • n_estimators - 其结果将被组合以产生最终预测的基本估计器的数量。 default=100

  • max_depth - 单个树的最大深度。我们需要找到最佳价值。default=3

  • min_samples_split - 拆分内部节点所需的样本数。它接受int(0-n_samples),float(0.0-0.5]值。Float 采用 ceil(min_samples_split * n_samples) 特征。default=2

  • min_samples_leaf - 叶节点所需的最小样本数。它接受int(0-n_samples),float(0.0-0.5]值。Float 采用 ceil(min_samples_leaf * n_samples) 特征。default=1

  • 标准- 我们算法试图最小化的成本函数。目前它支持 mse(均方误差)和 mae(平均绝对误差)。default=friedman_mse

  • max_features - 进行拆分时要考虑的特征数。它接受int(0-n_features)float(0.0-0.5],string(sqrt, log2, auto) or None作为值。default=None

    • None - 如果提供 None,则 n_features 用作值。

    • sqrt - sqrt(n_features) 特征用于分割。

    • auto - sqrt(n_features) 特征用于分割。

    • log2 - log2(n_features) 特征用于分割。


  • validation_fraction - 它是指用于早期停止验证的训练数据的比例。它接受float(0.0,1.0) default=0.1

我们将在下面尝试上述超参数的各种值,通过对数据进行 3 折交叉验证来找到我们数据集的最佳估计器。






输出前几个交叉验证结果¶

图片

比较梯度提升与 Bagging、随机森林、额外树、决策树和额外树的性能



                                           

GradientBossting分类器

GradientBosstingClassifier  作为ensemblesklearn 模块的一部分使用。我们将使用数字数据训练默认模型,然后通过尝试各种超参数设置来调整模型以提高其性能。我们还将它与其他分类估计器进行比较,以检查其相对于其他机器学习模型的性能。




GradientBoostingClassifier重要属性

GradientBoostingClassifier具有与 相同的属性集GradientBoostingRegressor








通过对各种超参数进行网格搜索来微调模型¶

GradientBoostingClassifier几乎所有参数都与GradientBoostingRegressor






输出前几个交叉验证结果¶


图片


比较梯度提升与 Bagging、随机森林、额外树、决策树和额外树的性能¶




AdaBoost 回归器¶

AdaBoostRegressor  作为ensemblesklearn 模块的一部分使用。我们将使用波士顿住房数据训练默认模型,然后通过尝试各种超参数设置来调整模型以提高其性能。我们还将它与其他回归估计器进行比较,以检查其相对于其他机器学习模型的性能。





AdaBoostRegressor的重要属性

以下是一些重要属性,AdaBoostRegressor一旦模型经过训练,这些属性就可以提供重要信息。

  • base_estimator_- 它返回基估计器,从中创建由弱估计器组成的整个强估计器。

  • feature_importances_- 它返回一个浮点数组,表示数据集中每个特征的重要性。

  • estimators_- 它返回训练有素的估计器。








通过对各种超参数进行网格搜索来微调模型¶

以下是需要调整以最适合我们的数据的常见超参数列表。我们将对训练/测试数据的各种拆分尝试各种超参数设置,以找出最佳拟合,这对于训练和测试数据集具有几乎相同的准确度,或者准确度之间的差异非常小。

  • base_estimator - 它让我们指定将创建集成的基本估计器。它可以是任何其他机器学习估计器,例如 KNearestNeighbors、DecisionTree 等。默认是最大深度为 3 的决策树。

  • learning_rate - 它缩小了每棵树的贡献。learning_rate 和 n_estimatros 之间存在权衡。

  • n_estimators - 其结果将被组合以产生最终预测的基本估计器的数量。 default=100

我们将在下面尝试上述超参数的各种值,通过对数据进行 3 折交叉验证来找到我们数据集的最佳估计器。




输出前几个交叉验证结果¶


图片


比较 Ada Boost 与 Gradient Boosting、Bagging、随机森林、额外树、决策树和额外树的性能¶



AdaBoost分类器¶

AdaBoostClassifier 可作为ensemblesklearn 模块的一部分使用。我们将使用数字数据训练默认模型,然后通过尝试各种超参数设置来调整模型以提高其性能。我们还将它与其他分类估计器进行比较,以检查其相对于其他机器学习模型的性能。



AdaBoostClassifier的重要属性

AdaBoostClassifier所有属性都与 AdaBoostRegressor相同







通过对各种超参数进行网格搜索来微调模型¶

AdaBoostClassifier几乎所有参数都与AdaBoostRegressor




输出前几个交叉验证结果¶

图片


比较 Ada Boost 与 Gradient Boosting、Bagging、随机森林、额外树、决策树和额外树的性能¶





欢迎关注《python金融风控评分卡模型和数据分析(加强版)》,学习评分卡,集成树,神经网络算法等系统化风控建模内容。

入口1(推荐)

https://ke.qq.com/course/package/43071

入口2

https://study.163.com/series/1202915601.htm?share=2&shareId=400000000398149




Scikit-Learn -集成学习:boosting(3万字详解)的评论 (共 条)

分享到微博请遵守国家法律