Как преобразовать дерево решений RWeka в дерево сторон в R?

Я использую пакет RWeka в R, чтобы подогнать деревья M5 к набору данных, используя «M5P». Затем я хочу преобразовать сгенерированное дерево в дерево «вечеринки», чтобы я мог получить доступ к значениям переменных. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить функцию as.party работать без получения следующей ошибки:

"Error: all(sapply(split, head, 1) %in% c("<=", ">")) is not TRUE"

Эта ошибка возникает только тогда, когда я применяю функцию в цикле for, но цикл for необходим, поскольку я запускаю 5-кратную перекрестную проверку.

Ниже приведен код, который я запускал:

n <- nrow(data)

k <- 5

indCV <- sample( rep(1:k,each=ceiling(n/k)), n)


for(i in 1:k){

#Training data is for all the observations where indCV is not equal to i

training_data <- data.frame(x[-which(indCV==i),])

training_response <- y[-which(indCV==i)]

#Test the data on the fifth of the data where the observation indices are equal to i

test_data <- x[which(indCV==i),]

test_response <- y[which(indCV==i)]

#Fit a pruned model to the training data

fit <- M5P(training_response~., data=training_data, control=Weka_control(N=TRUE))

#Convert to party

p <- as.party(fit)
}

person Community    schedule 15.05.2016    source источник


Ответы (1)


В пакете RWeka есть пример преобразования M5P деревьев в party объектов. Если вы запустите example("M5P", package = "RWeka"), то визуализация дерева на самом деле будет нарисована partykit. После выполнения примеров см. plot(m3) и as.party(m3).

Однако, если для J48 вы можете получить полноценный объект constparty, то же самое нельзя сказать о M5P. В последнем случае сама древовидная структура может быть преобразована в party, но линейные модели внутри узлов не совсем просто преобразовать в lm объекты. Таким образом, если вы хотите использовать представление party для вычисления мер, которые зависят только от древовидной структуры (например, переменных, используемых для разбиения, количества разбиений, точек разбиения и т. д.), вы можете это сделать. Но если вы хотите вычислить меры, которые зависят от моделей или прогнозов (например, среднеквадратичные ошибки и т. д.), то класс party не поможет.

person Achim Zeileis    schedule 15.05.2016