机器学习9:集成算法
  TEZNKK3IfmPf 2023年11月14日 16 0

所谓集成, 是如何把我们前面学过的简单模型组合(或集成)成一个集成模型,使集成模型比单个模型更好地预测。

通常来说,决策树是一个“弱”学习器。实际上,大多数集成方法都默认使用sklearn中的决策树。但是,你可以将此值更改为任何我们前面看过的模型。

为什么要把学习器集成在一起?
找到一个拟合能力好的机器学习模型要看两个相互竞争的变量:偏差方差.
首先, ​这篇维基百科的文章很有用

偏差:是指一个模型的在不同训练集上的平均性能和最优模型的差异

当一个模型有高偏差,这意味它弹性差(欠拟合),不能很好拟合数据。通常具有高偏差的算法的例子是线性回归。即使是完全不同的数据集,线性回归模型的输出结果确是同一条直线。模型的偏差高是不好的。

机器学习9:集成算法

方差:描述的是一个模型在不同训练集之间的差异,表示模型的泛化能力,方差越小,模型的泛化能力越强.

当模型有高方差,这意味它会剧烈变化(过拟合),以满足数据集中每个点的需求。上图中的线性模型是低方差和高偏差的例子。决策树(特别是没有早期停止参数的决策树)则是一种倾向于高方差和低偏差的例子。决策树作为一种高方差算法,倾向于将每个点尽可能分割成一个独立的分支。这是高方差、低偏差算法的一个特点:它们非常灵活,可以精确地拟合所见的任何数据。

机器学习9:集成算法

用集成算法,我们可以通过权衡偏差和方差来生成一个更好的模型。还有一些其他的策略用于组合算法,以帮助它们更好地工作。这些思想是基于数学理论的最小偏差和方差,如中心极限定理。

将随机性引入集成

另一种用于改进集成算法的方法是先将随机性引入高方差算法,再进行集成。随机性的引入消除了这些算法的过拟合(或直接拟合数据)的趋势。引入随机性的方法主要有两种:

1.数据的自助采样法 - 也就是说,对数据先使用自助采样(或有放回的采样),再用算法拟合采样数据。

2.特征子集法 - 在决策树的每次分支中,或在使用集成的每个算法时,只使用全部可用特征的子集。

实际上,这是我们将看到的下一个算法中使用的两个随机组件,称为随机森林

随机森林

从数据中随机选择一个子特征列,并根据这些列构建决策树,然后再选取其他列,再次构造决策树…

然后让决策树选择,对于一个新数据,让所有决策树作出预测,并选取结果最多的项作为最终预测结果。

机器学习9:集成算法

BAGGING

选取多个数据集的子集(可以放回抽样),用每个子集训练弱学习器,最后再把这些若学习器组合起来,

机器学习9:集成算法

对所有若学习器预测结果,选择最大概率的为强学习器结果。

机器学习9:集成算法

ADABOOST

核心思想:

先拟合第一个学习器,最大化准确度,或最小化误差,保存这个模型;

机器学习9:集成算法

第二个弱学习器,要修正第一个学习器的错误,把第一个模型误分类的点放大,换句话说,就是第二个模型漏掉这些误分类点,就加大惩罚;

机器学习9:集成算法

第三个弱学习器,继续对错误分类的点加大惩罚;

机器学习9:集成算法

重复这个过程,得到一组弱学习器;

最后,组合这些弱学习器模型,这就是拟合数据后得到的模型

机器学习9:集成算法

数据权重

先把每个数据点的初始权重设置为1, 分类后将正确分类的权重加起来,

机器学习9:集成算法

然后将误分类点的权重提高点(一般取正/错比50:50),

机器学习9:集成算法

第二个模型,将重点对新增加权重的数据进行拟合,并且继续提高误分类点的权重(模型再次回到50:50);

机器学习9:集成算法

继续重复,创建足够的弱分类模型

模型权重

创建的多个模型,每个都分配相应的权重,用一个公式来表述。

机器学习9:集成算法

机器学习9:集成算法

对三个弱学习器进行组合,叠加权重值,为正,就认为是蓝点,否则为红点,这样就拟合了一个枪击学习器;

机器学习9:集成算法

sklearn 中的 AdaBoost

from sklearn.ensemble import AdaBoostClassifier
model = AdaBoostClassifier()
model.fit(x_train, y_train)
model.predict(x_test)

model 变量是一个决策树模型,

超参数

当我们定义模型时,我们可以确定超参数。在实际操作中,最常见的超参数为:

base_estimator:弱学习器使用的模型(切勿忘记导入该模型)。

n_estimators:使用的弱学习器的最大数量。

比如,在下面的例子中,我们定义了一个模型,它使用 max_depth 为 2 的决策树作为弱学习器,并且它允许的弱学习器的最大数量为 4。

from sklearn.tree import DecisionTreeClassifier
model = AdaBoostClassifier(base_estimator = DecisionTreeClassifier(max_depth=2), n_estimators = 4)

小结:

学习了集成算法中的许多常用技术。在开始研究这些技术之前,看到两个需要权衡的变量偏差和方差。

高偏差,低方差: 模型不够灵活,常会欠拟合。线性模型属于这类模型。

高方差,低偏差: 模型因为太灵活,往往会过拟合。决策树属于这类模型。

集成算法

为了能同时对方差和偏差做优化,我们采用集成算法。集成方法已成为在Kaggle比赛上最流行的方法之一,并在现实行业中广泛使用。

有两种随机化技术可以防止过拟合:

数据的自助采样法 - 也就是说,对数据先使用自助采样(或有放回的采样),再用算法拟合采样数据。

特征子集法 - 在决策树的每次分支中,或在使用集成的每个算法时,只使用全部可用特征的子集。

本课程中看到了许多集成方法,包括:

Bagging分类器

RandomForest分类器

AdaBoost分类器

另一个非常有用的集成算法指南可以在这个文档中找到。这些方法也可以用来解决回归问题,不仅仅是分类问题。

其他资源

此外,如果你想更多的了解Adaboost相关知识,这里有一些很棒的资源!

这是 Freund 和 Schapire 的 原论文

Freund 和 Schapire 的 后续论文,关于 Adaboost 的几种试验

Schapire 撰写的一个很好的 教程

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

TEZNKK3IfmPf