机器学习算法总结_决策树(含代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章 提升算法
6.1 引言
当做重要决定时,大家可能都会考虑吸取多个专家而不是一个人的意见。机器学习处理问题时也是如此,这就是提升算法背后的思路,提升算法是对其它算法进行组合的一种方式,接下来我们将对提升算法,以及提升算法中最流行的一个算法AdaBoost 算法进行介绍,并对提升树以及简单的基于单层决策树的Adaboost 算法进行讨论。
提升方法是一种常用的统计学习方法,应用广泛且有效,在分类问题上,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类性能。一个分类器在训练数据上能够获得比其他分类器更好的拟合,但是在训练数据外的数据集上却不能很好的拟合数据,这时就称为该分类器出现了过拟合(overfitting )。提升算法能够有效地防止过拟合现象的发生。
图1 过拟合现象示意图
提升算法是一种为了拟合自适应基函数模型(adaptive basis-function models, ABM )的贪心算法,自适应基函数模型可表达为:
()()01M
m m m f X w w X φ==+∑ (6-1)
其中,m φ是一种分类算法或者回归算法,被称为弱分类器(weak learner )或者基分类器(base learner )。也可以表达为如下形式:
1()(;)M
m m m f X b X βγ==∑ (6-2)
提升算法的目的是对以下公式的优化:
1
min (,())N
i i f
i L y f x =∑ (6-3)
其中,ˆ(,)L y y 称为损失函数(loss function ),f 是ABM 模型。不同的损失函数有着不同
的性质,对应不同的提升算法,如表1所示。
将(2)式代入(3)式可得如下表达式:
,11min ,(;)m m
N
M
i m i m i m L y x βγβφγ==⎛⎫
⎪⎝⎭
∑∑ (6-4) 因为学习的是加法模型,如果能够从前向后,每一步只学习一个基分类器及其系数,那
么就可以简化优化的复杂度,具体推导过程如下所示:
(),1
min ,(;)m m
N
i m i m i L y x βγβφγ=∑ (6-5)
表1 常见损失函数以及相应提升算法
名称 损失函数
导数
*f
算法 平方误差 21
(())2
i i y f x - ()i i y f x -
[]|i y x E
L2Boosting 绝对误差 ()i i y f x -
sgn(())
i i y f x -
(|)i median y x
Gradient boosting 指数损失 ()
exp ()i i y f x -
()
exp ()i i i y y f x --
1
log 21i i ππ- AdaBoost 对数损失
()log 1i i
y f e -+
i i y π-
1
log 21i i
ππ-
LogitBoost
01
()arg min (,(;))N
i i i f X L y f x γ
γ==∑ (6-6)
1,1
(,)argmin (,()(;))N
m m i m i i i L y f x x βγ
βγβφγ-==+∑ (6-7)
1()()(;)m m m m f X f X X βφγ-=+ (6-8)
算法不进行回溯对参数进行修改,因此该算法称为前向分步算法。
6.2 AdaBoost 算法
AdaBoost (Adaptive boosting )算法,也称为自适应提升算法。训练数据中的每个样本,并赋予其一个权重,这些权重构成向量D 。一开始,这些权重都初始化为相等值,首先
在训练数据上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器。再次训练分类器的过程中,将会重新调整每个样本的权重,其中上一次分对的样本权重会降低,而上一次分错的样本权重会提高。
图2 AdaBoost 算法示意图
给定一个二类分类的训练数据集1122{(,),(,),,(,)}N N T x y x y x y =,其中,每个样本点由实例
与标记组成,实例n i x R χ∈⊆,标记{1,1}i y Y ∈=-+,χ是实例空间,Y 是标记集合。损失函数可以表达为:
1,1
1
()exp[(()())]exp(())N N
m i m i i i m i i i i L y f x x w y x φβφβφ-===-+=-∑∑ (6-9)
其中,,1exp(())i m i m i w y f x --,{}1,1i y ∈-+,则可以有如下推导:
()
,,,,()
()
1
1
()(())i i i i N N
m i m i m i m i i i m
y x y x i i L e w e w e e w I y x e w β
β
ββ
βφ
φ
φφ---=≠===+=-≠+∑∑∑∑ (6-10)
其中,11
log
2m m m
err err β-=,,1,1(())
N
i m i m i i m N i m
i w I y x err w φ==≠=∑∑,m
err 称为分类误差率。则可以得到第
m 个分类器:
1()()()m m m f X f X X βφ-=+ (6-11)
计算第m+1个分类器的参数可以通过下式得到:
()(2(())1)2(()),1,,,m i m i m i m i m i m i m y x I y x I y x i m i m i m i m w w e w e w e e βφβφβφβ-≠-≠-+=== (6-12)
总结起来Adaboost 算法主要有以下7步。 1 1i w N = 2 for 1:m M =do
3 Fit a classifier ()m X φ to the training set using weights w
4 Compute ,11(())
N
i m i m i i m N i
i w I y x err w φ==≠=∑∑
5 Compute 1log (2)m
m m m m
err err ααβ-== 6 Set (())
m i m i I y x i i w w e α
φ≠←