目录
1. 信息增益
在划分数据集之前之后信息发生的变化称为信息增益,获得信息增益最高的特征就是最好的选择。集合信息的度量方式称为香农熵或简称为熵。
此代码的功能式计算给定数据集的熵:
def calcshannonent(dataset):
numentries = len(dataset)
labelcounts = {}
for featvec in dataset:
currentlabel = featvec[-1] # 创建一个数据词典,它的键值是最后一列的数值
if currentlabel not in labelcounts.keys():labelcounts[currentlabel] = 0 # 如果当前键值不存在,则扩展字典并将当前键值加入字典
labelcounts[currentlabel] += 1
shannonent = 0.0
for key in labelcounts:
prob = float(labelcounts[key])/numentries
shannonent -= prob*log(prob, 2) # 以2为底求对数
return shannonent
我们可以利用creatdataset()函数得到简单鱼鉴定数据集:
def creatdataset():
dataset = [[1, 1, 'yes'],
[1, 1, 'yes'],
[1, 0, 'no'],
[0, 1, 'no'],
[0, 1, 'no']]
labels = ['no surfacing', 'flippers']
return dataset, labels
查看数据集:
mydata, labels = creatdataset()
print("mydata:", mydata)
print("labels:", labels)
print("香农熵:", calcshannonent(mydata))
输出结果:
熵越高,则混合数据也越多,这里我们增加第三个名为maybe的分类,测