欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

集成学习算法

程序员文章站 2022-07-14 14:52:25
...

一、集成学习

1.什么是集成学习?

集成学习是通过建立几个模型来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立的学习和做出预测,然后将这些预测最后整合成组合预测,因此优于任何一个单分类的做出的预测。

2.机器学习的两个核心问题

  • 如何训练数据---- 解决欠拟合问题
  • 如何提升泛化性能---- 解决过拟合问题

3.集成学习中的boosting和Bagging

集成学习算法

只要单分类器的表现不太差,集成学习的结果总是要好于单分类器的。

4.Bagging

4.1Bagging的原理
  • 1 从样本集中重采样(有重复的,有放回采样)选出n个样本,n为原始样本集的样本个数;
  • 2 在所有特征上,对这个n个样本建立基本分类器(分类器如ID3、C4.5、CART、SVM、Logistic回归等。在这里,均称为弱分类器。);
  • 3 重复以上两步m次,即获得m个分类器;
  • 4 将数据放在这m个联合分类器上(m个分类器组成了一个强分类器),最后根据这m个分类器的平权投票结果,决定数据属于哪一类。

简单来说就是采样、学习、集成,平权投票就是少数服从多数!

5.随机森林的构造过程

在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。

随机森林就是Bagging的改进版, 随机森林 = Bagging + 决策树

5.1随机森林的原理
  • 1 从样本集中重采样(有重复的,有放回采样)选出m个样本
  • 2 随机选取K个数据特征 m << M (M表示总特征数)
  • 3 训练决策树 默认为CART树
  • 4 重复1-3步骤构造n个弱决策树
  • 5 平权投票集成n个弱决策树
5.2 随机森林API
  • sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion=‘gini’,max_depth=None,bootstrap=True,random_state=None,min_samples_split=2)
    • n_estimators:森林里的数目数量,默认为10
    • Criterion:特征标准 默认为gini 悉尼指数
    • max_depth:树的最大深度
    • max_features=‘auto’:每个决策树的最大特征数量
      • If “auto”, then max_features=sqrt(n_features).
      • If “sqrt”, then max_features=sqrt(n_features)(same as “auto”).
      • If “log2”, then max_features=log2(n_features).
      • If None, then max_features=n_features.
    • bootstrap:是否在构建树的时候使用放回抽样
    • min_samples_split:节点划分最少样本数
    • min_samples_leaf:叶子节点最少样本数
5.3 随机森林预测的案例
  • 实例化随机森林
estimator = RandomForestClassifier()
  • 定义超参数的选择列表
param = {'n_estimators':[100,200,300,400,500],'max_depth':[1,2,3,4,5]}
  • 使用GridSearchCV进行网格搜索
transfer = GridSearchCV(estimator,param_grid=param,cv=2)

transfer.fit(x_train,y_train)
print("随机森林预测的准确率:",transfer.score(x_test,y_test))

6.Boosting

1.什么是boosting

随着学习的积累从弱到强,就是每加入一个弱学习器,整体能力就会得到提升。

2.boosting实现过程:
  • 1.初始化训练数据权重相等,训练第一个学习器

  • 2.计算该学习器在训练数据中的错误率

  • 3.计算该学习器的投票权重

  • 4.根据投票权重对训练数据重新赋权

    将下一轮学习器的注意力集中在错误的数据上。

  • 5.重复执行1-4步m次

  • 6.对m个学习期进行加权投票

bagging集成与boosting集成的区别:
  • 区别一:数据方面
    • bagging 对数据进行采样
    • boosting 根据前一轮学习结果调整数据的重要性
  • 区别二:投票方面
    • bagging 所有学习器平权投票
    • boosting 对学习器进行加权投票
  • 区别三:学习顺序
    • bagging 学习是并行的,每个学习器之间没有依赖关系
    • boosting 是串行的,学习是有先后顺序的
  • 区别四:主要作用
    • bagging 主要用于提高泛化性能(解决过拟合,也可说降低方差)
    • boosting 主要用于提高训练精度(解决欠拟合,也可以说降低偏差)

3.from sklearn.ensemble import AdaBoostClassifier

  • https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html#sklearn.ensemble.AdaBoostClassifier)https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html#sklearn.ensemble.AdaBoostClassifier

4.GBDT

梯度提升决策树(GBDT Gradient Boosting Decision Tree)是一种迭代的决策树算法,该算法由多棵决策树组成,所有的树的结论累加起来做最终答案。它在被提出之初就被认为是泛化能力交钱的算法。

GBDT = 梯度下降 + Boosting + 决策树

GBDT的主要执行思想

  • 1.使用梯度下降法优化代价函数
  • 2.使用一层决策树作为弱学习器,负梯度作为目标值
  • 3.利用boosting思想进行集成

5.XGBoost

XGBoost = 二阶泰勒展开 + boosting + 决策树 + 正则化

Boosting:XGBoost使用Boosting提升思想对多个弱学习器进行迭代学习

二阶泰勒展开:每一轮学习中,XGBoost对损失函数进行二阶泰勒展开,使用一阶和二阶梯度进行优化

决策树:在每一轮学习中,XGBoost使用决策树算法作为弱学习进行优化

正则化:在优化过程中XGBoost为防止过拟合,在损失函数中加入惩罚项,限制决策树的叶子节点个数以及决策树叶子节点的值