如何在 rfe (caret) 中设置分组 cv 的列车控制索引?

如何解决如何在 rfe (caret) 中设置分组 cv 的列车控制索引?

我有一个包含依赖观察的数据库,需要使用分组重采样策略来避免数据泄漏。我预测的结果是二元的。我使用的算法是随机森林(游侠)。我有兴趣确定优化预测的最小特征集(在我的情况下为 AUC 分数)。我在 caret (rfe) 中使用了递归特征消除

我的想法是创建嵌套重采样,在内循环(3 次分割)中使用游侠调整,在外循环(4 次分割)中进行特征选择。我在内循环和外循环中都需要一个分组的 cv。

我创建了外部索引,并为每个外部重采样创建了内部索引。 插入符号中的 RFE 功能是理想的。我可以在 rfeControl(外循环)中设置 index 和 indexOut。我无法做的是在 trainControl(内循环)中设置 index 和 indexOut。

这篇文章有助于理解这个问题。 r caret package,error if I specified index for both rfe control and train control

问题可能在于外部函数 (rfe) 使用与原始数据相同的行指示符,但是一旦 train 看到数据,这些行号的含义就不同了。

您可以这样做,但它需要为外部模型(即参考)的每个重采样设置一组单独的重采样索引,因为每次内部数据都会不同。

我为外部模型的每个重采样创建了一组单独的索引。这是一个包含四个元素的列表(外部 4 cv)。列表的每个元素都有 3 个嵌套的内部索引集。但我无法将其传递给 trainContrl。这是我的代码

myRFE <- caretFuncs 
myRFE$summary<-twoClassSummary

用于为 rfeControl 指定索引

rctrl <- rfeControl(functions=myRFE,method='cv',index = outerIn,number=4)

用于为 trainControl 指定索引

  tctrl <- trainControl(classprobs= TRUE,number=3,index = innerIn,summaryFunction =  twoClassSummary)
 

  tgrid <- expand.grid(splitrule = 'gini',mtry = c(5:15),min.node.size= c(150,500,1000,2500))

  rfe_ens<-rfe(x=x,y=y,rfeControl = rctrl,method='ranger',importance = 'permutation',metric = c("ROC"),tuneGrid = tgrid,trControl=tctrl)

我遇到了这个错误

Error in { : task 1 Failed - "`index` should be lists of integers."

  

我该如何解决这个问题?有什么想法吗? 谢谢

更多详情

>str(outerIn)


    List of 4
 $ Fold1: int [1:24720] 7212 1429 13440 22887 9774 20582 1374 7601 9179 9099 ...
 $ Fold2: int [1:25275] 18575 11205 30522 13212 12077 7052 5298 8181 28143 18792 ...
 $ Fold3: int [1:25269] 32261 16336 25596 23698 20896 16454 32939 6595 25479 14207 ...
 $ Fold4: int [1:25032] 31789 12556 14823 23106 15732 18571 5879 11311 13302 6193 ...



>str(innerIn)


 List of 4
 $ :List of 3
  ..$ : int [1:16765] 13399 3499 12636 31860 3711 23795 13953 16517 31239 868 ...
  ..$ : int [1:16280] 10255 24390 10104 11288 11282 33230 5666 21285 24531 6708 ...
  ..$ : int [1:16395] 17765 16051 1374 13273 22643 2984 11388 13944 9538 2260 ...
 $ :List of 3
  ..$ : int [1:16759] 19490 10627 1060 3853 25696 9679 28456 14230 29989 7830 ...
  ..$ : int [1:16527] 32816 19534 24884 25402 27611 23251 27084 18135 13758 9663 ...
  ..$ : int [1:17264] 22451 13223 14577 16678 29490 17251 9949 30096 25587 15406 ...
 $ :List of 3
  ..$ : int [1:16615] 32797 12427 4317 31676 6545 17228 15351 2585 7714 21658 ...
  ..$ : int [1:16960] 23015 29352 11955 22002 20736 8722 28758 13162 3013 29056 ...
  ..$ : int [1:16963] 3085 1171 27595 4898 3977 19213 31180 4953 11275 5629 ...
 $ :List of 3
  ..$ : int [1:16521] 14597 16094 7625 32268 30646 16106 24784 13249 22954 1440 ...
  ..$ : int [1:16939] 31553 14039 10004 21405 12654 26446 10917 5330 14877 27735 ...
  ..$ : int [1:16604] 1994 25990 6935 13210 27014 31580 18450 3894 4761 4624 ...

      

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?