n_estimators=1 和 min_impurity_decrease=0 的 RandomForestClassifier 在复杂数据集上产生 100% 的训练精度

RandomForestClassifier with n_estimators=1 and min_impurity_decrease=0 yields 100% train accuracy on complex dataset

我在 sklearn 中有一个 RandomForestClassifier,其参数如下:

clf = RandomForestClassifier(n_estimators=1,
                             min_impurity_decrease=0,
                             max_features=3,
                             bootstrap=False,
                             random_state=j,
                             criterion='entropy',
                             warm_start=False)

特征和标签:

特征矩阵包含特征 x_i for i=1,...,10 我从中构建标签:

y_i = np.sign(X['x_i'].diff(1).shift(-1)) 

标签在 {-1,1} 中(不可能有标签值 0)并且它们是特征 x_i for i=1,...,10 的一步变化.然后将每个时间 t 的标签向量作为时间 t 的所有标签的集合给出:

y[t] = {y_i[t] | i=1,...,10}

在训练分类器时,我注意到 min_impurity_decrease=0 的训练准确率是 100%,测试准确率在 50-60% 之间。即使在 n_estimators=1 的极端情况下也会发生这种情况,它只是一棵树。

当我增加min_impurity_decrease>0时,训练精度下降,而测试精度大致保持不变。

在我看来,在训练过程中发生了某种泄漏,因此分类器达到了如此高的训练精度和过拟合。

奇怪的是,即使我从特征矩阵中完全删除特征 x_i,仅使用它们来构建标签,高训练精度仍然存在。最后,即使我只预测单个目标的标签 x_i,即 y_i,训练准确率仍然是 100%。我也检查了几次我的数据集,应该没问题。我懒得解释了。

为什么即使是一棵树也能达到这么高的准确率?这对我来说似乎非常不合逻辑。

将 max_depth 参数设置为默认的 None 以外的值。它会扩展树,直到您达到 100% 的准确度,这就是原因。它显然过拟合。使用 max_depth=2、4、8 等