递归构建决策树

def majorityCnt(classList):#传入的参数是已经划分完所有特征之后的数据集,例如[['yes'],['yes'],['maybe']]

    classCount={}#创建一个字典
    for vote in classList:
        if vote not in classCount.keys():classCount[vote] = 0
        classCount[vote] += 1
    #根据上述循环和例子,可以得出{'yes':2,'maybe':1}
        sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=Ture)
    return sortedClassCount[0][0]

重点不明白

sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=Ture)

使用iteritems()这个函数得到我们字典中的所有元素,就是键-值对{‘yes’:2,’maybe’:1}
之后定义一个叫做key的函数,这个名字可以任意取,key只是习惯性定义的
之后通过itemgetter函数对字典中的元素进行排序,operator.itemgetter(1)表示按照元素的第二个进行排序,指按键-值对的值来排,也就是分类出现的多少。
reverse=True 表示按照递减的顺序来排序,即降序。

sortedClassCount[0][0]表示的是按照分类的个数最多的元素的那个类。

补了一下python里的字典概念
一个简单的字典

alien_0 = {'color':'green','points':5}

print(alien_0['color'])
print(alien_0['points'])

结果green 5
字典是一系列的键-值对。每一个键都与一个值相关联。

构建树的函数代码

def createTree(dataSet,labels):
    classList = [example[-1] for example in dataSet]#取出最后一列
    if classList.count(classList[0]) == len(classList):
        return classList[0]
    #类别完全相同则停止继续划分,count()函数中接受一个参数,表示的是这个参数在某个序列中出现的次数
    #如果这个classList中的元素完全相同,那么这个参数的count(classList[0])应该是等于classList的长度
    if len(dataSet[0]) == 1:
        return majorityCnt(classList)
    bestFeat = chooseBestFeatureToSplit(dataSet)#返回的是最好的特征的位置,例如0
    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
>>> import trees
>>> from imp import reload
>>> reload(trees)
<module 'trees' from 'E:\\Python\\trees.py'>
>>> myDat,labels=trees.createDataSet()
>>> myTree = trees.createTree(myDat,labels)
>>> myTree
{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}}
>>> 

猜你喜欢

转载自blog.csdn.net/qq_42799920/article/details/81265393
今日推荐