Результат rpart - всего лишь 1 корень

Как и в моем наборе данных, Утечка имеет два значения 1,0. Есть только около 300 строк с 1 и дополнительные в 569378 строк с 1. Это было бы причиной того, что я только что получил 1 корень в результате rpart.

Как я могу это решить?

fm.pipe<-Leakage~PipeAge +PipePressure

> printcp(CART.fit)

Regression tree:
rpart(formula = fm.pipe, data = Data)

Variables actually used in tree construction:
character(0)

Root node error: 299.84/569378 = 0.00052661

n= 569378 

         CP nsplit rel error xerror xstd
1 0.0033246      0         1      0    0

Ответ 1

Невозможно "решить" это, если независимые переменные не предоставляют достаточную информацию для выращивания дерева. См., Например, справку для rpart.control: "Любой раскол, который не уменьшает общее отсутствие соответствия коэффициентом cp, не предпринимается". Вы можете попытаться ослабить параметры управления, но нет гарантии, что это приведет к тому, что дерево будет расти за пределами корня.

CART.fit <- rpart(formula=fm.pipe, data=Data, control=rpart.control(minsplit=2, minbucket=1, cp=0.001))

Ответ 2

Я не уверен, что я понимаю вашу проблему с длиной строки, но здесь, что эта ошибка обычно означает:

rpart использует ограничения для построения дерева решений. Здесь значения по умолчанию: документы:

rpart.control(minsplit = 20, minbucket = round(minsplit/3), cp = 0.01, 
      maxcompete = 4, maxsurrogate = 5, usesurrogate = 2, xval = 10,
      surrogatestyle = 0, maxdepth = 30, ...)

Вам нужно уменьшить эти ограничения. Как сказал @JeanVAdams, начните с минимального минимума:

rpart(formula=fm.pipe, data=Data, 
      control=rpart.control(minsplit=1, minbucket=1, cp=0.001))

У вашего первого результата, вероятно, будет слишком много узлов, поэтому вам придется медленно наращивать эти ограничения, пока не получите дерево с приличным размером.


Если вы все еще смущены, здесь пример:

Скажем, вы смотрите на данные о продуктовых магазинах, и вы хотите увидеть дерево самых популярных часов для покупки. Там всего 24 часа, верно? Таким образом, существует только 24 возможности для независимой переменной. У Rpart есть условие, которое говорит

"В node должно быть как минимум 20 вещей, чтобы разбить его.

Это означает, что ваш node не может даже разбить один раз. Даже если у вас 15 миллиардов строк, есть только 24 возможных способа разделить его. Это сложнее, чем это возможно, но это хорошее место для начала.

Я действительно искал эту точную проблему (покупатели по часам), и мне пришлось оставить свои ограничения на минимально возможном уровне, чтобы получить дерево вообще:

rpart(formula=fm.pipe, data=Data, control=rpart.control(minsplit=1, minbucket=1, cp=0.001))

Ответ 3

Мой набор данных содержит только 14 строк. Попробуйте использовать следующий код:

dtm<-rpart(playtennis~., weathe_train, method="class", minsplit=2, minbucket=1)