关闭

【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现

标签: python机器学习决策树
12037人阅读 评论(0) 收藏 举报
分类:

(转载请注明出处:http://blog.csdn.net/buptgshengod)

1.背景

     接着上一节说,没看到请先看一下上一节关于数据集的划分数据集划分。现在我们得到了每个特征值得信息熵增益,我们按照信息熵增益的从大到校的顺序,安排排列为二叉树的节点。数据集和二叉树的图见下。
(二叉树的图是用python的matplotlib库画出来的)

数据集:
  

决策树:




2.代码实现部分

     因为上一节,我们通过chooseBestFeatureToSplit函数已经可以确定当前数据集中的信息熵最大的那个特征值。我们将最大的那个作为决策树的父节点,这样递归下去就可以了。

主要函数:详见注释
def createTree(dataSet,labels):
    #把所有目标指数放在这个list里
    classList = [example[-1] for example in dataSet]
    #下面两个if是递归停止条件,分别是list中都是相同的指标或者指标就剩一个。
    if classList.count(classList[0]) == len(classList): 
        return classList[0]
    if len(dataSet[0]) == 1: 
        return majorityCnt(classList)
    #获得信息熵增益最大的特征值
    bestFeat = chooseBestFeatureToSplit(dataSet)
    bestFeatLabel = labels[bestFeat]   
    #将决策树存在字典中
    myTree = {bestFeatLabel:{}}
    #labels删除当前使用完的特征值的label
    del(labels[bestFeat])
    featValues = [example[bestFeat] for example in dataSet]
    uniqueVals = set(featValues)
    #递归输出决策树
    for value in uniqueVals:       
        subLabels = labels[:]       #copy all of labels, so trees don't mess up existing labels
       
        myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value),subLabels)
    return myTree

打印出来的决策树:{'throat': {0: {'mustache': {0: 'women', 1: 'man'}}, 1: 'man'}}


下面就是如何是用建立好的决策树。我们建立函数
inputTree:是输入的决策树对象
featLabels:是我们要预测的特征值得label,如:['throat','mustache']
testVec:是要预测的特征值向量,如[0,0]
def classify(inputTree,featLabels,testVec):
    #存储决策树第一个节点
    firstStr = inputTree.keys()[0]
    #将第一个节点的值存到secondDict字典中
    secondDict = inputTree[firstStr]
    #建立索引,知道对应到第几种特征值
    featIndex = featLabels.index(firstStr)
    key = testVec[featIndex]
    valueOfFeat = secondDict[key]
    #对比,判断当前的键值是否是一个dict类型,如果是就递归,不是就输出当前键值为结果
    if isinstance(valueOfFeat, dict): 
        classLabel = classify(valueOfFeat, featLabels, testVec)
    else: classLabel = valueOfFeat
    return classLabel

测验:当我们输入classify(mtree,['throat','mustache'],[0,0])时,显示结果是women,表明没有喉结和胡子是女人。


3.源码下载


2
1
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

决策树原理及Python代码实现

决策树其实就是按节点分类数据集的一种方法。在本文中,我将讨论数学上如何使用信息论划分数据集,并编写代码构建决策树。 创建决策树进行分类的流程如下: (1)    创建数据集 (2)    计算数据集的...
  • Flying_sfeng
  • Flying_sfeng
  • 2017-03-16 15:31
  • 5319

机器学习经典算法详解及Python实现--决策树(Decision Tree)

决策树也是最经常使用的数据挖掘算法,决策树分类器就像判断模块和终止块组成的流程图,终止块表示分类结果(也就是树的叶子)。判断模块表示对一个特征取值的判断(该特征有几个值,判断模块就有几个分支)。决策树...
  • suipingsp
  • suipingsp
  • 2014-12-14 19:32
  • 47670

python 决策树实例代码

  • 2015-08-15 15:37
  • 8KB
  • 下载

决策树原理实例(python代码实现)

决策数(Decision Tree)在机器学习中也是比较常见的一种算法,属于监督学习中的一种。看字面意思应该也比较容易理解,相比其他算法比如支持向量机(SVM)或神经网络,似乎决策树感觉“亲切”许多。...
  • csqazwsxedc
  • csqazwsxedc
  • 2017-03-26 23:04
  • 3628

python决策树代码

  • 2017-01-16 18:19
  • 8KB
  • 下载

机器学习算法的Python实现 (2):ID3决策树

本文数据参照 机器学习-周志华 一书中的决策树一章。可作为此章课后习题3的答案 代码则参照《机器学习实战》一书的内容,并做了一些修改。 本文使用的Python库包括 numpypandasma...
  • wzmsltw
  • wzmsltw
  • 2016-04-01 22:42
  • 7861

机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树

Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Reg...
  • suipingsp
  • suipingsp
  • 2014-12-30 12:20
  • 15260

Python机器学习(三)--决策树算法

一、决策树原理 决策树是用样本的属性作为结点,用属性的取值作为分支的树结构。 决策树的根结点是所有样本中信息量最大的属性。树的中间结点是该结点为根的子树所包含的样本子集中信息量最大的属性。决策树...
  • alvine008
  • alvine008
  • 2014-07-14 13:57
  • 40623

Python sklearn库中决策树tree.DecisionTreeClassifier()函数参数介绍

Python sklearn库中决策树tree.DecisionTreeClassifier()函数参数介绍
  • li980828298
  • li980828298
  • 2016-04-17 13:12
  • 10608

机器学习之决策树(Decision Tree)及其Python代码实现

决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。...
  • sinat_35512245
  • sinat_35512245
  • 2017-02-10 17:55
  • 5087
    我的微信公众号

    作者公众号:凡人机器学习

    凡人机器学习

    机器学习微信交流群
    为了方便大家学习与交流,凡人云近日已开通机器学习社群! 分享“凡人机器学习”公众号名片到40人以上的大群并截图给小助手,小助手就会拉你入群 在这里你可以得到: 1.各种学术讨论 2.最新的资料分享 3.不定期的征文以及联谊活动! 小助手微信号:meiwznn
    作者新书《机器学习实践应用》

    主要讲述算法和业务的结合,适合初学者

    机器学习实践应用

    京东地址

    个人资料
    • 访问:809068次
    • 积分:10879
    • 等级:
    • 排名:第1722名
    • 原创:230篇
    • 转载:40篇
    • 译文:0篇
    • 评论:458条
    博客专栏
    统计