盒马唠机器学习之决策树

       树模型和线性模型有什么区别呢?其中最重要的是,树形模型是一个一个特征进行处理并且每增加一个特征相当于在数据中切一刀,之前线性模型是所有特征给予权重相加得到一个新的值。决策树与逻辑回归的分类区别也在于此,逻辑回归是将所有特征变换为概率后,通过大于某一概率阈值的划分为一类,小于某一概率阈值的为另一类;而决策树是对每一个特征做一个划分也就是切一刀,它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。另外逻辑回归只能找到线性分割,而决策树可以可以做到非线性分割。决策树的优势也有在于构造过程不需要任何参数设置,因此在实际应用中,对于探测式的知识发现,决策树更加适用。

决策树模型

        决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部节点和叶节点,内部节点表示一个特征或属性,叶节点表示一个类。分类的时候,从根节点开始,对实例的某一个特征进行测试,根据测试结果,将实例分配到其子结点;此时,每一个子结点对应着该特征的一个取值。如此递归向下移动,直至达到叶结点,最后将实例分配到叶结点的类中。

        所有的数据最终都会落到叶子节点,既可以做分类也可以做回归。

        一个例子:要将一家人分为3类分别为中老年人,少年和少女。我们被给年龄和性别特征。

        我们首先可以通过年龄是否大于15将数据分为中老年人(肯定不是少年和少女)和非中老年人。然后在通过性别将非中老年人分为少年和少女。


        根节点:第一个选择点(年龄特征)

        非叶子节点与分支:中间过程(性别特征)

        叶子节点:最终的决策结果(3种分类结果:中老年人,少年和少女)

特征选择

        其实一旦构造好了决策树,那么分类或者预测任务就很简单了,只需要走一遍就可以了,那么难点就在于如何构造出来一颗树,这就没那么容易了,需要考虑的问题还有很多的!

那如何切分特征(选择节点)呢?

        特征选择问题希望选取对训练数据具有良好分类能力的特征,这样可以提高决策树学习的效率。如果利用一个特征进行分类的结果没多大影响,则称这个特征是没有分类能力的(老婆是否长得漂亮,身材好不好和有没D啊(⊙o⊙)…,是会成为你找她的关键特征。但是喜欢不喜欢打游戏应该不会成为关键特征吧,也许也许也许也会吧……)。

        想象一下,我们要通过一种衡量标准,来计算通过不同特征进行分支选择后的分类情况,找出来最好的那个当成根节点(就像一个老大似的能更好的切分数据(分类效果更好)),然后接下来选择下面的节点也就是二当家,以此类推。

衡量标准-熵

        熵:熵是表示随机变量不确定性的度量(解释:说白了就是物体内部的混乱程度,比如杂货市场里面什么都有那肯定混乱呀(熵大),专卖店里面只卖一个牌子的那就稳定多啦(熵小))

        公式:


        例子:


        显然A集合的熵值要低,因为A里面只有两种类别,相对稳定一些而B中类别太多了,熵值就会大很多。

        不确定性越大,得到的熵值也就越大当p=0或p=1时,H(p)=0,随机变量完全没有不确定性当p=0.5时,H(p)=1,此时随机变量的不确定性最大。


        那么在决策树分类任务中我们希望通过节点分支后数据类别的熵值大还是小呢?肯定是熵小啊,熵越小不就信息越确定,越确定不就里面的类越少吗?
