【问题标题】:R: calculate manually rpart relative error for class method (iris dataset)R:手动计算类方法的rpart相对误差(虹膜数据集)
【发布时间】:2019-06-19 01:43:48
【问题描述】:

我安装了以下树

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

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

我认为如果树从 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。

【问题讨论】:

    标签: r rpart


    【解决方案1】:

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

    在顶层节点,杂质为 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 旁边的数字)。

    【讨论】:

    • 感谢您的解释!但这确实让我很好奇:设置 parms = list(split="information") (entropy impurity) 和 parms = list(split="gini") (gini impurity) 有什么区别?
    • 这是它进行分裂的基础。最大化基尼系数或熵的变化。两者都不是 printcp 所报告的内容,尽管这可能有用。
    • 我明白了!你知道我是否可以在 rpart 输出对象(“t​​reeResult”)的某个地方找到有关杂质指数(基尼系数或熵)的信息吗?像整体杂质,每个节点的杂质或添加节点引起的杂质改进? (我看了但找不到。)
    • 我没有看到存储在输出对象中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2018-09-23
    • 2018-04-21
    • 1970-01-01
    相关资源
    最近更新 更多