rpart дает одинаковые результаты для перекрестной проверки и отсутствия резюме - PullRequest
0 голосов
/ 10 сентября 2018

Как видно из заголовка, я пытаюсь запустить дерево решений как с перекрестной проверкой, так и без нее, используя пакет rpart в R. Я делаю это с помощью параметра xval, как описано в виньетке ( https://cran.r -project.org / веб / пакеты / rpart / виньетки / longintro.pdf )

К сожалению, я получаю одно и то же дерево с и без резюме. Я сравнил время расчета для каждого, и модель CV выглядит примерно в 10 раз дольше, так что она явно что-то делает, я просто не могу понять, что.

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

Вот пример кода, который показывает мою проблему, printcp показывает те же результаты, и прогнозы как для тренировочного, так и для удерживающего набора одинаковы.

library(rpart)
library(caret)

abalone <- read.csv(file = 'https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data',header = FALSE)
names(abalone) <- c("sex", "length", "diameter", "height", "whole_weight", "shucked_weight", "viscera_weight", "shell_weight", "rings") 

train_set <- createDataPartition(abalone$sex, times = 1, p = 0.8, list = FALSE)

abalone_train <- slice(abalone, train_set)
abalone_test <- slice(abalone, -train_set)

abalone_fit_noCV <- rpart(sex ~ ., 
                     data = abalone_train, 
                     method = "class", 
                     parms = list(split = 'information'),
                     control = rpart.control(xval = 0,
                                             cp = 0.005)) 

abalone_fit_CV <- rpart(sex ~ ., 
                        data = abalone_train, 
                        method = "class", 
                        parms = list(split = 'information'),
                        control = rpart.control(xval = 10,
                                                cp = 0.005))

printcp(abalone_fit_noCV)
printcp(abalone_fit_CV)

CV_pred <- predict(abalone_fit_CV, type = "class")
noCV_pred <- predict(abalone_fit_noCV, type = "class")
confusionMatrix(CV_pred, noCV_pred)

CV_pred <- predict(abalone_fit_CV, abalone_test, type = "class")
noCV_pred <- predict(abalone_fit_noCV, abalone_test, type = "class")
confusionMatrix(CV_pred, noCV_pred)

1 Ответ

0 голосов
/ 11 сентября 2018

По-настоящему новичок, я понял это вскоре после публикации.

Для всех, кто сталкивается с этой проблемой, в основном ответ на Перекрестная проверка :

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

Это ясно, если вы прочитаете полный Сокращение дерева раздела виньетки , а не только раздел перекрестной проверки.

...