我正在使用 caret R 包为我的模型选择变量。使用时 rfe 命令,应该传递 rfeControl 对象,该对象具有 方法 范围。此参数的选项为 boot、cv、LOOCV 和 LOCV。由于我正在处理时间序列数据,因此我需要使用特殊的引导/交叉验证技术,因为正常技术不适用于时间序列数据(否则分布会被破坏等)。
我的问题是如何插入我自己的引导实现但仍然使用插入符号 rfe 方法,它有我需要的所有其他东西。
最佳答案
没有简单的方法。如果你研究了 rfe.default()
的代码您会注意到,在 method = "boot"
的情况下createResample()
函数被使用。这是生成 bootstrap 样本的函数。类似的函数用于其他 CV 方法。
有一条艰难的路;超越create*()
最合适的功能;说你想做一个块 bootstrap 或 ME bootstrap ,接管 createResample()
功能及用途method = "boot"
,或者如果您想要特殊形式的简历,请使用 method = "cv"
并接手 createFolds()
.
您需要自己编写 create*()
函数并用您的版本替换插入符号 NAMESPACE 中的那个。不容易,但非常可行。假设您自己编写 createResample()
功能;首先你需要注意这个函数创建了 n = times
bootstrap 样本在一个矩阵中返回这个 times
列和尽可能多的行,你有样本。你需要写一个自定义createResample()
返回相同对象但执行您想要使用的时间序列引导的函数。
编写该函数后,您需要将其放入 caret 命名空间,以便由 caret 包中的函数使用。为此,您使用 assignInNamespace()
.假设你的新引导函数被称为 createMyResample()
这是您的工作区,要将其插入插入符号命名空间,请执行以下操作:
assignInNamespace("createResample", createMyResample, ns = "caret")
抱歉,我不能说得更具体,但您没有说您希望如何执行 bootstrap /CV,也没有说您想使用什么 R 代码来进行重采样。如果您提供有关如何进行重采样的更多详细信息,我会再看一看,看看我是否可以帮助您编写
create*()
功能。如果这一切都失败了,请联系 caret 的作者和维护者 Max Kuhn;他或许可以提供进一步的建议,或者至少您可以建议将此功能作为 future 版本的愿望 list 。
关于r - 插入符号包 : Is it possible to implement my own bootstrapping method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006007/