python小白之路:第十八章 集成学习与随机森林

集成学习

将多个学习模块的结果统一成一个最终的成果机器学习方法。其中每个单独的分类器称为基分类器。

Voting模型

根据基分类器的结果进行投票作为最终预测结果

代码

from sklearn.ensemble import VotingClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier

voting_clf = VotingClassifier(
    estimators=[
        ('knn_clf',KNeighborsClassifier(n_neighbors=5)),
        ('dt_clf',DescisionTreeClassifier(rangom_state=666))
    ],voting-'hard'
)

# 参数说明

# estimators 基分类器

# voting 投票方式 ['hard','soft']: 'hard'直接统计票数预测结果,'soft'根据权值预测结果

Bagging(Bootstrap AGGregatING)

当子模型数量增加时,集成模型的精度会提升。用多个弱学习器实现强学习器的效果。

基于自助采样法(bootstrap sampling)

代码

from sklearn.ensemble import BaggingClassifier
from sklearn.ensemble import BaggingRegressor
from sklearn.tree import DecisionTreeClassifier

bagging_clf = BaggingClassifier(
    DecisionTreeClassifier(random_state=666),
    n_estimators=10,
    max_samples=100,
    random_state=42
)

# 参数说明

# n_estimators 子模型数量

# max_samples 取样数量

# bootstrap 采样方式[True,False]:True 有放回;False 无放回

# max_features 特征取样的个数

# bootstrap_features 对特征是否进行有放回抽样

# oob_score 使用包外数据进行测试:True 使用  *训练完后用.oob_score_获得分数

# n_jobs 并行化,使用计算机的几个核 default=None : None 1个核;n n个核;-1 所有核

理解

  • Bagging每次只能用一种子模型
  • 按照集成学习的思路,子模型之间不能一致,要有差异性,才能从数据中学习到不同的内容。因此,为了让子模型具有差异性,Bagging让每个子模型只学习样本数据的一部分。所以要对数据进行抽样。
  • 采样分为有放回和无放回两种方式,其中:有放回采样是在抽取一个样本数据之后立马将其放回总体样本数据中,再进行下一个采样,因此子模型学习的样本数据集中可能会存在内部有重复样本的情况。无放回采样就是构建子模型过程中采集的样本数据不立马放回。
  • Out-of-Bag(包外数据) :放回取样会导致一部分样本可能不会被抽取到,这些数据叫包外数据,OOB。
  • Bagging可以进行并行化,因为每个子模型之间无强依赖关系,都是单独学习,最后投票做出决策。

随机森林(Random Forest)

Bagging模型+基学习器:决策树。

代码

from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import RandomForestRegressor

rdf-clf = RandomForestClassifier(
    n_estimators=100,
    random_state=666,
    oob_score=True
)

理解

  • 普通决策树在结点划分时从n个样本特征中根据基尼指数或者信息熵选择一个最优的特征进行划分。

    随机森林进一步改进,从结点的特征集合中随机选择一个包含k个属性的子集,再从这个子集中选择一个最优划分。

  • 随机性体现在特征选取、结点划分上,这样扩大子模型间的差异性,提升泛化能力。

  • 训练同样的数据,RF比Bagging效率高是因为RF在Bagging基础上进一步随机选取特征集合子集,不是所有特征。

极限随机树(ExtraTrees)

比随机森林更随机的一个森林

代码

from sklearn.ensemble import ExtraTreesClassifier
from sklearn.ensemble import ExtraTreesRegressor

et_clf = ExtraTreescClassifier(
    n_estimators=100,
    oob_score=True,
    random_state=666,
    bootstrap=True
)

理解

  • 与随机森林不同之处在于在随机选择一个包含k个属性的子集之后,在每个属性上随机选择一个阈值,比较不同属性的阈值,再选一个最优划分。
  • 进一步提升随机性,增强泛化能力,还能有更快的训练速度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值