Как подрезать дерево в 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) дерево, но оно делает это с меньшим количеством терминов ".

Постройте график зависимости стоимости от размера дерева для необрезанного дерева с помощью:

plotcp(tree)

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

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

Другие вопросы по тегам