(转载请注明出处:http://blog.csdn.net/buptgshengod)
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
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
【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现,布布扣,bubuko.com
【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
原文:http://www.cnblogs.com/mfrbuaa/p/3760752.html