信息增益

        信息增益:表示特征X使得类Y的不确定性减少的程度。(分类后的专一性,希望分类后的结果是同类在一起)

        例子:14天打球的情况。特征温度,湿度,多云和天气。我们根节点应该选择哪个特征去切分呢?根节点下面的又要选择哪个特征去切分呢?


        首先我把四种特征都当根节点:

  

        首先,在历史数据中(14天)有9天打球,5天不打球,所以此时的熵应为:

        4个特征逐一分析,先从outlook特征开始: 

                Outlook = sunny时,熵值为0.971
                Outlook = overcast时,熵值为0
                Outlook = rainy时,熵值为0.971

         根据数据统计,outlook取值分别为sunny,overcast,rainy的概率分别为:5/14, 4/14, 5/14

        因此熵值计算:5/14 * 0.971 + 4/14 * 0 + 5/14 * 0.971 = 0.693

        可以推出根节点为Outlook是的信息增益:系统的熵值从原始的0.940下降到了0.693,增益为0.247

        同样的方式可以计算出其他特征的信息增益,那么我们选择最大的那个就可以啦,相当于是遍历了一遍特征,找出来了大当家,然后再其余的中继续通过信息增益找二当家(通过同样的方法)!

决策树算法

        ID3算法:根据信息增益评估和选择特征,每次选择信息增益最大的特征作为判断模块建立子结点。ID3算法可用于划分标称型数据集,没有剪枝的过程,为了去除过度数据匹配的问题,可通过裁剪合并相邻的无法产生大量信息增益的叶子节点(例如设置信息增益阀值)。使用信息增益的话其实是有一个缺点,那就是它偏向于具有大量值的属性。就是说在训练集中,某个属性所取的不同值的个数越多,那么越有可能拿它来作为分裂属性,而这样做有时候是没有意义的,另外ID3不能处理连续分布的数据特征。也是我们上面提到的算法。

        C4.5算法 :C4.5算法用信息增益率来选择属性,继承了ID3算法的优点。并在以下几方面对ID3算法进行了改进:
        (1) 克服了用信息增益选择属性时偏向选择取值多的属性的不足;
        (2) 在树构造过程中进行剪枝;
        (3)能够完成对连续属性的离散化处理;

        (4) 能够对不完整数据进行处理。

        C4.5算法产生的分类规则易于理解、准确率较高;但效率低,因树构造过程中,需要对数据集进行多次的顺序扫描和排序。也是因为必须多次数据集扫描,C4.5只适合于能够驻留于内存的数据集。在实现过程中,C4.5算法在结构与递归上与ID3完全相同,区别只在于选取决决策特征时的决策依据不同,二者都有贪心性质:即通过局部最优构造全局最优。

        CART算法:CART 是在给定输入X条件下输出随机变量Y的条件概率分布的学习方法。CART二分每个特征(包括标签特征以及连续特征),经过最优二分特征及其最优二分特征值的选择、切分,二叉树生成,剪枝来实现CART算法。对于回归CART树选择误差平方和准则、对于分类CART树选择基尼系数准则进行特征选择,并递归调用构建二叉树过程生成CART树。 使用到了GILI系数:


和熵的衡量标准类似,计算方式不同而已。


决策树剪枝策略

        为什么要为什么要剪枝:决策树过拟合风险很大,理论上可以完全分得开数据。但是泛化能力太弱了。

        理想的决策树有三种:

        1.叶子节点数最少

        2.叶子加点深度最小

        3.叶子节点数最少且叶子节点深度最小。


预剪枝
        通过提前停止树的构建而对树剪枝,一旦停止,节点就是树叶,该树叶持有子集元祖最频繁的类。
停止决策树生长最简单的方法有:
        (1)定义一个高度,当决策树达到该高度时就停止决策树的生长
        (2)达到某个节点的实例具有相同的特征向量,及时这些实例不属于同一类,也可以停止决策树的生长。这个方法对于处理数据的数据冲突问题比较有效。
        (3)定义一个阈值,当达到某个节点的实例个数小于阈值时就可以停止决策树的生长
        (4)定义一个阈值,通过计算每次扩张对系统性能的增益,并比较增益值与该阈值大小来决定是否停止决策树的生长。
后剪枝方法
        后剪枝(postpruning):它首先构造完整的决策树,允许树过度拟合训练数据,然后对那些置信度不够的结点子树用叶子结点来代替,该叶子的类标号用该结点子树中最频繁的类标记。相比于先剪枝,这种方法更常用,正是因为在先剪枝方法中精确地估计何时停止树增长很困难。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值