我对tuneRF
函数的stepFactor
参数的含义感到不舒服,randomForest
函数用于调整{{3}}函数中进一步使用的mtry
参数。
tuneRF
的文档说stepFactor
是一个重要的范围
选定的mtry
会缩小或膨胀。
显然,由于mtry
是随机选择的一些变量,它必须是一个整数,但我在网上看到了很多使用stepFactor=1.5
的例子。
起初我认为R默认使用下一个mtry
等于floor(mtry_current-stepFactor)
,但事实证明我错了。
此外,我不理解在search left... search right...
工作时显示tuneRF
的R命令。
我认为这是关于膨胀或缩小mtry
参数的信息,但我的假设并没有证明是正确的。
总结这个长期而不是太优雅的描述我的怀疑,我的问题是:
为什么stepFactor
不是整数?
如何选择后续的mtry
值?
左/右搜索实际意味着什么?
非常感谢任何帮助!! :)
答案 0 :(得分:8)
以下是tuneRF
如何运作的摘要:
一个。将 mtry 设置为默认值sqrt( p )进行分类,将 p / 3设置为回归(其中 p > =变量总数)
湾在 mtry 设置为上面的默认值的情况下计算随机森林的袋外(OOB)错误(例如error_default)
一个。向左看:设置 mtry =默认值/ stepFactor。例如,如果stepFactor = 1.5并且您的默认起始值为8,则 mtry 将设置为8 / 1.5 = 5.33,向上舍入为整数,这将给出6
湾计算OOB错误,比如error_left
一个。向右看:设置 mtry =默认值* stepFactor。要继续我的示例, mtry 将设置为8 * 1.5 = 12
湾计算OOB错误,比如error_right
我。如果(error_default< error_right)或(error_default< error_left),最好的 mtry 是默认值
II。如果不满足先前条件,但errors_default和error_right / error_left之间的增量小于改进参数,则最佳 mtry 是默认值
III。在不失一般性的情况下,如果不满足条件,并且如果error_right< error_left,if(error_default-error_right)> 改进,将 mtry 设置为mtry_right(12)。从现在开始,总是走右边
如果是4.iii。验证,迭代:将 mtry 设置为mtry_right * stepFactor(在我的示例中,12 * 1.5 = 18),计算OOB错误并将其与上一步获得的错误进行比较(在我的示例中) ,对于 mtry = 12)。如果错误新错误较小,并且错误减少的增益足够(即> 改进),请选择新的 mtry 并继续重复这些步骤,否则停止并返回当前 mtry 作为最佳 mtry
您设置的较小的stepFactor(例如,1.1,1.2),您尝试的 mtry 的值越多(精细搜索),您设置的stepFactor越大(例如,2,2.5),越少你尝试的价值(粗略搜索)。此外,如果改进的值较低,搜索将继续更长时间。