【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
(转载请注明出处:http://blog.csdn.net/buptgshengod)
1.背景
2.代码实现部分
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.源码下载
【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现,古老的榕树,5-wow.com
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。