决策树原理及一个简单的小例子

首先通过两个图来引入什么是决策树。


是否学习的决策过程

决策树是仿树结构来进行决策的,例如上图来说,我们要对‘是否学习’这个问题进行决策时,通常伴随一系列的子决策。先看是否有‘对象’,有的话是否需要‘陪伴对象’,通过一次次子决策后得到最终决策:是否学习。
一般情况下,一棵决策树包含一个根节点,若干内部节点和若干叶节点,如下图所示,那么与是否学习的决策过程对应起来,‘女票’为根节点,'陪女友'和‘任务’‘吃鸡’为内部节点,最下面一层为叶子节点。


决策树节点图

决策树算法第一种常见的机器学习方法,常用于分类任务中,从给定的训练数据集中学习到一个模型用于对新示例进行分类。决策树需要两部分数据:
  • 训练数据:用于构造决策树,即决策机制
  • 测试数据:验证所构造决策树的错误率
    下面给出决策树学习算法伪代码:


    决策树学习算法伪代码

    下面我们以一个具体的小实例来讲解决策树算法
    数据为一个简单的判别生物是否为鱼类的数据集,通过对下面数据进行分析,建立决策树。

序号 不浮出水面是否可以生存 是否有脚蹼 属于鱼类
1
2
3
4
5

第一步是数据处理

def Dataset():
    data=[[1,1,'yes'],[1,1,'yes'],[1,0,'no'],[0,1,'no'],[0,0,'no']]  #数据集
    labels=['no surfacing','flipper']
    return data,labels

def splitdata(dataset,row,label):        #按照特定属性划分数据集
    Dataset=[]
    for data in dataset:
        if data[row]==label:
            reducedata=data[:row]
            reducedata.extend(data[row+1:])
            Dataset.append(reducedata)
    return Dataset

伪代码的第8行是决策树建模很关键的一步,那么如何选择最优划分属性的呢?我们希望伴随着划分过程进行时,决策树分支节点所包含 样本尽可能属于同一类别,即节点的纯度越来越高。一般常用方法是利用信息增益。
在介绍信息增益之前先引入一个概念--信息熵

信息熵

信息熵

Ent(D)就是信息熵,其中pk为样本集合D中第k类样本所占比例,Ent(D)的值越小,就代表该样本集D的纯度越高。

信息增益

信息增益

假设属性a有V个可能取值,那么用a来对样本集进行划分,就会产生V个分支节点,Dv是第v个分支所包含的样本。上式就可计算出用属性a对样本集D进行划分所获得的信息增益。信息增益越大,用属性a对样本进行划分的纯度越高。所以选择使得信息增益最大的属性进行划分。具体代码实现如下:

def shannonEnt(dataset):   #计算信息熵
    lens=len(dataset)
    count={}
    for data in dataset:
        key=data[-1]
        count[key]=count.get(key,0)+1
    Ent=0
    for key in count:
        prob=count[key]/lens
        Ent-=prob*log(prob,2)
    return Ent

def choosefeature(dataset):    #选择最优划分属性
    lens=len(dataset[0])-1
    bestfeature=-1
    entropy=shannonEnt(dataset)
    bestInfo=0
    for i in range(lens):
        featurelist=set([example[i] for example in dataset])
        Newentropy=0
        for j in featurelist:
            Data=splitdata(dataset,i,j)
            Prob=len(Data)/len(dataset)
            Newentropy-=Prob*shannonEnt(Data)
        infoGain=entropy+Newentropy
        if(infoGain>bestInfo):
            bestInfo=infoGain
            bestfeature=i
    return bestfeature

下面就开始构建决策树并进行测试:


def createtree(dataset,labels):
    classlist=[example[-1] for example in dataset]
    if classlist.count(classlist[0])==len(classlist):  #类别相同停止划分
        return classlist[0]
    bestfeature=choosefeature(dataset)
    bestlabel=labels[bestfeature]
    myTree={bestlabel:{}}
    del(labels[bestfeature])
    tags=set([example[bestfeature] for example in dataset])   #得到列表所包含的所有属性
    for tag in tags:
        myTree[bestlabel][tag]=creattree(splitdata(dataset,bestfeature,tag),labels)

    return myTree

print(createtree(data,labels))#打印树结构

def classify(data,labels,test):  #测试
    first = list(data.keys())[0]
    second = data[first]  # {0: 'no', 1: {'flipper': {0: 'no', 1: 'yes'}}}
    featIndex = labels.index(first)  # 0
    for key in second.keys():
        if test[featIndex]==key:
            if type(second[key]).__name__=='dict':
                classlabel=classify(second[key],labels,test)
            else:
                classlabel=second[key]
    return classlabel

以上为我对决策树的理解,如有错误,请指正。

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

推荐阅读更多精彩内容

  • 决策树理论在决策树理论中,有这样一句话,“用较少的东西,照样可以做很好的事情。越是小的决策树,越优于大的决策树”。...
    制杖灶灶阅读 5,832评论 0 25
  • 基本概念 决策树(decision tree)是一种常见的机器学习方法,它是基于树结构来进行决策的,这恰是人类在面...
    司马安安阅读 1,481评论 0 3
  • 1、决策树算法 决策树(decision tree)又叫判定树,是基于树结构对样本属性进行分类的分类算法。以二分类...
    JasonJe阅读 2,761评论 0 22
  • 一、PE 投资流程概况 第一个阶段:从获得项目信息到签署购买协议 1、PE 项目团队在获得项目信息后将进行前期的项...
    朱习培阅读 1,785评论 0 8
  • 前天去了熊猫基地,三个女孩儿手挽手把熊猫基地的点踩的差不多了,就是忘了带干粮,等到逛完了才发觉饿得前胸贴后背了。 ...
    花盈树阅读 258评论 0 2