一种实施决策树桩的细微错误

时间:2018-11-28 18:27:37

标签: python machine-learning decision-tree

注意:出现此问题的原因是实现细节而不是决策树桩ERM算法本身。

我正在尝试自己实现决策树桩算法,并将其与正确的实现进行比较(这两种实现均在下面显示)。

据我了解,我的实现与正确的实现基本相同,在这里我将xDy一起进行排序,但是正确的实现不会对{{ 1}}和D,而改用y

但是在运行以下测试代码(共10000个不同的测试用例)后,我得到了6213个错误的测试用例。

curr_idx

我的实现和正确的实现如下所示。

np.random.seed(0)
cor_count = 0
err_count = 0
for iter in range(10000):
    X = np.random.randint(1, 100, size=(10, 2))
    D = np.random.rand(10)
    D /= np.sum(D)
    y = np.random.choice([-1, 1], size=(10,))
    my_res = my_decision_stump(X, D, y)
    res = decision_stump(X, D, y)
    if my_res == res:
        cor_count += 1
    else:
        err_count += 1

print("Number of correct cases {}".format(cor_count))
print("Number of error cases {}".format(err_count))

我不确定我犯了什么(也许是微妙的)错误。 谁能帮助我,谢谢你。

1 个答案:

答案 0 :(得分:0)

我犯了一个愚蠢的错误...

在我的实现中,由于变量名Dy的滥用,事实证明,Dy每次更改(即{{1} },但在下一次迭代中,使用此D = record_sorted[:, 1],与D相同),因为我进行了排序,但他们不应该这样做。

此示例显示了滥用变量名的巨大危险。