R: вычислить вручную относительную ошибку rpart для метода класса (набор данных радужной оболочки) - PullRequest
1 голос
/ 18 июня 2019

Я установил следующее дерево

library(rpart)    
treeResult = rpart(Species~., data=iris[1:120,], method="class")

и пытаюсь вычислить желтое число ниже (0,285714) вручную.

enter image description here

Я думал, что это должно быть относительное уменьшение примеси Джини, если дерево переходит от 0 к 1 узлу:

pNode1 = c(50,50,20)/120
pNode2 = c(50,0,0)/50
pNode3 = c(0,50,20)/70
# The counts used to calculate these pNodes are taken from summary(treeResult).

impurityNode1 = sum(pNode1*(1-pNode1))
impurityNode2 = sum(pNode2*(1-pNode2))
impurityNode3 = sum(pNode3*(1-pNode3))

relativeError = (50/120*impurityNode2+70/120*impurityNode3) / impurityNode1

Однако это дает 0,3809524 вместо 0,285714.

1 Ответ

1 голос
/ 18 июня 2019

Нет. Это не относительная примесь Джини. Это показывает относительную общую примесь.

На узле верхнего уровня примесь составляет 70/120 = 0,58333. После первого разделения один узел отлично классифицирует 50 точек, а другой узел имеет 50/20. Таким образом, есть 20 ошибок из 120 пунктов, и примесь на этом уровне составляет 20/120 = 0,16666. Рассчитанная относительная примесь составляет

(20/120) / (70/120) = 0.16666/0.58333 = 0.285714

Для полноты после второго разделения есть 3 ошибки. Относительно исходных 70 ошибок мы имеем 3/70 = 0,042857 (число, которое он говорит рядом с nsplit = 2).

...