决策树(Decision tree,DT)算法笔记(一)-Python

写在前面的话:哈喽,大家早安、午安、晚安喽,欢迎大家指点,也希望我的内容可以温暖、帮助同在学习路上的人们~

正文开始~~


再次申明:本文的理论知识来自Peter Harrington的《机器学习实战》和李航的《统计学习方法》,非常感谢这些优秀人物和优秀书籍


决策树(decision tree)算法简介:决策树算法思想主要来源于由Quinlan在1986年提出的IID3算法和1993年提出的C4.5算法,以及由Breiman等人在1984年提出的CART(分类回归决策树)。决策树算法是一种基本的分类与回归算法。决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。本文仅讨论用于分类的决策树。

分类决策树工作原理:分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed node)组成。结点分两类:内部结点(internal tree)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。分类决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。开始,构建根结点,将所有训练数据都放在根结点。选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。如果这些子集已经能够被基本正确分类,那么构建叶结点,并将这些子集分到所对应的叶结点中去;如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点。如此递归地进行下去,直至所有训练数据子集被基本正确分类,或者没有合适的特征为止。最后每个子集都被分到叶结点上,即都有了明确的类,最终生成了一颗决策树。以上方法生成的决策树可能对训练数据有很好的分类能力,但对未知的测试数据却并未有很好的分类能力,可能发生过拟合,因此需要对生成的决策树自下而上剪枝,将树变得简单,从而使他具有更好的泛化能力。

分类决策树算法的实现:

流程:1)收集数据:可以使用任何方法;2)准备数据:构造算法只适用于标称型数据,因此数值型数据必须离散化;3)分析数据:可以使用任何方法,构造树完成之后,应该检查图形是否符合预期;4)训练算法:构造树的数据结构;5)测试算法:使用经验树计算错误率;6)使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。

特征选择:在上述第3)步中,决策树通过信息增益来选择特征,进而构建决策树。给定训练数据集D和特征A,经验熵H(D)表示对数据集D进行分类的不确定性。而经验条件熵H(D|A)表示在特征A给定的条件下对数据集D进行分类的不确定性。那么它们的差,即信息增益,就表示由于特征A而使得对数据集D的分类的不确定性减少的程度。显然,对于数据集D而言,信息增益依赖于特征,不同的特征往往具有不同的信息增益。信息增益大的特征具有更强的分类能力。

分类决策树的Python实现

1)利用香农熵公式计算整个数据集的信息熵,代码见图1

图1 计算数据集的信息熵

2)基于某一特征,会划分数据集,代码见图2


图2 按照给定的特征的位置和取值来划分数据集

3)通过计算信息增益,找让信息增益最大的特征,也就是最好的分类特征,代码见图3

图3 找到最好的分类特征

4)逐步递归,构建决策树

递归的结束条件:1)程序遍历完所有划分数据集的属性。此时存在的一种情况是数据集以及处理了所有属性,但是类标签依然不是唯一的,此时需要决定改如何定义该叶结点,一般采用多数表决的方法;2)每个分支下的所有实例都具有相同的分类。如果所有实例具有相同的分类,则得到一个叶子节点或者终止块。任何到达叶子节点的数据必然属于叶子节点的分类。

图4 创建决策树

5)基于Matplotlib模块来绘制决策树。其中,Matplotlib的一些绘图操作可以查看Matplotlib官方文档Matplotlib博客等。

图5 绘制结点
图6 获取结点数目和树的层次
图7 绘制决策树

好啦,以上基本就是基于Python的决策树实现算法,感觉自己还是不熟悉这块儿,希望得到大神指导或者大家分享一些棒棒哒的学习资源哈,提前谢谢大家啦~~

同样,接下来将基于scikit-learn的相关模型来实现决策树算法,敬请期待哈~~

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

推荐阅读更多精彩内容