决策树-属性选择2


接上文,如果到了叶子结点,但是类标签不是唯一的,那么需要再进行处理一下

# 这里的代码作用是,如果到了叶子结点,但是还是不能区分
# 比如图3-2上面叶子结点要么都是yes要么都是no,但如果叶子结点上面是yes、yes、no,我们需要一个函数
# 来把这个叶子结点标记为yes,这就是majorityCnt函数的作用
import featureSelect

dataSet = featureSelect.dataSet
labelSet = featureSelect.labelSet

def majorityCnt(classList):
    classCount = {}
    for vote in classList:
        # 这里写法不同,意思是一样的
        # 即如果不在字典中,那么先初始化为0,再+1
        if vote not in classCount:
            classCount[vote] = 0
        classCount[vote] += 1
    # 对于字典排序,书上的方法有点过时了,这里我选择使用匿名函数
    sortedClassCount = sorted(classCount.items(),key=lambda x:x[1],reverse=True)
    return sortedClassCount[0][0]

classList = ['no','yes','yes']
result = majorityCnt(classList)
print(result)
yes