Нужна помощь в том, чтобы метод = cforest работал в train() из caret, используя перекрестную проверку без исключения

#random-forest #r-caret #training-data

Вопрос:

examples_dataset.csv

Я пытался найти так много способов решить эту проблему, но до сих пор не нашел решения. Я пытаюсь обучить леса условного вывода с помощью каретки, используя метод перекрестной проверки без исключения. У меня есть около 20 (больших) наборов данных для запуска этого метода, следовательно, есть функции для автоматизации некоторых.

Многое из того, что я нашел, говорит о том, что мои кванты не являются факторами, но я проверил после запуска prep_df() в df, и это действительно факторы. Я получаю ошибку при запуске лесов условного вывода (cif_model()), но не со случайными лесами (rf_model()). Результатом попытки создать эту модель является «Что-то не так; все значения метрики точности отсутствуют» (на рисунке ниже).

Любая помощь и руководство приветствуются!

   ## Example code 
  ## GOAL: create train() code from caret that uses conditional inference forests to assess variable importance with categorical dependent variable using leave one out cross validation
 rm(list=ls())

setwd()

ex.all <- read.csv("examples_dataset.csv", header = TRUE)

loo_ctrl <- trainControl(method = "LOOCV")

#This function works!
rf_model <- function(file.name) {
  model <- train(QuantBins ~ F_Cou   B_Cou   Height   GBH   N_b   N_f   L_u   D_w   N_p 
  P_Cou, data = file.name, method = "rf", trControl = loo_ctrl, tuneLength = 10, control = 
rpart.control(minbucket = 10), ntree = 50)
  return(model)
}

#This does not.
cif_model <- function(file.name) {
  model <- train(QuantBins ~ F_Cou   B_Cou   Height   GBH   N_b   N_f   L_u   D_w   N_p 
  P_Cou, data = file.name, method = "cforest", trControl = loo_ctrl, tuneLength = 10, control 
= ctree_control(minbucket = 10), ntree = 50)
  return(model)
}

##### functions used #####
prep_df <- function(file.name) {
  file.name$BINARY <- ifelse(file.name$TOTAL >= 1, "yes", "no")
  file.name$BINARY <- as.factor(file.name$BINARY)
  file.name$L_u <- as.factor(file.name$L_u)
  file.name$TOTAL <- as.numeric(file.name$TOTAL)

  ## Quantile distribution of breaks in Total Fruit
  numbers_of_bins = 5 #this will return four groups
  file.name <- file.name %>% mutate(QuantBins = cut(TOTAL, breaks = unique(quantile(TOTAL,         
probs=seq.int(0,1, by=1/numbers_of_bins))), include.lowest=TRUE))
  print(length(levels(file.name$QuantBins)))
  temp <- levels(file.name$QuantBins)
  file.name$QuantBins <- as.character(file.name$QuantBins)
  
  for(i in 1:length(file.name$QuantBins)) {
    temp1 <- strsplit(file.name$QuantBins[i], ",")
    temp2 <- strsplit(temp1[[1]][1], "\(")
    temp3 <- strsplit(temp1[[1]][[2]], "\]")
    file.name$QuantBins[i] <- paste("Fruit", temp2[[1]][2], "to", temp3[[1]][1])
  }
  
  file.name$QuantBins <- as.factor(file.name$QuantBins)
  file.name$QuantBins <- droplevels(file.name$QuantBins)
  print(length(levels(file.name$QuantBins)))
  
  return(file.name)
}

##### running trees #####
ex.all <- prep_df(ex.all)

ex.rf <- rf_model(ex.all)
print(ex.rf)
ex.rf
ex.rf$finalModel$importance

ex.cf <- cif_model(ex.all)
print(ex.cf)
ex.cf
ex.cf$finalModel$importance
 

Ошибка при использовании cif_model(например, все), показывающая «Что-то не так; все значения метрики точности отсутствуют»