【问题标题】:R: Caret rfe with a customized variable importance permimpR:带有自定义变量重要性 permimp 的 Caret rfe
【发布时间】:2021-04-23 20:40:27
【问题描述】:

我想用插入符号rfe() 和替代变量重要性算法permimp 运行递归特征消除。 permimp 排列重要性使用 cforestcforest_unbiased()。为了运行rfepermimp()cforest,我还需要自定义哪些其他插入符号函数?

这是我目前的代码:

library(caret)

permimpRFE <- list(summary = defaultSummary,
                   fit = function(x, y, first, last, ...){
                     library(party)
                     tmp <- as.data.frame(x, stringsAsFactors = TRUE)
                     tmp$y <- y
                     party::cforest(y ~ ., data = tmp,
                                    control = party::cforest_unbiased(ntree = 50))
                   },
                   pred = function(object, x)  predict(object, x),
                   rank = function(object, x, y) {
                     library(permimp)
                     vimp <- permimp::permimp(object, conditional = TRUE, threshold = .95, do_check = FALSE)
                     vimp <- as.data.frame(vimp$values)
                     colnames(vimp) <- "Overall"
                     vimp <- vimp[order(vimp$Overall, decreasing = TRUE),, drop = FALSE]
                     if (ncol(x) == 1) {
                       vimp$var <- colnames(x)
                     } else vimp$var <- rownames(vimp)
                     vimp
                   },
                   selectSize = pickSizeBest,
                   selectVar = pickVars)


# specify rfeControl
contr <- caret::rfeControl(functions=permimpRFE, method="repeatedcv", number=3, repeats=2, 
                           saveDetails = TRUE)

dat <- as.data.frame(ChickWeight)[1:50,]

preds <- dat[,2:4]
response <- dat[,1]

# recursive feature elimination caret (Algorithm 2)
set.seed(43, kind = "Mersenne-Twister", normal.kind = "Inversion")
results <- caret::rfe(x = preds, 
                      y = response,
                      sizes=c(1:3),
                      metric= "RMSE", 
                      rfeControl=contr)

我收到错误Error in { : task 1 failed - "invalid 'x' type in 'x &amp;&amp; y'"

如何让rfepermimpcforest 一起运行?

【问题讨论】:

    标签: r r-caret rfe


    【解决方案1】:

    在尝试为rfe() 自定义变量重要性函数时,实现所需函数及其依赖函数的准确语法非常重要。

    就我而言,我必须将 predict(object, x) 更改为 predict(object, newdata = x)

    现在代码 sn-p 正在运行:

    library(caret)
    
    permimpRFE <- list(summary = defaultSummary,
                       fit = function(x, y, first, last, ...){
                         library(party)
                         tmp <- as.data.frame(x, stringsAsFactors = TRUE)
                         tmp$y <- y
                         party::cforest(y ~ ., data = tmp,
                                        control = party::cforest_unbiased(ntree = 50))
                       },
                       pred = function(object, x) {
                         x <- as.data.frame(x, stringsAsFactors = TRUE)
                         predict(object, newdata = x)
                       },
                       rank = function(object, x, y) {
                         library(permimp)
                         vimp <- permimp::permimp(object, conditional = TRUE, threshold = .95, do_check = FALSE)
                         vimp <- as.data.frame(vimp$values)
                         colnames(vimp) <- "Overall"
                         vimp <- vimp[order(vimp$Overall, decreasing = TRUE),, drop = FALSE]
                         if (ncol(x) == 1) {
                           vimp$var <- colnames(x)
                         } else vimp$var <- rownames(vimp)
                         vimp
                       },
                       selectSize = pickSizeBest,
                       selectVar = pickVars)
    
    
    # specify rfeControl
    contr <- caret::rfeControl(functions=permimpRFE, method="repeatedcv", number=3, repeats=2, 
                               saveDetails = TRUE)
    
    dat <- as.data.frame(ChickWeight)[1:50,]
    
    preds <- dat[,2:4]
    response <- dat[,1]
    
    # recursive feature elimination caret (Algorithm 2)
    set.seed(43, kind = "Mersenne-Twister", normal.kind = "Inversion")
    results <- caret::rfe(x = preds, 
                          y = response,
                          sizes=c(1:3),
                          metric= "RMSE", 
                          rfeControl=contr)
    

    【讨论】:

      猜你喜欢
      • 2013-08-17
      • 2016-09-29
      • 2015-06-09
      • 1970-01-01
      • 2018-05-21
      • 2020-08-12
      • 2019-05-08
      • 2021-03-28
      • 2021-08-22
      相关资源
      最近更新 更多