【问题标题】:rpart not splitting obvious nodesrpart不分裂明显的节点
【发布时间】:2014-10-12 00:08:42
【问题描述】:

我正在使用一个包含大约 54K 记录和 5 个类(pop)的数据集,其中一个类无关紧要。我正在使用 caret 包和以下内容来运行 rpart:

model <- train(pop ~ pe + chl_small, method = "rpart", data = training)

我得到以下树:

n= 54259 

node), split, n, loss, yval, (yprob)
  * denotes terminal node

1) root 54259 38614 pico (0.0014 0.18 0.29 0.25 0.28)  
 2) pe< 5004 39537 23961 pico (0 0.22 0.39 2.5e-05 0.38)  
  4) chl_small< 32070.5 16948  2900 pico (0 0.00012 0.83 5.9e-05 0.17) *
  5) chl_small>=32070.5 22589 10281 ultra (0 0.39 0.068 0 0.54) *
3) pe>=5004 14722  1113 synecho (0.0052 0.052 0.0047 0.92 0.013) *

很明显,节点5应该进一步拆分,但rpart没有这样做。我尝试使用cp = .001cp =.1 以及minbucket = 1000 作为附加参数,但没有任何改进。

感谢您对此的任何帮助。

【问题讨论】:

  • 为什么说节点5必须拆分?如果节点内的类分布与预测变量无关,那么拆分它不会有任何好处。
  • 另外,如果您想尽可能强制 rpart 拆分,请设置 cp = -1(或任何负数)。

标签: r rpart


【解决方案1】:

尝试使用更小的cp=0.00001cp = -1 运行模型。如果仍然没有拆分该节点,则意味着拆分不会提高整体拟合度。

您也可以尝试将拆分标准从默认的基尼杂质更改为信息增益标准:parms = list(split = "information")

如果您确实强制拆分,最好快速检查一下: 比较原始模型和小cp 模型的训练集与测试集的准确性。

如果原始模型的训练与测试之间的差异要小得多,那么另一个模型可能会过度拟合数据。

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 2012-04-05
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2015-10-28
    • 2021-02-16
    • 2013-01-12
    • 2013-11-10
    相关资源
    最近更新 更多