机器学习实战===决策树熵的实现解释

机器学习实战是ML的经典读物,作者用Python实现了机器学习的经典算法,这里对大家在网上问的比较多的,熵的实现进行注解。也为了自己回头梳理。熵在一定程度代表了时间的不确定性

from  math import log
import operator
#创建一个数据集合,以列表形式,集合元素同样是列表,元素最后一项是标签,
def createDataSet():
    dataSet=[[1,1,'yes'],
             [1,1,'yes'],
             [1,0,'no'],
             [0,1,'no'],
             [0,1,'no']]
    #一个标签列表
    labels=['no surfacing','flippers']
    #创建数据集返回集合,和标签集合
    return dataSet,labels


def calcShannonEnt(dataSet):
    #获得数据集长度,也就是数据集有多少记录,为计算概率的
    numEntries=len(dataSet)
    #创建一个标签计数的字典集合,其中以键值对为元素。初始为空
    labelCounts={}
    #遍历数据集合,获得集合中的每一个元素列表
    for featVec in dataSet:
        #取得列表最后一个标签值,yes no  作为当前标签
        currentlabel=featVec[-1]
        #如果标签集合没有这个label就将此key也就是label对应的value设置为0
        if currentlabel not in labelCounts.keys():
            labelCounts[currentlabel]=0
            #如果标签集合存在 这个label就计一次1   (此标签集合的形式是key是lebel value是出现次数)
        labelCounts[currentlabel]+=1
        #熵的初始化
        shannonEnt=0.0
        #获得标签集合的每一个标签
    for key in labelCounts:
        #获得标签的概率 ,numEntries为原始集合的长度
        prob=float(labelCounts[key])/numEntries
        #熵的计算公式
        shannonEnt -= prob * log(prob,2)
    return shannonEnt
def splitDataSet(dataSet,axis,value):



猜你喜欢

转载自blog.csdn.net/baidu_31481511/article/details/80584618