作者:fangziqiang | 来源:互联网 | 2023-07-07 17:57
在实现决策树的ID3算法时,编写了计算信息熵的函数,运行后遇到了如下的问题: 对应处的代码为:@staticmethoddefcalc_ent(datasets):dat
在实现决策树的ID3算法时,编写了计算信息熵的函数,运行后遇到了如下的问题:
对应处的代码为:
@staticmethod
def calc_ent(datasets):
data_length = len(datasets)
label_count = {}
for i in range(data_length):
label = datasets[i][-1]
if label not in label_count:
label_count[label] = 0
else:
label_count[label] += 1
ent = -sum([(p / data_length) * log(p / data_length, 2) for p in label_count.values()])
return ent
经过不断地试错与百度,最后解决了该问题,竟然是把else:去掉:
@staticmethod
def calc_ent(datasets):
data_length = len(datasets)
label_count = {}
for i in range(data_length):
label = datasets[i][-1]
if label not in label_count:
label_count[label] = 0
label_count[label] += 1
ent = -sum([(p / data_length) * log(p / data_length, 2) for p in label_count.values()])
return ent
运行成功:

根据报错提示,原因应该是数学域错误,不知道为什么删掉else:就成功了......