在每次运行 python sklearn 决策树(regressio)中随机选择变量

数据挖掘 scikit-学习 回归 决策树 大车
2022-02-20 06:35:58

当我random_state = None在python sklearn中放置并运行决策树进行回归时,每次都需要不同的变量来构建树?

不应该只有几个顶级变量应该用于拆分并且每次都应该抛出类似的树吗?

此外,如果我使用整数random_state并运行决策树,它会为每个random_state设置提供不同的树。这么多树应该选择哪棵树?

1个回答

文档

random_state : int,RandomState 实例,默认=None

控制估计器的随机性。即使拆分器设置为“最佳”,每次拆分时特征总是随机排列。当 max_features < n_features 时,算法将在每次拆分时随机选择 max_features,然后再找到其中的最佳拆分。但是,即使 max_features=n_features,在不同的运行中找到的最佳分割也可能会有所不同。就是这样,如果标准的改进对于几个拆分是相同的,并且必须随机选择一个拆分。为了在拟合期间获得确定性行为,random_state 必须固定为整数。

所以:

每次构建树都需要不同的变量吗?

实际上,随机性来自于在构建树时选择不同的变量。

不应该只有几个顶级变量应该用于拆分并且每次都应该抛出类似的树吗?

不一定,这取决于参数和数据:

  • 如果给定一个 int 作为参数的值,random_state则每次都会使用特定的随机状态,因此树是固定的,即使它不一定是唯一可能的。假设None提供了默认值。
  • 如果参数max_features不是Noneauto,则在每次拆分之前选择特征的随机子集。当然,这意味着可能不会选择特定变量,因此这可能会导致每次运行时出现差异。假设None提供了默认值。
  • 如果每次运行都可以使用所有功能,那么在 split 之前的选择中就没有随机性了。但是,即使best为 提供了默认值splitter,假设每个节点都有一个最佳变量也是错误的:有可能两个(或更多)不同的变量是相关联的,即它们会在标准中提供同等的改进选择(默认mse)。

结论:假设您使用默认值Nonefor max_features,每次运行都会获得不同的树,这意味着变量与数据之间经常存在联系。如果树底部的节点只有微小的差异,那么它并不显着,但如果有很多变化,包括靠近树的根,则意味着模型不稳定。后一种情况通常是一个不好的迹象,可能没有一个特征真正有助于预测值和模型过拟合。

此外,如果我对 random_state 使用整数并运行决策树,它会为每个 random_state 设置提供不同的树。这么多树应该选择哪棵树?

选择随机状态的可能性并不是要选择特定的树,而是要使实验具有可重复性。所以在我看来,你不应该选择这样的一棵树。您可以尝试调查模型不稳定的原因并尽可能修复它,而不是选择任意树。第一步是在一些测试数据上实际评估模型:如果出现过拟合等问题,它将在性能中可见。