机器学习笔记(二)决策树之ID3算法

决策树之所以如此流行,一个很重要的原因是一个很重要的原因就是不需要了解机器学习的知识就能搞明白决策树是如何工作的。
决策树的优点:计算复杂度不高,输出结构易于理解,对中间值的缺失不敏感。缺点:可能产生过度匹配问题。
创建决策树分支createBranch()的伪代码:

if 数据集中所有数据都是同一类:
    return 类标签
else:
    寻找划分数据集最好的特征
    根据最好的特征划分数据集
    创建分支节点
        for 每个划分的子集
            调用createBranch(),并且返回结果到分支节点
    return 分支节点
决策树的一般流程:
(1)收集数据:任何方法
(2)准备数据:构造树算法只适合于标量数据,因此必须离散化数值型数据
(3)分析数据:
(4)训练数据:构造决策树
(5)测试数据:使用经验树计算错误率
(6)使用算法:使用决策树进行分类数据

决策树的ID3算法每次划分数据只选取一个特征值,选取特征值的原则是按照获取的最大信息增益(熵的减少)的方法划分数据。
决策树创建的代码:

def createTree(dataSet,labels):  
    classList = [example[-1] for example in dataSet]
    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:{}}     #创建树结构
    del(labels[bestFeat])           
    featValues = [example[bestFeat] for example in dataSet]
    uniqueVals = set(featValues)    #确定此特征值的的所有取值
    for value in uniqueVals:        #根据不同取值创建分支
        subLabels = labels[:]       
        myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value),subLabels)
    return myTree   

由这个字典树结构可知,字典的从左的第一个关键字是第一个划分数据集的特征名称,该键的值是一个字典,该字典的第一个关键字是划分的数据集。该数据集的值如果为类标签则为叶子节点,如果为字典则为判断节点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值