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

来源:互联网 发布:苹果淘宝旗舰店是官方 编辑:程序博客网 时间:2024/05/01 05:20

(转载请注明出处: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.源码下载

  下载地址(DecisionTree)

2 1
原创粉丝点击