博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
阅读量:5129 次
发布时间:2019-06-13

本文共 1935 字,大约阅读时间需要 6 分钟。

(转载请注明出处:)

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.源代码下载

  

转载于:https://www.cnblogs.com/mfrbuaa/p/3760752.html

你可能感兴趣的文章
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
下一代操作系统与软件
查看>>
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Python IO模型
查看>>
DataGridView的行的字体颜色变化
查看>>
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android-多线程AsyncTask
查看>>
LeetCode【709. 转换成小写字母】
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>