2014-08-19 3 views
2

Я использую набор данных около 54 тыс. Записей и 5 классов (поп), из которых один класс незначителен. Я использую пакет каретку и следующий запустить rpart:rpart не расщепляет очевидные узлы

model <- train(pop ~ pe + chl_small, method = "rpart", data = training) 

и я получаю следующее дерево:

n= 54259 

node), split, n, loss, yval, (yprob) 
    * denotes terminal node 

1) root 54259 38614 pico (0.0014 0.18 0.29 0.25 0.28) 
2) pe< 5004 39537 23961 pico (0 0.22 0.39 2.5e-05 0.38) 
    4) chl_small< 32070.5 16948 2900 pico (0 0.00012 0.83 5.9e-05 0.17) * 
    5) chl_small>=32070.5 22589 10281 ultra (0 0.39 0.068 0 0.54) * 
3) pe>=5004 14722 1113 synecho (0.0052 0.052 0.0047 0.92 0.013) * 

Очевидно, что узел 5 должен быть дальнейший раскол, но rpart не делает Это. Я пробовал использовать cp = .001 до cp =.1, а также minbucket = 1000 в качестве дополнительных параметров, но никаких улучшений.

Цените любую помощь по этому вопросу.

+4

Почему вы говорите, что узел 5 должен быть разделен? Если распределение классов внутри узла не связано с предсказателями, то от его разделения не будет выигрыша. –

+3

Кроме того, если вы хотите заставить rpart разбиваться по возможности, установите 'cp = -1' (или любое отрицательное число). –

ответ

0

Попробуйте использовать модель с еще меньшим размером cp=0.00001 или cp = -1. Если он все еще не разбивает этот узел, это означает, что раскол не улучшит общее соответствие.

Вы также можете попробовать изменить критерии расщепления от примесей Джини по умолчанию для критерия информации усиления: parms = list(split = "information")

Если вы заставить его разделить, это может быть хорошей идеей, чтобы сделать быструю проверку: сравнить точность обучения и тестирования для исходной модели и модели с небольшим cp.

Если разница между обучением и тестированием намного меньше для исходной модели, то другая модель, вероятно, переоценивает данные.

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