R:手动计算 class 方法的 rpart 相对误差(虹膜数据集)

R: calculate manually rpart relative error for class method (iris dataset)

我安装了下面的树

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

我正在尝试手动计算下面的黄色数字 (0.285714)。

我认为如果树从 0 到 1 个节点,这应该是 Gini 杂质的相对减少:

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。

没有。它不是相对基尼杂质。这是显示相对总杂质。

在顶层节点,杂质为 70/120 = 0.58333。第一次分裂后,一个节点完美分类 50 个点,另一个节点有 50/20 分裂。因此,120 个点中有 20 个错误,该级别的杂质为 20/120 = 0.16666。正在计算的相对杂质是

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

为了完整起见,第二次拆分后有 3 个错误。相对于最初的 70 个错误,我们有 3/70 = 0.042857(nsplit=2 旁边的数字)。