В чем разница между rel error и x error в дереве решений rpart?

У меня есть чисто категоричный фрейм данных из базы данных машинного обучения UCI https://archive.ics.uci.edu/ml/datasets/Diabetes+130-US+hospitals+for+years+1999-2008

Я использую rpart для формирования дерева решений на основе новой категории о том, возвращаются ли пациенты раньше, чем через 30 дней (новая категория с ошибками).

Я использую следующие параметры для своего дерева решений

    tree_model <- rpart(Failed ~ race + gender + age+ time_in_hospital+ medical_specialty + num_lab_procedures+ num_procedures+num_medications+number_outpatient+number_emergency+number_inpatient+number_diagnoses+max_glu_serum+ A1Cresult+metformin+glimepiride+glipizide+glyburide+pioglitazone+rosiglitazone+insulin+change,method="class", data=training_data, control=rpart.control(minsplit=2, cp=0.0001, maxdepth=20, xval = 10), parms = list(split = "gini"))

Печать результатов дает:

       CP     nsplit rel error  xerror     xstd
1 0.00065883      0   1.00000  1.0000   0.018518
2 0.00057648      8   0.99424  1.0038   0.018549
3 0.00025621     10   0.99308  1.0031   0.018543
4 0.00020000     13   0.99231  1.0031   0.018543

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

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

Может кто-нибудь объяснить мне, почему ксеррор - это то, на чем фокусируется при обрезке дерева? И когда мы суммируем, что является ошибкой классификатора дерева решений, это ошибка 0.99231 или 1.0031?

2 ответа

Решение

X-ошибка - это ошибка перекрестной проверки (rpart имеет встроенную перекрестную проверку). Вы используете 3 столбца, rel_error, xerror и xstd вместе, чтобы помочь вам выбрать, где обрезать дерево.

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

Основное правило - выбрать самый низкий уровень, на котором rel_error + xstd < xerror,

Если вы бежите plotcp на вашем выходе он также покажет вам оптимальное место, чтобы обрезать дерево.

Также смотрите здесь.

Я хотел бы добавить некоторую информацию в ответ @Harold Ship. На самом деле, есть три способа выбрать оптимальное значение cp для обрезки:

  1. Используйте первый уровень (т.е. наименьший nsplit) с минимальным ксеррором. Первый уровень включается только тогда, когда несколько уровней имеют одинаковый минимальный ксеррор. Это наиболее распространенный используемый метод.

  2. Используйте первый уровень, где xerror попадает в диапазон ±1 xstd min(xerror), т. Е. Xerror

    Примечание: rel_error НЕ должен использоваться в сокращении.

  3. (Редко используемый метод) Используйте первый уровень, где xerror ± xstd перекрывается с min(xerror) ± xstd. т.е. уровень, нижний предел которого находится на или ниже горизонтальной линии.

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