Дерево решений не классифицирует 3 категории переменных

Я пытаюсь построить дерево решений с категориальной переменной (3 категории) с 194 предикторами.

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

Это мой код R:

fit <- rpart(GENDER~X1+X2+X3+X4+...+X193+X194,method="class", data=data)

Это мои результаты:

n= 4179 

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

 1) root 4179 2184 girl (0.12921752 0.47738693 0.39339555)  
   2) X120>=0.5 1042  229 girl(0.16890595 0.78023033 0.05086372) *
   3) X120< 0.5 3137 1546 boy(0.11603443 0.37679311 0.50717246)  
     6) X109>=0.5 381  120 girl(0.19160105 0.68503937 0.12335958) *
     7) X109< 0.5 2756 1212 boy(0.10558781 0.33417997 0.56023222)  
      14) X194>=0.5 129   34 girl(0.20155039 0.73643411 0.06201550) *
      15) X194< 0.5 2627 1091 boy(0.10087552 0.31442710 0.58469737)  
        30) X119< 0.5 2382 1057 boy(0.10327456 0.34047019 0.55625525)  
          60) X122>=0.5 70   12 girl (0.12857143 0.82857143 0.04285714) *
          61) X122< 0.5 2312  990 boy(0.10250865 0.32569204 0.57179931) *
        31) X119>=0.5 245   34 boy(0.07755102 0.06122449 0.86122449) *

Classification tree:
rpart(formula = GENDER ~ ., data = crs$dataset[crs$train, c(crs$input, 
    crs$target)], method = "class", parms = list(split = "information"), 
    control = rpart.control(usesurrogate = 0, maxsurrogate = 0))

Как я могу классифицировать 3 категории вместо двух?

-3
03 июля '14 в 0:04
источник поделиться
2 ответов

По умолчанию rpart() имеет некоторые правила остановки, которые мешают ему подгонять полное дерево (т. rpart() наблюдение в каждом узле), потому что это редко то, что вы хотите, и вы просто закончите обрезку этих пушистых избыточных листьев.

Следовательно, я бы предположил, что ваше дерево не способно предсказывать класс. Both, поскольку в отношении построенного дерева никогда не было победителем большинства голосов в любом из терминальных узлов. Три значения в круглых скобках после girl или boy являются апостериорными вероятностями каждого класса. boy является вторым значением, girl третьего значения, и both первое значение (при условии, что это будет путь по умолчанию R назначенной порядок уровней). Так rpart() принимает во внимание тот факт, что существуют три класса, это просто, что раскол выявляла никогда не предсказывали, что класс both.

Вы можете заставить rpart построить большое/полное дерево; посмотрите на ?rpart.control и аргументы minsplit, minbucket и cp которые все действуют, чтобы остановить растущее дерево, но настроены на несколько большие проблемы. Вы можете настроить их так, чтобы они соответствовали полному дереву (все они были низкими), но имейте в виду, что вы, вероятно, закончите обрезку большинства этих внешних листьев.

Что касается того, почему randomForest возвращает третью категорию; возможно, есть образцы бутстрапа, в которых вы можете предсказать класс both(), так и переменные, важные для прогнозирования both которые подсвечиваются, потому что randomForest рисует mtry переменные случайным образом, чтобы тестировать при выборе каждого раскола.

3
03 июля '14 в 19:46
источник

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

0
03 июля '14 в 13:17
источник

Посмотрите другие вопросы по метке или Задайте вопрос