注意:出现此问题的原因是实现细节而不是决策树桩ERM算法本身。
我正在尝试自己实现决策树桩算法,并将其与正确的实现进行比较(这两种实现均在下面显示)。
据我了解,我的实现与正确的实现基本相同,在这里我将x
,D
和y
一起进行排序,但是正确的实现不会对{{ 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))
我不确定我犯了什么(也许是微妙的)错误。 谁能帮助我,谢谢你。
答案 0 :(得分:0)
我犯了一个愚蠢的错误...
在我的实现中,由于变量名D
和y
的滥用,事实证明,D
和y
每次更改(即{{1} },但在下一次迭代中,使用此D = record_sorted[:, 1]
,与D
相同),因为我进行了排序,但他们不应该这样做。
此示例显示了滥用变量名的巨大危险。