我最近注意到 SciKit-Learn 现在支持 Cost Complexity Pruning,这很棒。既然这已经实现了,我应该仍然使用其他回归树/随机森林超参数来控制树的生长,还是只使用完全生长的树的修剪?
我看到 Breiman 等人 (1984) 在分类和回归树中提到应该使用修剪而不是停止?如果我想在 SciKit Learn 中使用超参数网格搜索,情况仍然如此吗?
我最近注意到 SciKit-Learn 现在支持 Cost Complexity Pruning,这很棒。既然这已经实现了,我应该仍然使用其他回归树/随机森林超参数来控制树的生长,还是只使用完全生长的树的修剪?
我看到 Breiman 等人 (1984) 在分类和回归树中提到应该使用修剪而不是停止?如果我想在 SciKit Learn 中使用超参数网格搜索,情况仍然如此吗?
正如您所说,Breiman 本人建议对停止进行修剪,其原因是停止可能是短视的,因为现在阻止“坏”分裂可能会阻止以后发生一些非常“好”的分裂。另一方面,修剪从完全生长的树开始(因此运行时间更长),但它没有这个问题。
因此,在使用决策树时,我只会使用修剪参数来避免过度拟合,而您仍然可以保留 max_depth 或 min_samples_leaf 的“宽松”值,以防万一您希望您的树避免具有一定的大小。
相反,对于随机森林,我不会使用任何修剪/停止标准,除非您对内存使用有限制,因为大多数时候该算法最适合完全生长的树(Breiman 在原始论文中和Hastie/Tibshirani 在他们的书中,如果你需要参考)