决策树学习

时间:2019-03-20 19:26:07

标签: python decision-tree

我想实现决策树学习算法。

我对编码还很陌生,所以我知道它不是最好的代码,但我只是希望它能工作。不幸的是,我得到了错误:e2 = b(pk2/(pk2 + nk2)) ZeroDivisionError: division by zero

有人可以向我解释我在做什么错吗?

2 个答案:

答案 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

这样,对于除数等于零的nkpk必须通过该函数保持为零,即:

  • examples为空,或
  • 是否满足/ elif条件

答案 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的编码方式,这是一个有效的方案,您应该处理此案。