2016-06-07 2 views
0

Я пытаюсь создать дерево классификации в R, используя дерево пакетов.Дерево классификации в пределе R до 32 уровней

Это выдержка из набора данных я использую (заголовок включен):

CENTRO_EXAMEN,NOMBRE_AUTOESCUELA,MES,TIPO_EXAMEN,NOMBRE_PERMISO,PROB 
Alcal· de Henares,17APTOV,5,PRUEBA DESTREZA,A2 ,0 
Alcal· de Henares,17APTOV,5,PRUEBA CONDUCCION Y CIRCULACION,B ,0.8 
Alcal· de Henares,17APTOV,5,PRUEBA TEORICA,B ,0.333333333 
Alcal· de Henares,2000,5,PRUEBA TEORICA,B ,0 

, и это команды я Выдающий к R:

madrid=read.csv("madrid.csv",header=T,na.strings="?") 
#madrid=na.omit(madrid) 
names(madrid) 
dim(madrid) 
fix(madrid) 
library(tree) 
attach(madrid) 

#costruisce albero 
High=ifelse(PROB<=0.5,"No","Yes") 
madrid=data.frame(madrid,High) 
tree.madrid=tree(High~CENTRO_EXAMEN+NOMBRE_AUTOESCUELA+MES+TIPO_EXAMEN+NOMBRE_PERMISO,madrid) 
summary(tree.madrid) 
plot(tree.madrid) 
text(tree.madrid,pretty=0) 
tree.madrid 

R возвращает следующую ошибку после выдача tree.madrid

Error in tree(High ~ CENTRO_EXAMEN + NOMBRE_AUTOESCUELA + MES + TIPO_EXAMEN + : 
    factor predictors must have at most 32 levels 

Любая идея, почему?

+0

Это может быть проблема с акцентами в тексте? – user3161330

ответ

1

В принципе, для создания стольких расщеплений в ваших данных становится дорогостоящим, так как вы выбираете наилучшее разделение из всех возможных возможных расколов 2^32 (приблизительно).

Если вы в состоянии использовать случайный лес, комментарий Бена here предполагает, что randomForest теперь может обрабатывать до 53 уровней. Если по какой-либо причине вы не можете использовать случайный лес, вы можете рассмотреть возможность свертывания уровней вашего категориального предиктора.

+0

Я могу использовать randomForest, и я попробовал, по-видимому, мой datased производит более 53 категориальных предикторов. Почему это так, по вашему мнению? Это из-за количества различных значений, которые может иметь каждая переменная? – user3161330

+0

@ пользователь3161330 точно. Когда у вас есть категориальная переменная, уровень является уникальным значением. Если вы выполняете 'length (levels (data $ factor_variable)), он вернет количество уровней в вашей переменной. Это работает только для факторов, но если вы хотите количество различных значений символов, вы можете сделать 'length (unique (data $ character_variable))' – ZachTurn

+0

Теперь я вижу ... Любая идея, что я могу сделать? Я знаю, что вы не знаете про набор данных, но есть ли общая методика, чтобы ... уменьшить количество значений? Просто избавиться от переменной со слишком большим количеством значений? – user3161330

Смежные вопросы