[英]caret package: Is it possible to implement my own bootstrapping method?
我正在使用R的caret包来为我的模型选择变量。 使用rfe命令时,应该传递rfeControl对象,该对象具有方法参数。 此参数的选项为boot,cv,LOOCV和LGOCV。 由于我正在处理时间序列数据,我需要使用特殊的自举/交叉验证技术,因为正常情况不适用于时间序列数据(否则分布会被破坏等)。
我的问题是如何插入我自己的bootstrapping实现,但仍然使用caret rfe方法,它有我需要的所有其他东西。
没有一个简单的方法。 如果你学习rfe.default()
的代码,你会注意到在method = "boot"
的情况下,使用了createResample()
函数。 这是生成引导样本的函数。 类似的函数用于其他CV方法。
有一个艰难的方法; 超越最合适的create*()
函数; 假设您要执行块引导程序或ME引导程序,接管createResample()
函数并使用method = "boot"
,或者如果您需要特殊形式的CV,请使用method = "cv"
并接管createFolds()
。
您需要编写自己的create*()
函数,并用您的版本替换插入符号NAMESPACE中的那个。 不容易,但非常可行。 假设您编写自己的createResample()
函数; 首先,您需要注意,此函数会创建n = times
引导样本,并将其返回到矩阵中,其中包含times
列和与样本一样多的行。 您需要编写一个自定义的createResample()
函数,该函数返回相同的对象,但该函数执行您要使用的时间序列引导。
一旦编写了该函数,就需要将它放入插入符号命名空间,以便插入符号包中的函数使用它。 为此,您使用assignInNamespace()
。 假设您的新引导函数名为createMyResample()
并且它是您的工作区,将其插入到插入符名称空间中:
assignInNamespace("createResample", createMyResample, ns = "caret")
对不起,我不能更具体,但你没有说你希望如何执行bootstrap / CV,也没有说你想用什么R代码进行重新采样。 如果您提供有关如何进行重新采样的更多详细信息,我将再看看,看看我是否可以帮助您编写create*()
函数。
如果没有这一切,请联系插入符号的作者和维护者Max Kuhn; 他或许可以进一步提出建议,或者至少可以建议将此功能作为未来版本的愿望清单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.