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 旁边的数字)。
我安装了下面的树
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 旁边的数字)。