scikit-learn中的ExtraTreeRegressor(Python)
我有两个关于scikit-learn中ExtraTreeRegressor的问题。
1) 为什么不能把特征的数量设置得比输入空间的维度还要高?在某些情况下,选择更高的max_feature可能会得到更好的结果,但算法似乎没有限制最大特征的数量。
2) 我们想用ExtraTreeRegressor来实现拟合Q迭代,在一个循环中执行ExtraTreeRegressor(96个时间步)。首先,我们把max_features设置为1,并在每次迭代后绘制均方误差(mse)的图(上面的图)。然后我们把max_features增加到输入空间的维度('auto'),并绘制了mse。为什么在这种情况下,mse反而增加了呢?
我们本来以为,max_features值更大时,mse会更小……
![上面的图显示了在max features设置为1时的mse,下面的图显示了在max_features设置为'auto'时的mse][1]
图: https://i.stack.imgur.com/XYEZw.jpg
[1] P. Geurts, D. Ernst., 和 L. Wehenkel, "极端随机树", 机器学习, 63(1), 3-42, 2006.
1 个回答
我认为参数 max_features
指的是每棵树可以选择的最大特征数量。简单来说,就是森林里的每棵树最多可以选择 n_features
个特征。如果每棵树都看到了所有特征,这可能会导致过拟合,也就是模型在训练数据上表现很好,但在新数据上表现差,这正是我们在使用袋装树算法时不希望看到的情况。更好的做法是绘制一个图,观察在不同 max_features
值下的训练和测试误差。你应该能找到一个“甜蜜点”,在这个点上,模型的复杂度能够很好地捕捉到训练和测试的误差,而不会出现过拟合。
如果你想让 n_features
大于你数据中的特征数量,可以建立一个流程,进行随机投影到更高维的空间,然后在这个新空间中训练模型。默认情况下,我认为 ExtraTreesRegressor
并不具备这个功能,因为 sklearn 有可以实现这一功能的 Pipeline 对象。