机器学习算法之决策树

前言

决策树是一种简单高效并且具有强解释性的模型,广泛应用于数据分析领域。其本质是一颗由多个判断节点组成的树,如:

决策树

在使用模型进行预测时,根据输入参数依次在各个判断节点进行判断游走,最后到叶子节点即为预测结果。

如何构造决策树

决策树算法的核心是通过对数据的学习,选定判断节点,构造一颗合适的决策树。

假设我们从用户行为日志中整理出如下数据:

原始数据

我们的目的是要利用这些数据,训练决策树模型,模型训练好后,我们就可以通过任意给定的用户来源网站、位置、是否阅读过 FAQ、浏览网页数信息,预测该用户是否会进行付费以及付费类型,供运营使用。

选择合适的拆分条件

我们知道决策树是由一个个判断节点组成,每经过一个判断节点数据就会被拆分一次。上面数据中有4种属性,每种属性下面有多种值,我们可以按位置是否来自「浙江」进行拆分,拆分结果为:

按是否来自「浙江」拆分结果

我们「拍脑袋」进行了一次拆分,到底这么拆分合不合适,是不是最佳,我们需要量化指标来进行评价,在决策树算法中,我们通过基尼不纯度或者来对一个集合进行的有序程度进行量化,然后引入信息增益概念对一次拆分进行量化评价。下面依次介绍。

基尼不纯度

基尼不纯度是指将来自集合中的某种结果随机应用于集合中某一数据项的预期误差率。如何集合中的每一个数据项都属于同一分类,那么推测的结果总会是正确的,因此误差率是 0;如果有 4 种可能的结果均匀分布在集合内,出错可能性是75%,基尼不纯度为 0.75。该值越高,说明拆分的越不理想,如果该值为 0,说明完美拆分。java 实现代码如下:

public static float getCiniimpurity(String[] rows){
        float total = rows.length;
        //将[a,a,b,c]转化成[2,1,1]
        Integer[] uniqueRows = getUniqueRows(rows);
        float score = 0.0f;
        for(int k1=0;k1<uniqueRows.length;k1++){
            float p1 = uniqueRows[k1]/total;
            for(int k2=0;k2<uniqueRows.length;k2++){
                if(k2 == k1) continue;
                float p2 = uniqueRows[k2]/total;
                score += p1 * p2;
            }
        }
        return score;
    }

熵是信息论中的概念,用来表示集合的无序程度,熵越大表示集合越混乱,反之则表示集合越有序。熵的计算公式为:

E = -P * log2P

java 代码实现如下:

public static double getEntropy(String[] rows){
        float total = rows.length;
        //将[a,a,b,c]转化成[2,1,1]
        Integer[] uniqueRows = getUniqueRows(rows);
        double ent = 0.0;
        for(int i=0;i<uniqueRows.length;i++){
            float p = uniqueRows[i]/total;
            ent = ent - p * (Math.log(p)/Math.log(2));
        }
        return ent;
    }
基尼不纯度与熵对比

两者主要区别在于,熵到达峰值的过程相对慢一些。因此熵对混乱集合的「判罚」往往更重一些。通常情况下,熵的使用更加频繁。

信息增益

假设集合 U,一次拆分后变为了两个集合 u1 和 u2 ,则有:

信息增益 = E(U) - (Pu1 x E(u1) + Pu2 x E(u2))

E 可以是基尼不纯度或熵。
使用 Pu1 和 Pu2 是为了得到拆分后两个集合基尼不纯度或熵的加权平均,其中 :

  • Pu1 = Size(u1) / Size(U)
  • Pu2 = Size(u2) / Size(U)

信息增益越大,说明整个集合从无序到有序的速度越快,本次拆分越有效。

构造决策树

我们已经可以通过信息增益量化一次拆分的结果好坏,下一步就是构造决策树,主要步骤如下:

  1. 遍历每个决策条件(如:位置、来源网站),对结果集进行拆分
  2. 计算该决策条件下,所有可能的拆分情况的信息增益,信息增益最大的拆分为本次最优拆分
  3. 递归执行1、2两步,直至信息增益<=0

执行完上述步骤后,就构造出了一颗决策树,如图:

决策树

决策树剪枝

为什么要剪枝

训练出得决策树存在过度拟合现象——决策树过于针对训练的数据,专门针对训练集创建出来的分支,其熵值可能会比真实情况有所降低。

如何剪枝

人工设置一个信息增益的阀值,自下而上遍历决策树,将信息增益低于该阀值的拆分进行合并

处理缺失数据

决策树模型还有一个很大的优势,就是可以容忍缺失数据。如果决策树中某个条件缺失,可以按一定的权重分配继续往以后的分支走,最终的结果可能有多个,每个结果又一定的概率,即:
最终结果=某个分支的结果 x 该分支的权重(该分支下的结果数/总结果数)

处理数值型数据

决策树主要解决分类问题(结果是离散数据),如果结果是数字,不会考虑这样的事实:有些数字相差很近,有些数字相差很远。为了解决这个问题,可以用方差来代替熵或基尼不纯度。

结语

本文简单介绍了决策树算法,该算法虽然简单,但是在很多场景能取得非常好的效果,值得读者一试。另外,从决策树发展出了更为高级复杂的随机森林,如果有兴趣读者可以去深入了解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249

推荐阅读更多精彩内容

  • 转自算法杂货铺--决策树决策树和随机森林学习笔记-欢迎补充 http://www.cnblogs.com/fion...
    明翼阅读 10,574评论 1 6
  • 决策树理论在决策树理论中,有这样一句话,“用较少的东西,照样可以做很好的事情。越是小的决策树,越优于大的决策树”。...
    制杖灶灶阅读 5,743评论 0 25
  • 这里开始机器学习的笔记记录。今天的这篇是一个分类方法--决策树。 决策树优点:计算复杂度不高,输出结果易于理解,对...
    七号萝卜阅读 6,357评论 0 18
  • 积跬步以致千里,积怠惰以致深渊 注:本篇文章在整理时主要参考了 周志华 的《机器学习》。 主要内容 决策树是机器学...
    指尖上的魔术师阅读 1,298评论 0 5
  • 作者:仞月 三八妇女节,为了提升自我修养,参观了廉政教育基地——恭王府。 众所周知,恭王府是清朝恭亲王奕䜣的住宅,...
    仞月psy阅读 1,194评论 2 4