随机森林和提升
作者:樱花猪
摘要:
本文为七月算法(julyedu.com)12月机器学习第十一次次课在线笔记。随机森林和提升都是机器学习将弱分类器融合成强分类器的方法。和我们熟悉的另一种机器学习模型SVM相比,这种方法更适合于大数据并且它的计算速度要比SVM快许多。
引言
因为最近做的事情需要用到随机森林故非常仔细的看了一遍。结合我目前研究的图像领域,似乎随机森林、Boosting这些比较受广大研究者的热爱,而曾经红得半边天的SVM不再那么主流。仔细一看,实际上随机森林我们可以认为是把SVM这种分类器多次得到的结果组合成起来成为一个更加可信的估计,这种具有鲁棒性的算法可能就是被广大研究者喜爱的原因吧。然而,刚刚学习机器学习,这种总结也许不太正确,会再日后的深入学习中加深印象。
本次课程从我们熟悉的决策树开始,然后我们会谈到Bagging策略,通过Bagging策略我们再牵引到随机森林和提升(boosting),最后我们还会讲一讲投票策略。
预备知识
熵;概率论
一、决策树(Decision Tree)
1、概述:
决策树是一种树型结构,其中每个内部结点表示在一个属性上的测试,每个分支代表一个测试输出,每个叶结点代表一种类别。决策树学习是以实例为基础的归纳学习。
2、基本思想
决策树学习采用的是自顶向下的递归方法, 其基本思想是以信息熵为度量构造一棵熵值下降最快的树,到叶子节点处的熵值为零,此时每个叶节点中的实例都属于同一类。
3、算法特点
决策树学习算法的最大优点是,它可以自学习。在学习的过程中,不需要使用者了解过多背景知识,只需要对训练实例进行较好的标注,就能够进行学习。 显然,决策树属于有监督学习。从一类无序、无规则的事物(概念)中推理出决策树表示的分类规则。
4、生成算法
建立决策树的关键,即在当前状态下选择哪个属性作为分类依据。根据不同的目标函数,建立决策树主要有一下三种算法。ID3、C4.5、CART
5、信息增益
概念:当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵和条件熵分别称为经验熵和经验条件熵。
信息增益表示得知特征A的信息而使得类X的信息的不确定性减少的程度。
定义:特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D 的经验条件熵H(D|A)之差,即: g(D,A)=H(D)–H(D|A) (即为训练数据集D和特征A的互信息)
计算方法:计算数据集D的经验熵
6、选择分裂点的方法
遍历所有特征,对于特征A:
a. 计算特征A对数据集D的经验条件熵H(D|A)
b. 计算特征A的信息增益:g(D,A)=H(D)–H(D|A)
c. 选择信息增益最大的特征作为当前的分裂特征
注意:经验条件熵
(设训练集为D,|D|表示样本的个数。设有K个类,
为属于类
的样本个数;设特诊A有n个不同的取值
,根据特征A的取值将D划分为n个子集
,
为样本个数。记子集
中属于类
的样本集合为
,
为样本个数。)
7、三种决策树学习算法
ID3:使用信息增益/互信息g(D,A)进行特征选择。
C4.5:信息增益率 gr(D,A) = g(D,A) / H(A)。
CART:基尼指数
一个属性的信息增益(率)/gini指数越大,表明属性 对样本的熵减少的能力更强,这个属性使得数据由不确定性变成确定性的能力越强
二、决策树的拟合过程
If 所有样本属于同一分类 then 返回标号为概分类的叶结点
Else if 属性值为空 then 返回标号为最普通分类的叶结点
Else 取一个属性,A作为根节点;
For A的每一个可能值Vi
令examples i 为具有A=Vi的样本子集;
从根节点出发增加分支(A=Vi);
If examples i为空 then 创建标号为最普通分类的叶结点
Else
递归创建子树DTree(examples i, attributes-{A});
三、解决过拟合方法
1、剪枝
由完全树T0开始,剪枝部分结点得到T1,再次剪枝部分结点得到T2…直到仅剩树根的树Tk;
在验证数据集上对这k个树分别评价,选择损失函数最小的树Tα
2、随机森林
n 从所有属性中随机选择k个属性,选择最佳分割属性作为节点建立CART决策树;
n 重复以上两步m次,即建立了m棵CART决策树
n这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类
Bootstrap采样采用一种有放回重采样方式,既假设有N个样本,每次取一个样本统计后再放回,重复n次。这种方法有时候会导致某些样本取了不知一次而有些样本一次也取不到。
四、提升
1、概念
提升是一个机器学习技术,可以用于回归和分类问题,它每一步产生一个弱预测模型(如决策树),并加权累加到总模型中;
2、梯度提升
如果每一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升(Gradient boosting)。
梯度提升算法首先给定一个目标损失函数,它的定义域是所有可行的弱函数集合(基函数);提升算法通过迭代的选择一个负梯度方向上的基函数来逐渐逼近局部极小值。这种在函数域的梯度提升观点对机器学习的很多领域有深刻影响。
提升的理论意义:如果一个问题存在弱分类器,则可以通过提升的办法得到强分类器。
3、Adaboost
AdaBoost算法可以看做是采用指数损失函数的提升方法,其每个基函数的学习算法为前向分步算法;
AdaBoost的训练误差是以指数速率下降的;
AdaBoost算法不需要事先知道下界γ,具有自适应性(Adaptive),它能自适应弱分类器的训练误差率。
详情请参考:http://blog.csdn.net/v_JULY_v/article/details/40718799