决策树(2)

决策树的理解可以类比最近较火的综艺游戏,游戏规则如下:裁判确定一个关键词,选手可以向裁判提问15个问题,而裁判仅能回答是与不是,最终选手获得关键词。

通常采用递归的方式构造决策树,主要流程如下:

1.递归停止条件1:选取特征使得数据的特征相同时标签也与之严格一致,例如特征=【能飞,不能飞】,标签=【是猪1,非猪0】,能飞特征对应的一定是非猪;

2.但满足标签1的还有其他特征,在上次特征划分后的数据上在此判断递归停止条件1,例如特征2=【能潜水,不能潜水】,在不能飞的特征下,选择特征2继续划分;

3.依次类推,直至递归终止条件2:所有特征使用完全

编程实现如下:

def createTree(dataSet,labels):
    # 训练数据:dataSet
    # 标签数据:labels
    classList = [example[-1] for example in dataSet]
    if classList.count(classList[0]) == len(classList):    # 中止条件2:所有特征均使用
        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

采用决策树来执行分类任务,代码如下:

def classify(inputTree,featLabels,testVec):
    # inputTree:输入树数据
    # featLabels:特征
    # testVec:测试数据特征值向量
    firstStr = list(inputTree.keys())[0]
    secondDict = inputTree[firstStr]
    featIndex = featLabels.index(firstStr)
    key = testVec[featIndex]
    valueOfFeat = secondDict[key]
    if isinstance(valueOfFeat, dict):
        classLabel = classify(valueOfFeat, featLabels, testVec)    # 递归沿树分类
    else: classLabel = valueOfFeat
    return classLabel

应用举例:

问题描述--医生根据患者是否老年,是否高度近视,是否眼部过敏等一系列特征判断患者适合佩戴软材质眼镜、硬材质眼镜以及不建议佩戴眼镜

样本数据--患者对应上述各特征的值

样本标签--软材质1,硬材质2,不建议佩戴3

eg,【患者1】 (老年)1,(高度近视)0,(眼部过敏)0,……,(不建议佩戴)3

新给出患者的特征,预测适合怎样的隐形眼镜佩戴

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值