机器学习实战是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):