机器学习实战第三章决策树



#计算给定数据集的熵
#导入log运算符
from math import log

def calcShannonEnt(dataSet):
#获取数据集的行数
numEntries=len(dataSet)
#设置字典的数据结构
labelCounts={}
#提取数据集的每一行的特征向量
for featVec in dataSet:
#获取特征向量的最后一列的标签
currentLabel=featVec[-1]
#检测字典的关键字key中是否存在该标签
#如果不存在keys()关键字
if currentLabel not in labelCounts.keys():
#将当前标签/0键值对存入字典中
labelCounts[currentLabel]=0
#将当前标签对应的键值加1
labelCounts[currentLabel]+=1
#初始化熵为0
Ent=0.0
#对于数据集中所有的分类类别
for key in labelCounts:
#计算各个类别出现的频率
prob=float(labelCounts[key])/numEntries
#计算各个类别信息期望值
Ent-=prob*log(prob,2)
#返回熵
return Ent