机器学习入门(十四)——决策树(3)

       上一篇介绍了决策树中涉及的各分类依据指标的概念,信息增益、信息增益率和基尼系数。在构建树模型时选择的分类指标不同,就有不同的决策树构建方法,如本篇将要介绍的最经典决策树构建法:ID3和C4.5

1.0 ID3算法

1.1 算法简介

        ID3算法是基于“信息增益”的一种决策树构建算法,用于对离散变量进行分类。算法的本质就是通过计算每个特征的信息增益,每次划分选取信息增益最高的属性为划分标准,递归地构建决策树。

        ID3决策树的一般构建流程:

        1)从根结点(root node)开始,对数据集的所有特征的信息增益进行计算,选择信息增益最大的特征作为结点的特征;

        2)由该特征的不同取值建立子节点,再对子结点递归地调用以上方法,继续向下构建树;

        3)直到所有特征的信息增益均很小或没有特征可以选择为止,最后得到一个决策树。

        从ID3的构建树过程而言,该算法使用了贪婪搜索,从不回溯重新考虑之前的选择情况,因此无法保证是最优的

1.2 伪码实现

        使用递归思想实现决策树构建函数:


定义函数   createTree(dataSet,featList,bestFeatLists)

        Step 1:原始数据集dataSet中切割出特征矩阵和分类标签X,y

        Step 2:如果y中只有一类标签,说明已经递归到分类边界了,则返回该标签

        Step 3:如果X中只有一类属性(特征列),但是类标签依然不是唯一的,采用投票法决定该子节点的标签

        Step 4:如果未存在S2和S3中的情况,找出X中最优划分(信息增益最大)的特征,确定bestFeatIndex(在特征的列名集合featList中的索引)和最优划分特征bestFeatLabel(列名),将该特征值存储到bestFeatLists中

        Step 5:将最优划分特征值作为当前(子)树的根节点,生成初始决策树myTree

        Step 6:从featList中删除当前已经使用过的特征、从X删除对应的列数据,形成新的子数据集(此时X.shape[0] = 子数据集.shape[0],但是X.shape[1] = 子数据集.shape[1]+1)

        Step 7:确定子树分支。获取已选择的最优划分特征所对应分类值categories(如“年龄”是最优特征,则“老”“中”“青”三个子类),将子数据集再进行分割(如最优特征“年龄”按“老”“中”“青”三类取值进一步分词三个子数据集,此时 子数据集.shape[0] = "老"_子数据集.shape[0]+"中"_子数据集.shape[0]+"青"_子数据集.shape[0])

        Step 8:遍历每一个当前特征下的子数据集,对每个子数据集递归地调用创建决策树的方法,将递归调用的结果作为当前特征节点的一个分支(如“老”“中”“青”就是“年龄”的分支)

# 构建树的采用字典存储结构,即特征作为字典的key,所得到的分类结果作为value,子树递归嵌套


1.3 算法优缺点

       ID3算法具备决策树算法的优点,但存在一些问题:

       没有剪枝过程,为了去除过渡数据匹配的问题,可通过裁剪合并相邻的无法产生大量信息增益的叶子节点;

       信息增益的方法偏向选择具有大量值的属性,也就是说某个属性特征索取的不同值越多,那么越有可能作为分裂属性,这样是不合理的;

       只可以处理离散分布的数据特征;

       ID3算法只考虑了树的生成,即尽可能的是模型拟合当前训练数据集,所以该算法生成的树容易过拟合。

2.0 C4.5算法

2.1 算法简介

        C4.5算法是数据挖掘十大算法之一,是在ID3算法基础上进行了多项改进,主要包括:

        1)用信息增益比来判断特征;

        2)在决策树的构造过程中进行剪枝;

        3)对非离散数据也能处理

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

        C4.5算法与ID3算法过程相似,仅在特征选择时,使用信息增益比作为特征选择准则。

2.2 实现伪码


输入:训练数据集D(标签),特征集A,阈值\varepsilon

定义函数   GenerateTree(D,A):

        S1:计算当前节点的信息增益率GainRatio,找到GainRatio最大的特征a_*,并以该特征生成节点node

                S1.1:计算经验熵 H(D)

                S1.2:计算经验熵H(D|A=a)   # 选择某特征a作为划分特征时的条件熵

                S1.3:计算信息增益Gain(D,a) = H(D) - H(D|A=a)   # 选择特征a作为划分特征时的条件熵

                S1.4:计算特征熵 H_A(D)

                S1.5:计算信息增益率 GainRatio =\frac{Gain(D,a) }{H_A(D)}

        S2:if D中的所有标签都为同一类,记为C:

                        将node标记为叶节点,标签为C;return

                end if

        S3:if A为空 或 D在A特征上的取值都相同:

                    将node标记为叶节点,其标签标记为D中数量最多的标签;return

                end if

        S4:for a_* 中的每一个值a_*^i:

                        给node生成一个分支;令D_i表示Da_* = a_*^i的样本子集;

                        if  D_i为空  then  将该分支标记为叶节点,类别标签为此时D中数量最多的标签;return

                        else  调用GenerateTree(D_i,A/a_*)递归构建子树

                        end if

                end for

3.0 ID3和C4.5比较

        1)ID3:

        熵表示的是数据中包含的信息量大小。熵越小,数据的纯度越高,也就是说数据越趋于一致,这是希望的划分之后每个子节点的样子。信息增益 = 划分前熵 - 划分后熵。信息增益越大,则意味着使用属性 a 来进行划分所获得的 “纯度提升” 越大 **。也就是说,用属性 a 来划分训练集,得到的结果中纯度比较高。ID3 仅仅适用于二分类问题,ID3 仅仅能够处理离散属性。

        2)C4.5:

        C4.5 克服了 ID3 仅仅能够处理离散属性的问题,以及信息增益偏向选择取值较多特征的问题,使用信息增益比来选择特征。信息增益比 = 信息增益 / 划分前熵 选择信息增益比最大的作为最优特征。C4.5 处理连续特征是先将特征取值排序,以连续两个值中间值作为划分标准。尝试每一种划分,并计算修正后的信息增益,选择信息增益最大的分裂点作为该属性的分裂点。

        3)信息增益 vs 信息增益比:

        之所以引入了信息增益比,是由于信息增益的一个缺点。那就是:信息增益总是偏向于选择取值较多的属性。信息增益比在此基础上增加了一个罚项,解决了这个问题。

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

推荐阅读更多精彩内容

  • 决策树理论在决策树理论中,有这样一句话,“用较少的东西,照样可以做很好的事情。越是小的决策树,越优于大的决策树”。...
    制杖灶灶阅读 5,826评论 0 25
  • 1.前言 决策树是一种基本的分类和回归方法。决策树呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。采用...
    胜利主义章北海阅读 2,635评论 0 0
  • 决策树基础概念 决策树分为分类树和回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树。每个内部节点(非...
    我只要喝点果粒橙阅读 2,499评论 0 0
  • Decision Trees (DTs) 是一种用来classification和regression的无参监督学...
    婉妃阅读 6,066评论 0 8
  •   决策树(Decision Tree)是一种基本的分类与回归方法,其模型呈树状结构,在分类问题中,表示基于特征对...
    殉道者之花火阅读 4,494评论 2 2