【机器学习算法-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
- 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
- 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
- 机器学习之决策树 Decision Tree(二)Python实现
- 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集
- 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集
- 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集
- 机器学习经典算法详解及Python实现--决策树(Decision Tree)
- 机器学习经典算法详解及Python实现–决策树(Decision Tree)
- 机器学习经典算法详解及Python实现--决策树(Decision Tree)
- 机器学习经典算法详解及Python实现--决策树(Decision Tree)
- 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集
- 机器学习之决策树(Decision Tree)及其Python代码实现
- 【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)
- 【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)
- 机器学习算法实践:决策树 (Decision Tree)
- 机器学习(三)决策树算法Decision Tree
- 机器学习---决策树(decision tree)算法
- 机器学习教程之13-决策树(decision tree)的sklearn实现
- service与Thread的区别
- 查找制定端口号的进程对应的可执行文件的详细目录
- Ubuntu下安装配置samba
- PHP构造单例模式浅谈
- C3P0 in deadlocked PoolThrea
- 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
- C++ STL容器类vector使用范例
- UVALive - 3644 并查集
- JS生成GUID
- 用户态和内核态的概念区别
- 如何快速开发一个智能聊天机器人
- java的锁机制
- opecv配置记录
- Linux上的free命令详解