Запуск и построение случайного леса с категориальными данными в виде вектора объектов в r - PullRequest
0 голосов
/ 13 января 2019

У меня есть данные, как показано ниже. Он имеет три столбца. Первый - это категориальные данные, а второй - числовой, а последний - метка моего класса. Я хотел бы запустить случайный лес на моих данных и построить дерево, а также значение переменной. моя цель состоит в том, чтобы найти, какой subject_result является наиболее важным и за чем следует, а также увидеть дерево.

при использовании этого кода произошла ошибка

library(randomForest)  
randomForest(ENSC_Disc~.,data = df)

Error in randomForest.default(m, y, ...) : 
  NA/NaN/Inf in foreign function call (arg 1)

аналогично, используя rpart и ctree, возвращают ошибку.

data.frame(stringsAsFactors=FALSE,
   subject_result = c("ENSCPassed", "CHEMPassed", "ENSCPassed", "OTHERPassed",
                      "ENSCPassed", "MATHPassed", "ENSCPassed", "OTHERPassed",
                      "OTHERPassed", "OTHERPassed", "PHYSPassed", "CHEMPassed",
                      "MATHPassed", "ENSCPassed", "CMPTPassed", "OTHERPassed",
                      "CMPTPassed"),
     semester_num = c(9L, 4L, 16L, 7L, 7L, 2L, 8L, 11L, 4L, 12L, 1L, 4L, 3L,
                      11L, 8L, 11L, 12L),
        ENSC_Disc = c(1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
)

1 Ответ

0 голосов
/ 14 января 2019

Вот попытка использования caret.

library(tidyverse)
library(caret)
df<-data.frame(stringsAsFactors=FALSE,
           subject_result = c("ENSCPassed", "CHEMPassed", "ENSCPassed", "OTHERPassed",
                              "ENSCPassed", "MATHPassed", "ENSCPassed", "OTHERPassed",
                              "OTHERPassed", "OTHERPassed", "PHYSPassed", "CHEMPassed",
                              "MATHPassed", "ENSCPassed", "CMPTPassed", "OTHERPassed",
                              "CMPTPassed"),
           semester_num = c(9L, 4L, 16L, 7L, 7L, 2L, 8L, 11L, 4L, 12L, 1L, 4L, 3L,
                            11L, 8L, 11L, 12L),
           ENSC_Disc = c(1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
)
set.seed(233)
str(df)
df$ENSC_Disc<-as.factor(df$ENSC_Disc)
fit.rf<-train(ENSC_Disc~.,data=df,metric="Accuracy",method="rf",
              trControl=trainControl(method="cv",number=5))

Значение первой переменной:

plot(varImp(fit.rf))

enter image description here

Фактическое дерево: это не работает так, как я думаю, вы ожидаете. Лучше использовать library(rattle), но это работает только на "rpart", а не на "rf", а здесь:

plot(fit.rf$finalModel)

enter image description here

...