机器学习-sklearn第二天——笔记

随机森林

1 概述

1.1 集成算法概述

**集成学习(ensemble learning)**是时下非常流行的机器学习算法,它本身不是一个单独的机器学习算法,而是通过在数据上构建多个模型,集成所有模型的建模结果。基本上所有的机器学习领域都可以看到集成学习的身影,在现实中集成学习也有相当大的作用,它可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性。在现在的各种算法竞赛中,随机森林,梯度提升树(GBDT),Xgboost等集成算法的身影也随处可见,可见其效果之好,应用之广。

2 RandomForestClassifier

class sklearn.ensemble.RandomForestClassifier (n_estimators=’10’, criterion=’gini’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’,
max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False,
n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)
随机森林是非常具有代表性的Bagging集成算法,它的所有基评估器都是决策树,分类树组成的森林就叫做随机森林分类器,回归树所集成的森林就叫做随机森林回归器。这一节主要讲解RandomForestClassifier,随机森林分类
器。

2.1 重要参数

2.1.1 控制基评估器的参数

在这里插入图片描述

2.1.2 n_estimators

这是森林中树木的数量,即基评估器的数量。这个参数对随机森林模型的精确性影响是单调的,n_estimators越大,模型的效果往往越好。但是相应的,任何模型都有决策边界,n_estimators达到一定的程度之后,随机森林的精确性往往不在上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来越长。对于这个参数,我们是渴望在训练难度和模型效果之间取得平衡。

2.1.2 n_estimators

这是森林中树木的数量,即基评估器的数量。这个参数对随机森林模型的精确性影响是单调的,n_estimators越大,模型的效果往往越好。但是相应的,任何模型都有决策边界n_estimators达到一定的程度之后,随机森林的精确性往往不在上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来越长。对于这个参数,我们是渴望在训练难度和模型效果之间取得平衡。

来建立一片森林吧

  1. 导入我们需要的包
    在这里插入图片描述

  2. 导入需要的数据集
    在这里插入图片描述

  3. 复习:sklearn建模的基本流程
    在这里插入图片描述

  4. 画出随机森林和决策树在一组交叉验证下的效果对比
    在这里插入图片描述

  5. 画出随机森林和决策树在十组交叉验证下的效果对比
    在这里插入图片描述

  6. n_estimators的学习曲线
    在这里插入图片描述

2.1.3 random_state

随机森林的本质是一种装袋集成算法(bagging),装袋集成算法是对基评估器的预测结果进行平均或用多数表决原则来决定集成评估器的结果用袋装法集成时,基分类器应当是相互独立的,是不相同的。

2.1.4 bootstrap & oob_score

要让基分类器尽量都不一样,一种很容易理解的方法是使用不同的训练集来进行训练,而袋装法正是通过有放回的随机抽样技术来形成不同的训练数据,bootstrap就是用来控制抽样技术的参数。
在这里插入图片描述

2.2 重要属性和接口

传统的随机森林是利用袋装法中的规则,平均或少数服从多数来决定集成的结果,而sklearn中的随机森林是平均每个样本对应的predict_proba返回的概率,得到一个平均概率,从而决定测试样本的分类
在这里插入图片描述

3 RandomForestRegressor

3.1 重要参数,属性与接口

随机森林回归用法
在这里插入图片描述

3.2 实例:用随机森林回归填补缺失值

  1. 导入需要的库
    在这里插入图片描述

  2. 以波士顿数据集为例,导入完整的数据集并探索
    在这里插入图片描述

  3. 为完整数据集放入缺失值
    在这里插入图片描述

  4. 使用0和均值填补缺失值
    在这里插入图片描述

  5. 使用随机森林填补缺失值
    在这里插入图片描述

  6. 对填补好的数据进行建模
    在这里插入图片描述

  7. 用所得结果画出条形图
    在这里插入图片描述

4 机器学习中调参的基本思想

通过画学习曲线,或者网格搜索,我们能够探索到调参边缘(代价可能是训练一次模型要跑三天三夜),但是在现实中,高手调参恐怕还是多依赖于经验,而这些经验,来源于:1)非常正确的调参思路和方法,2)对模型评估指标的理解,3)对数据的感觉和经验,4)用洪荒之力去不断地尝试。
泛化误差
当模型在未知数据(测试集或者袋外数据)上表现糟糕时,我们说模型的泛化程度不够,泛化误差大,模型的效果不好。泛化误差受到模型的结构(复杂度)影响。看下面这张图,它准确地描绘了泛化误差与模型复杂度的关系,当模型太复杂,模型就会过拟合,泛化能力就不够,所以泛化误差大。当模型太简单,模型就会欠拟合,拟合能力就不够,所以误差也会大。只有当模型的复杂度刚刚好的才能够达到泛化误差最小的目标。

泛化误差的背后其实是“偏差-方差困境”,原理十分复杂,无论你翻开哪一本书,你都会看见长篇的数学论证和每个字都能看懂但是连在一起就看不懂的文字解释。在下一节偏差vs方差中,我用最简单易懂的语言为大家解释了泛化误差背后的原理,大家选读。那我们只需要记住这四点:
1)模型太复杂或者太简单,都会让泛化误差高,我们追求的是位于中间的平衡点
2)模型太复杂就会过拟合,模型太简单就会欠拟合
3)对树模型和树的集成模型来说,树的深度越深,枝叶越多,模型越复杂
4)树模型和树的集成模型的目标,都是减少模型复杂度,把模型往图像的左边移动

5 实例:随机森林在乳腺癌数据上的调参

  1. 导入需要的库
    在这里插入图片描述

  2. 导入数据集,探索数据
    在这里插入图片描述
    在这里插入图片描述

  3. 进行一次简单的建模,看看模型本身在数据集上的效果
    在这里插入图片描述

  4. 随机森林调整的第一步:无论如何先来调n_estimators
    在这里插入图片描述

  5. 在确定好的范围内,进一步细化学习曲线
    在这里插入图片描述

  6. 为网格搜索做准备,书写网格搜索的参数

有一些参数是没有参照的,很难说清一个范围,这种情况下我们使用学习曲线,看趋势从曲线跑出的结果中选取一个更小的区间,再跑曲线

  1. 开始按照参数对模型整体准确率的影响程度进行调参,首先调整max_depth
    在这里插入图片描述

  2. 调整max_features
    在这里插入图片描述

  3. 调整min_samples_leaf
    在这里插入图片描述

  4. 不懈努力,继续尝试min_samples_split
    在这里插入图片描述

  5. 最后尝试一下criterion
    在这里插入图片描述

  6. 调整完毕,总结出模型的最佳参数
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值