机器学习——决策树算法分析

    欢迎关注微信公众号:AI Engine

    之前写过一篇文章是关于决策树实例的,对于急于上手的同学应该会有一定的帮助,这次对决策树算法原理会做一个较为详细的说明分析,可能会比较枯燥,俗称“看不动”。但是对于想要更深一步了解的同学,本篇文章对您或许所有帮助。

    决策树是人工智能算法中较为常见的一种,该算法可以应用的场景以及典型案例也很多。比如对商品购买能力的预测、对天气情况的预测、以及在医学中的应用等等。很多博客中经常会举相亲的例子作为介绍决策树介绍的敲门砖,不好意思我也一样。我们来看一个场景:

    时间: 早上九点

    地点: 家里。 

    “闺女,我给你找了个合适的对象,今天要不要见一面?”

    “多大?”

    “26岁。”      ———————————————————>年龄条件

    “长得帅吗?” ————————————————————>颜值条件

    “还可以,不算太帅。”

    “工资高么?” ———————————————————>收入条件

扫描二维码关注公众号,回复: 5190716 查看本文章

    “略高于平均水平。”

    “会写代码吗?”———————————————————>特殊条件

    “人家是程序员,代码写得棒着呢!”

    “好,那把他联系方式发来吧,我抽空见一面。” ========================>>>>>>>结论

    这是一个普通的相亲故事,但是在这个女孩和她母亲的对话中无形的构造出了一个决策树的模型:


9370451-33373dee2adc8233.png

    较为官方的概念:决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。每个非叶节点表示一个特征属性上的测试集,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。说实话我第一次看到这句话的时候确实也不知道到底说的是啥,但是例子是个好东西,上面的例子就是一个很好的说明。但是现在问题来了,在这个例子中女孩的所有划分条件(年龄,颜值…)都是比较明确和具体的,可是如果我们在拥有数据的同时也许并不知道这些划分条件。这些条件在机器学习中我们称之为特征,特征的选取需要我们对数据敏感并利用特征工程等知识对其进行确定。特征确定之后我们就拥有了一个特征序列{fea1,fea2,fea3……}。问题又来了,在这个例子中女孩首先使用的特征是年龄,她为什么这么做?这样做的优势是什么?这引出我们应该思考的第一个小问题:决策树的种类有哪些?每种的决策树的核心启发函数是什么?它们之间的区别和联系又是什么?

    我先回答上面关于种类的问题,常用的决策树分为3种:ID3决策树、C4.5决策树、CART决策树。我们首先介绍ID3决策树。 从信息论知识中我们知道,期望信息越小,信息增益越大,从而纯度越高。所以ID3算法的核心思想就是以信息增益来度量属性选择,选择分裂后信息增益最大的属性进行分裂。那么我们如何计算信息增益呢?在计算信息增益前我们需要计算数据集的经验熵和每个特征的经验条件熵(我知道有部分同学可能到这里已经要放弃阅读了,别着急,我保证让大家能看动!)

    对于样本集合D,类别数为K,数据集D的经验熵表示为:


9370451-49329905ab2ed20f.png

    其中Ck是样本集合D中属于第k类的样本子集,|Ck|表示该子集的元素个数,|D|表示样本集合的元素个数。然后计算某个特征A对于数据集D的经验条件熵H(D|A)为:


9370451-c7cd44682894c180.png

    其中,Di表示D中特征A取第i个值的样本子集,Dik表示Di中属于第k类的样本子集。计算完二者之后信息增益就可以得出结果了,即:经验熵 - 经验条件熵:


9370451-d68ff402d16a51f2.png

    为了表示诚意,举实例作为上述原理的解释说明,特附上手稿一幅:


9370451-4e6d853b543f7904.jpeg

    从这个例子中我们计算出了经验熵和各自的经验条件熵,最后很明显’代码’属性的信息增益是最大,所有的样本可以根据此特征直接被分到叶结点(即见或不见)中,从而完成决策树生长。当然,在实际应用中决策树往往不能通过一个特征就完成构建,需要在经验熵非0的类别中继续生长。上述的例子由于代码属性的信息增益最大,所以第一次分类就以代码属性进行划分,之后就按照上述的计算方法迭代进行,从而构造一颗完整的决策树。

    以上就是ID3算法大致的核心思想,下面介绍一下C4.5决策树算法。如果说ID3算法依赖于信息增益,那C4.5就是依赖于信息增益比了,也可以说是ID3算法的优化。上述的例子中,不少朋友已经看出来既然’代码’属性这么NB,那就只按照这个属性划分正好也能得到预期的结果,何必还问工资年龄呢?没错,这可以说是ID3算法的劣势之一:易产生过拟合。ID3算法还存在另外一个问题,就是偏向于多值属性,例如,如果存在唯一标识属性ID,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处,而C4.5使用信息增益比试图克服这个不足。

    特征A对于数据集D的信息增益比为:


9370451-477c30cce95befd0.png

其中:


9370451-b01aad56377c3dfe.png

    结合我们之前的实例以及上述公式,我们计算每个特征的取值熵:


9370451-2467eea009819ac8.png

    每个特征的取值熵均相同,那么我们可以得出结论’代码’属性的信息增益比仍然是所有属性中最大的,依然是分类的最好依据!最后我们看看CART决策树算法,该算法所依赖的是Gini系数,Gini系数所表示的是纯度信息,与信息熵含义相似:


9370451-c677f71b3b14f598.png

    CART在每一次迭代中选择基尼指数最小的特征及其对应的切分点进行分类。 但与ID3、C4.5不同的是,CART是一颗二叉树,采用二元切割法,每一步将数据按特征A的取值切成两份,分别进入左右子树。特征A的Gini指数定义为:


9370451-a44bd4959d9f118f.png

我们还是结合上述的实例计算一下:


9370451-2a1418da8d47278c.png

    果然是’代码’属性的纯度最高,Gini值最少,逆天特征。

    同理而述,CART决策树会选择’代码’属性作为第一次分类的划分依据,然后依次迭代上述的计算过程完成整个决策树的生长,实现分类的效果。这就是常用决策树的构建过程以及实现原理。三种算法有一定的区别:1.ID3以信息增益作为评定标准,信息增益是指给定条件后不确定性减少的程度,信息增益越大,确定性越高,熵值越小。但是在应用中模型的泛化能力弱,易产生过拟合。2.C4.5采取信息增益比,是对ID3的一种优化,提高了模型的泛化能力。3.ID3只能对离散型数值进行预测,而C4.5和CART可以对离散型和连续型数值均进行预测。但是从应用的角度来说,只有CART适合分类和回归任务,ID3和C4.5只适合分类任务。4.ID3和C4.5可以在每个结点上产生出多叉分支,且每个特征在 层级之间不会复用,而CART每个结点只会产生两个分支, 因此最后会形成一颗二叉树,且每个特征可以被重复使用。5.ID3和C4.5通过剪枝来权衡树的准确性与泛化能力,而CART直接利用全部数据发现所有可能的树结构进行对比。

    决策树大致就是如此,是机器学习中比较常用也比较简单有效的算法,但是有一定的缺陷。当然,所有的算法都是依赖于数据的质量的,相信大家一定会懂。后续的文章可能会介绍预剪枝和后剪枝的故事,希望大家多多关注小编,有哪里说的不好还请诸位多多指导批评,谢谢各位了。

猜你喜欢

转载自blog.csdn.net/weixin_34293059/article/details/87232960