机器学习算法之–决策树
最经典的机器学习模型之一,成树型结构,决策树的目的是为了产生一颗泛化能力强,处理未见实例能力强的树,通过特征判断不断分类,基本流程遵循“分而治之”的递归分类策略。
一、算法原理
1.1、特征选择
关键就是选取对训练数据具有分类能力的特征,可提高决策树学习的效率。通常特征选择的准则是信息增益或信息增益比。
1.2、信息增益
- 熵:表示随机变量不确定性的度量;熵越大,随机变量的不确定性就越大。
- 信息熵:出自香浓的《通信数学原理》,是度量样本集合纯度最常用的一种指标
假定当前样本集合X中第k类样本所占比例: p k ( k = 1 , 2 , . . . , ∣ y ∣ ) p_k(k=1,2,...,|y|) pk(k=1,2,...,∣y∣),信息熵(Information Entropy)定义为:
E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k Ent(D)=-\sum_{k=1}^{|y|}p_klog_2p_k Ent(D)=−k=1∑∣y∣pklog2pk
- 熵Ent(D)随概率p(x)变化的曲线如下图所示
Ent(D)越小,D纯度越高;熵越大,随机变量的不确定性就越大。
当概率越接近0或1时,信息熵值越小,不确定性越小,数据越纯
- 条件熵:H(Y|X),表示在已知随机变量X的条件下随机变量Y的不确定性。
- 信息增益:表示得知特征X的信息而使得类Y的信息的不确定性减少的程度
属性a有V个不同取值 { a 1 , . . . . . . , a V } \{a^1,......,a^V \} {a1,......,aV},若使用a对样本集D进行划分,则会产生V个分支节点, D v D^v Dv表示数据集在属性a上取值为 a V a^V aV的样本,根据信息熵公式可计算出该信息熵,再考虑到不同分支包含的样本数不同,给分支节点赋予权重 ∣ D v ∣ ∣ D ∣ \frac{|D^v|}{|D|} ∣D∣∣Dv∣,也就是样本数越多的分支结点影响最大,于是便可计算出使用属性a进行划分所获得的“信息增益”(information gain)
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D, a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
- |D|表示样本容量
- 其中, ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) \sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v) ∑v=1V∣D∣∣Dv∣Ent(Dv)称为:条件熵 H(D|A),表示特征A对训练数据集D的条件熵
- 一般而言,信息增益越大,意味着使用属性a进行划分所获得的“纯度提升”越大,因此可使用信息增益来进行决策划分的属性选择依据(ID3算法就是使用该原理)
- 信息增益比:以信息增益作为划分训练数据集的特征,存在偏向于选取取值较多的特征的问题,使得信息增益比可以对这一问题进行校正,这也是特征选择的另一标准
g R ( D , A ) = G a i n ( D , a ) H a ( D ) g_R(D, A)=\frac{Gain(D, a)}{H_a(D)} gR(D,A)=Ha(D)Gain(D,a)
其中Gain(D,a)表示特征信息增益; H a ( D ) H_a(D) Ha(D)表示训练数据集D关于特征a的值的熵,且 H a ( D ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_a(D)=-\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2\frac{|D_i|}{|D|} Ha(D)=−∑v=1V∣D∣∣Dv∣log2∣D∣∣Di∣,且概率 ∣ D i ∣ ∣ D ∣ = p i \frac{|D_i|}{|D|}=p_i ∣D∣∣Di∣=pi
- 特征选择:特征选择在于选取对训练数据具有分类能力的特征,可以提高决策树学习的效率。通常特征选择的准则是信息增益或信息增益比。
二、决策树的创建(ID3算法)
叶结点对应一个决策结果,其余分支节点对应一个属性测试
- 信息熵计算:①计算数据集DataSet划分前的信息熵;②遍历所有未作为划分条件的特征,分别计算根据每特征划分的信息熵
- 特征选择:选择信息增益最大的特征,使用其作为DS划分节点来划分DS
- 递归:递归处理被划分后的所有子数据集DS,从未被选择的特征中继续进行划分
- 终止:①直到所有特征都用完,终止决策;②或者当划分后的信息增益足够小,也停止决策
算法模拟:
输入:训练数据集D,特征集A,阈值
ϵ
\epsilon
ϵ
输出:决策树T
- 若D中所有实例属于同一类 C k C_k Ck,则T为单结点树,并将类 C k C_k Ck作为该结点的类标记并返回T
- 若A=空集,则T为单结点树,并将D中实例数最大的类 C k C_k Ck作为该结点类标记并返回T
- 否则,计算A中各特征对D的信息增益,选择信息增益最大的特征 A g A_g Ag
- 如果 A g A_g Ag信息增益小于某阈值 ϵ \epsilon ϵ,则置T为单结点树,并将D中实例数最大的类 C k C_k Ck作为该结点类标记,并返回T
- 否则,对于 A g A_g Ag每一个可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai将D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子结点,由节点及其子节点构成树T,返回T
- 对第i个子结点,以 D i D_i Di为训练集,以 A − A g A-{A_g} A−Ag为特征集,递归地调用前5步,得到子树 T i T_i Ti,返回 T i T_i Ti
ID3算法相当于用极大似然法进行概率模型的选择。
注意:
- 特征是连续值,将其离散化(划分区间)
- 避免极端分类:加上正则项,整体再作为最后信息熵的值;或使用信息增益比作为特征选择标准(C4.5算法,与ID3相比不同之处在于根据信息增益比来作为划分依据)。
三、剪枝算法
在决策树学习中将以生成的数进行简化的过程。剪枝从已生成的树上裁掉一些子树或叶结点,是为了解决过拟合问题
前剪枝:也叫预剪枝,构造决策树的过程中无法进一步降低信息熵时,停止建立该分支;(设定一个阈值,即使减小量小于该阈值,也停止建立分值)
- 。
后剪枝(可由一种动态规划算法来实现):决策树建立完成之后再进行剪枝操作,是比较普遍使用的方法,根据“大多数原则”;
- 对于拥有同样父节点的一组节点进行检查、判断。
- 将其合并之后,信息熵的增量是否小于某一阈值?
- 小于:合并结点,用叶结点中类别最多的那个作为新结点的类别
- 例:降低错误率剪枝法(简化版)
四、集合算法
自助聚合算法Bagging(Bootstrap Aggregating):有放回采样。
原理:从m个样本中采样n次,组成包含n个样本的训练集,训练模型,重复B次,得到B个模型。如果是分类问题,由B个模型得到的结果投票决定(少数服从多数);若用于回归问题,取B个模型所的结果的平均值作为最终结果。
正向激励算法boosting:
原理:初始化时,m个训练样本的数据集,每个样本分配一个初始权重,使用带权数据集训练模型,得到模型后,增加预测错误样本权重,采用新的带权数据集训练新模型,重复B次,得到B个模型。
随机森林:每次训练时,随机选取一个特征的子集进行训练
- 两个关键参数:构建的决策树个数t,单棵树特征数f
随机森林中单棵决策树的构建:
- 有放回地采样m次
- 从n个特征中无放回采样f次,构成一个新的数据集
- 新数据集上构建决策树
- 重复上述过程t次,构建t棵决策树
随机森林分类结果
- 数字型:平均值
- 分类型:少数服从多数
为什么不选全部特征训练:为了解决过拟合问题,强关联,使得每个特征值都保持少量的贡献
五、算法实战
决策树算法实战可参考该博客:《机器学习实战》第三章 Python3代码-(亲自修改测试可成功运行)
以上就是关于决策树的分享,若有不妥之处,欢迎各路大佬不吝赐教~文章来源:https://www.toymoban.com/news/detail-422408.html
喜欢的伙伴点个赞关注一下吧~文章来源地址https://www.toymoban.com/news/detail-422408.html
到了这里,关于机器学习算法系列(四)-- 决策树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!