我想实现决策树学习算法。
我对编码还很陌生,所以我知道它不是最好的代码,但我只是希望它能工作。不幸的是,我得到了错误:e2 = b(pk2/(pk2 + nk2))
ZeroDivisionError: division by zero
有人可以向我解释我在做什么错吗?
答案 0 :(得分:0)
(pk2 + nk2)
在某些时候等于零。如果我们向后浏览您的代码,则会看到它们在此处分配:
nk2, pk2 = pk_nk(2, examples, attribute)
def pk_nk(path, examples, attribute):
nk = 0
pk = 0
for ex in examples:
if ex[attribute] == path and ex[7] == NO:
nk += 1
elif ex[attribute] == path and ex[7] == YES:
pk += 1
return nk, pk
这样,对于除数等于零的nk
和pk
必须通过该函数保持为零,即:
examples
为空,或答案 1 :(得分:0)
让我们假设在进行一些拆分后,您会得到两条记录,其中包含3个特征/属性(最后一列是真相标签)
1 1 1 2
2 2 2 1
现在您将要选择要分割的下一个最佳功能,因此您将在内部调用remainder(examples, attribute)
的过程中调用此方法nk1, pk1 = pk_nk(1, examples, attribute)
。
由pk_nk
返回的上述行和要素的值将为0, 0
,这将导致e1 = b(pk1/(pk1 + nk1))
的除零异常。根据您对DT的编码方式,这是一个有效的方案,您应该处理此案。