我正在使用caret包为R选择我的模型的变量。使用 rfe 命令时,应该传递rfeControl对象,该对象具有方法参数。此参数的选项为boot,cv,LOOCV和LGOCV。由于我正在处理时间序列数据,我需要使用特殊的自举/交叉验证技术,因为正常情况不适用于时间序列数据(否则分布会被破坏等)。
我的问题是我如何插入我自己的bootstrapping实现,但仍然使用插入符号 rfe 方法,其中包含我需要的所有其他内容。
答案 0 :(得分:1)
没有一个简单的方法。如果您研究rfe.default()
的代码,则会注意到method = "boot"
使用createResample()
函数的情况。这是生成引导样本的函数。类似的函数用于其他CV方法。
有一条艰难的道路;超越最合适的create*()
函数;假设您想要进行块引导或ME引导,接管createResample()
函数并使用method = "boot"
,或者如果您需要特殊形式的CV,请使用method = "cv"
并接管{{ 1}}。
您需要编写自己的createFolds()
函数,并用您的版本替换插入符号NAMESPACE中的函数。不容易,但非常可行。假设您编写自己的create*()
函数;首先,您需要注意,此函数会创建 n = createResample()
bootstrap样本,并将其返回到一个包含times
列且与样本数量相同的行的矩阵中。您需要编写一个自定义times
函数,该函数返回相同的对象,但执行您想要使用的时间序列引导。
一旦编写了该函数,就需要将它放入插入符号命名空间,以便插入符号包中的函数使用它。为此,您使用createResample()
。假设您的新引导函数被称为assignInNamespace()
并且它是您的工作空间,将其插入到插入符名称空间中:
createMyResample()
抱歉,我不能更具体,但你没有说如何你想要执行bootstrap / CV,也不想说你想用什么R代码进行重新采样。如果您提供有关如何进行重新采样的更多详细信息,我将再次查看,看看我是否可以帮助您编写assignInNamespace("createResample", createMyResample, ns = "caret")
函数。
未能完成所有这些,请联系插入符号的作者和维护者Max Kuhn;他或许可以进一步提出建议,或者至少可以建议将此功能作为未来版本的愿望清单。