【机器学习实战-python3】决策树ID3

工具:PythonCharm 书中的代码是python2的,而我用的python3.5,结合实践过程,这里会标注实践时遇到的问题和针对python3的修改。
实践代码和训练测试数据可以参考这里
https://github.com/stonycat/ML-in-Action
(原书作者也提供了源码,但是存在一些问题,且在python3中有部分修改)

【决策树算法 ID3】
首先附上修改后的源代码:
注释:如果你使用的是python3.6 函数getNumLeafs报错: ‘list’ object has no attribute ‘keys’
请移步参考:https://github.com/stonycat/ML-in-Action-Code-and-Note/issues/1

#coding=utf-8
import operator
import matplotlib.pyplot as plt
#绘制属性图
decisionNode = dict(boxstyle="sawtooth", fc="0.8")
leafNode = dict(boxstyle="round4", fc="0.8")
arrow_args = dict(arrowstyle="<-")

#构造注解树 在python字典形式中如何存储树
def getNumLeafs(myTree):
    numLeafs=0 #初始化结点数
    # 下面三行为代码 python3 替换注释的两行代码
    firstSides = list(myTree.keys())
    firstStr = firstSides[0]  # 找到输入的第一个元素,第一个关键词为划分数据集类别的标签
    secondDict = myTree[firstStr]
    #firstStr = list(myTree)
    #secondDict=myTree[firstStr]
    for key in secondDict.keys(): #测试数据是否为字典形式
        if type(secondDict[key]).__name__=='dict': #type判断子结点是否为字典类型
            numLeafs+=getNumLeafs(secondDict[key])
            #若子节点也为字典,则也是判断结点,需要递归获取num
        else:  numLeafs+=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值