[英]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.