我正在使用决策树分类器,并希望使用交叉验证(cv)来找到最佳参数。我可能会这样指定:
parameter_grid = { 'max_depth': range(2, 10), 'max_features': range(2, 14)}
首先,我如何决定使用哪些参数范围?这是随机的还是有最佳实践可循?另一个问题是,一旦我完成了这个操作,有没有办法通过代码获取每个单独的参数及其值?谢谢
回答:
你能做的最好方法是在文档中搜索,或使用其他可靠的资源,了解每种算法参数搜索的常规和最合适的设置或启发式方法。要精确地知道应该为每个参数设置什么值,需要对它们的作用有很好的理解。
关于你提到的参数,这里有一些想法:
-
max_depth:理论上,它可以高达训练样本的数量,当然这会导致完全过拟合。然而,保持它过低可能会导致模型欠拟合。因此,通常你希望将这个值保持在较小的范围内,比如你所使用的范围。
-
max_features:这基本上限制了定义树的每个分裂时要查看的特征数量。如果有大量特征,限制其值是个好主意,否则默认情况下你会得到
max_features=n_features
。不过,与其在这里指定一个范围,不如搜索文档中提出的这些推荐的“经验法则”方法:- max_features:int, float 或 {“auto”, “sqrt”, “log2”}
- 如果是“auto”,则 max_features=sqrt(n_features)。
- 如果是“sqrt”,则 max_features=sqrt(n_features)。
- 如果是“log2”,则 max_features=log2(n_features)。
总的来说,我建议你仔细查看每个参数的作用,并遵循可靠资源的建议。请注意,在文档中,你还可以找到多个参数的建议值。