(七)AdaBoost 简介

作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai


(一)机器学习中的集成学习入门

(二)bagging 方法

(三)使用Python进行交易的随机森林算法

(四)Python中随机森林的实现与解释

(五)如何用 Python 从头开始实现 Bagging 算法

(六)如何利用Python从头开始实现随机森林算法

(七)AdaBoost 简介


Boosting 是一种集成技术,试图从许多弱分类器中创建一个强分类器。这篇文章中,我们将介绍 AdaBoost 方法。读完这篇文章后,你会知道:

  • boosting 算法的基本工作原理;
  • 如何学习使用 AdaBoost 算法提升决策树;
  • 如何使用学习过的 AdaBoost 模型进行预测;
  • 如何最好的准备数据以与 AdaBoost 算法一起使用;

这篇文章是为开发人员编写的,没有统计学或者数学背景。该文章重点介绍了算法的工作原理以及如何将其用于预测建模问题。如果你有任何疑问,可以在后台留言。那么,我们开始吧。

Boosting 集成方法

Boosting 是一种通用的集成方法,可以从许多弱分类器中创建强分类器。这是通过从训练数据构建模型,然后通过构建第二个模型来纠正第一个模型所犯的错误。直到添加的模型达到最大数量或者达到完美预测。AdaBoost 是第一个成功开发的 Boosting 算法,如果学习这个算法能更好的帮助我们学习。现代很多的 boosting 算法都是建立在 AdaBoost 算法之上的,最著名的就是随机梯度提升。

从数据中学习 AdaBoost 模型

AdaBoost 最适合用于提高决策树在二元分类问题上的性能。

AdaBoost 最初被作者 Freund 和 Schapire 称为 AdaBoost M1。最近,它又被称为离散AdaBoost,因为它用于分类而不是回归。

AdaBoost 可用于提高任何机器学习算法的性能。它最适合弱学习器使用,这些模型在分类问题上实现了高于随机模型的准确性。

与 AdaBoost 一起使用的最适合的是具有一层结构的决策树。因为这些树很短,只包含一个分类决策,所以它们通常被称为决策树桩。

训练数据集中的每个实例都是需要加权的,初始权重设置为:

w e i g h t ( x i ) = 1 / n weight(xi) = 1/n

其中, x i x_i 是第 i 个训练实例,n 是训练实例的数量。

如何训练一个模型

使用加权样本在训练数据上准备弱分类器(决策树桩)。这个模型只支持二分类问题,因此每个决策树桩对一个输入变量做出一个决策,并为第一类或者第二类值输出 1.0 或者 -1.0 。

针对训练的模型计算错误分类率。传统上,计算如下:

e r r o r = ( c o r r e c t N ) / N error = (correct – N) / N

其中 error 是错误分类率,correct 是被模型正确分类的数量,N 是训练实例的总数。例如,如果模型正确预测了 100 个训练实例中的 78 个,则错误或者错误分类率将为 (100-78)/ 100 或者 0.22 。

但是我们需要修改训练实例的错误:

e r r o r = s u m ( w ( i ) t e r r o r ( i ) ) / s u m ( w ) error = sum(w(i) * terror(i)) / sum(w)

这是错误分类率的加权和,其中 wi 是训练实例 i 的权重,terror 是训练实例 i 的预测误差,如果错误分类则为 1,如果正确分类则为 0 。

例如,如果我们有 3 个训练实例,其权重为 0.01,0.5和0.2。预测值为 -1,-1和-1,实例中的真确输出变量为 -1,1和-1。那么 terror 为 0,1和0。误分类率计算如下:

error = (0.010 + 0.51 + 0.2*0) / (0.01 + 0.5 + 0.2) = 0.704

为训练模型计算阶段值,该阶段值为模型所做的任何预测提供加权。训练模型的阶段值计算如下:

stage = ln((1-error) / error)

其中,stage 是用于对模型进行加权预测的阶段值,ln() 是自然对数,而 error 是模型的错误分类。阶段权重的影响是更准确的模型对最终预测具有个更大的权重或者贡献。

更新训练权重,为错误预测的实例提供更多权重,对正确预测的实例权重更小。

例如,使用以下内容更新一个训练实例(w)的权重:

w = w * exp(stage * terror)

其中,w 是特定训练实例的权重,exp() 是数字常数 e ,stage 是弱分类器的误分类率,terror 是弱分类器预测输出变量的误差,具体计算为:

terror = 0 if(y == p), otherwise 1

其中 y 是训练实例的输出变量,p 是来自弱分类器的预测。

如果训练实例被正确分类了,那么权重不会发生变化,如果训练实例没有被正确分类,那么权重就会相应的增大。

使用 AdaBoost 进行预测

通过计算弱分类器的加权平均值来进行预测。

对于新的输入实例,每个弱分析器计算预测值为 +1 或者 -1。预测值由每个弱学习器的阶段值进行加权。集成模型的预测被视为加权预测的总和。如果总和为正,则预测第一类,如果为负,则预测第二类。

例如, 5 个弱分类器的预测值为 1,1,-1,1和-1。从大多数投票看,模型看起来预测值为 1 或者第一类。但是我们还要计算权重,假设权重值为 0.2,0.5,0.8,0.2和0.9。计算这些预测的加权和,最终输出为 -0.8 ,这将是 -1 或者第二类的预测。

总结

在这篇文章中,你发现了用于机器学习的 boosting 方法,你可以了解到:

  • 提升算法将弱分类器变成强分类器;
  • AdaBoost 是第一个成功运用的boosting算法;
  • 通过加权训练实例和弱分类器来学习 AdaBoost 模型;
  • 通过加权来自弱分类器的预测来学习 AdaBoost 模型;
发布了414 篇原创文章 · 获赞 168 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/CoderPai/article/details/97147488