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

简介: (转载请注明出处:http://blog.csdn.net/buptgshengod)1.背景     接着上一节说,没看到请先看一下上一节关于数据集的划分数据集划分。现在我们得到了每个特征值得信息熵增益,我们按照信息熵增益的从大到校的顺序,安排排列为二叉树的节点。数据集和二叉树的图见下。(二叉树的图是用python的matplotlib库画出来的)数据集:  决策树:

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


目录
相关文章
|
16天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
8天前
|
机器学习/深度学习 自然语言处理 算法
|
2天前
|
机器学习/深度学习 数据可视化 算法
PYTHON用决策树分类预测糖尿病和可视化实例
PYTHON用决策树分类预测糖尿病和可视化实例
11 0
机器学习/深度学习 算法 Python
15 0
|
2天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
2天前
|
机器学习/深度学习 数据采集 供应链
从数据到决策:scikit-learn在业务分析中的应用
【4月更文挑战第17天】本文探讨了scikit-learn在业务分析中的应用,包括数据预处理、分类、回归和聚类模型的构建,以及模型评估与优化。通过使用scikit-learn,企业能有效处理数据、预测趋势、客户细分并制定决策,从而提升经营效率和市场策略。随着机器学习的发展,scikit-learn在业务分析领域的潜力将持续释放,创造更多价值。
|
3天前
|
机器学习/深度学习 算法 Python
python在Scikit-learn中用决策树和随机森林预测NBA获胜者
python在Scikit-learn中用决策树和随机森林预测NBA获胜者
|
10天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【4月更文挑战第9天】本文介绍了使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先,简述了机器学习的基本概念和类型。接着,展示了如何安装Python和Scikit-learn,加载与处理数据,选择模型进行训练,以及评估模型性能。通过本文,读者可了解机器学习入门步骤,并借助Python和Scikit-learn开始实践。
|
12天前
|
机器学习/深度学习 数据可视化 算法
【python】Python大豆特征数据分析 [机器学习版一](代码+论文)【独一无二】
【python】Python大豆特征数据分析 [机器学习版一](代码+论文)【独一无二】
|
1月前
|
机器学习/深度学习 算法 生物认证
基于深度学习的人员指纹身份识别算法matlab仿真
基于深度学习的人员指纹身份识别算法matlab仿真