Ошибка пропущенных значений в функции train() Caret для деревьев

Я новичок в использовании R и пытаюсь построить дерево решений. Я уже использовал пакет party за ctree а также rpart для rpart.

Но, поскольку мне нужно было сделать перекрестную проверку для моей модели, я начал использовать caret пакет, так как я могу сделать это с помощью функции `train() и метода, который я хочу использовать.

library(caret)
cvCtrl <- trainControl(method = "repeatedcv", repeats = 2,
                   classProbs = TRUE)

ctree.installed<- train(TARGET ~ OPENING_BALANCE+ MONTHS_SINCE_EXPEDITION+
                    RS_DESC+SAP_STATUS+ ACTIVATION_STATUS+ ROTUL_STATUS+ 
                    SIM_STATUS+ RATE_PLAN_SEGMENT_NORM,
                    data=trainSet,
                    method = "ctree",
                    trControl = cvCtrl)

Тем не менее, мои переменные OPENING_BALANCE а также MONTHS_SINCE_EXPEDITION есть некоторые пропущенные значения, и функция не работает из-за этого. Я не понимаю, почему это происходит, так как я пытаюсь построить дерево. Эта проблема не возникает, когда я использую другие пакеты.

Это ошибка:

Error in na.fail.default(list(TARGET = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,  : 
missing values in object

Я не хотел использовать na.action=pass так как я действительно не хочу отбрасывать эти наблюдения.

Я делаю что-то неправильно? Почему это происходит? У вас есть предложения по этому поводу?

1 ответ

Я начинаю рассматривать набор данных PimaIndiansDiabetes2 из mlbench пакет, который имеет некоторые пропущенные значения.

data(PimaIndiansDiabetes2, package = "mlbench")
head(PimaIndiansDiabetes2)

  pregnant glucose pressure triceps insulin mass pedigree age diabetes
1        6     148       72      35      NA 33.6    0.627  50      pos
2        1      85       66      29      NA 26.6    0.351  31      neg
3        8     183       64      NA      NA 23.3    0.672  32      pos
4        1      89       66      23      94 28.1    0.167  21      neg
5        0     137       40      35     168 43.1    2.288  33      pos
6        5     116       74      NA      NA 25.6    0.201  30      neg

В train Я поставил na.action в na.pass (что приводит к возвращению набора данных без изменений), а затем установите maxsurrogate параметр в ctree:

library(caret)
cvCtrl <- trainControl(method="repeatedcv", repeats = 2, classProbs = TRUE)
set.seed(1234)
ctree1 <- train(diabetes ~ ., data=PimaIndiansDiabetes2,
                    method = "ctree",
                    na.action  = na.pass,
                    trControl = cvCtrl,
                    controls=ctree_control(maxsurrogate=2))

Результаты:

print(ctree1)
Conditional Inference Tree 

392 samples
  8 predictor
  2 classes: 'neg', 'pos' 

No pre-processing
Resampling: Cross-Validated (10 fold, repeated 2 times) 
Summary of sample sizes: 691, 692, 691, 691, 691, 691, ... 
Resampling results across tuning parameters:

  mincriterion  Accuracy   Kappa    
  0.01          0.7349111  0.4044195
  0.50          0.7485731  0.4412557
  0.99          0.7323906  0.3921662

Accuracy was used to select the optimal model using  the largest value.
The final value used for the model was mincriterion = 0.5.
Другие вопросы по тегам