Как обрезать дерево в R?

Я делаю классификацию с использованием rpart в R. Модель дерева обучается:

> tree <- rpart(activity ~ . , data=trainData)
> pData1 <- predict(tree, testData, type="class")

точность для этой модели дерева:

> sum(testData$activity==pData1)/length(pData1)
[1] 0.8094276

я прочитала учебник чтобы обрезать дерево перекрестной проверкой:

> ptree <- prune(tree,cp=tree$cptable[which.min(tree$cptable[,"xerror"]),"CP"])
> pData2 <- predict(ptree, testData, type="class")

показатель точности для обрезанного дерева по-прежнему тот же:

> sum(testData$activity==pData2)/length(pData2)
[1] 0.8094276

Я хочу знать, что случилось с моим обрезать дерево? И как я могу обрезать модель дерева, используя перекрестную проверку в R? Спасибо.

1 ответов


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

построить стоимость-сложность против размера дерева для un-подрезают дерево через:

plotcp(tree)

найдите дерево слева от дерева с минимальной ошибкой, значение cp которого находится в строке ошибки одного с минимальной ошибкой.

может быть много причин, почему обрезка не влияет на подходящее дерево. Например, лучшим деревом может быть то, где алгоритм остановился в соответствии с правилами остановки, указанными в ?rpart.control.