如何手动指定决策树分割规则并将rpart训练的决策树应用到其他数据集
问题1:能否手动指定决策树分割规则,手动复刻rpart训练的决策树
可以实现。
rpart生成的模型对象本身就存储了全量的分割规则,你可以直接提取rpart对象的splits、frame两个核心字段,获取每个节点的分割变量、分割阈值、分支走向、样本占比等全部信息,完全可以基于这些信息手动复刻出一模一样的决策树。
如果你需要自己手动指定规则从头构建一个符合rpart格式的决策树,也可以手动构造和rpart输出结构一致的列表,再给列表加上rpart类属性,之后就能直接调用rpart配套的predict()、prp()(绘图)等函数使用。
问题2:数据集1训练的rpart树,能否直接应用到数据集2、3
完全可以,这是监督学习模型跨数据集预测的常规操作。
只需要满足两个前提即可:
- 数据集2、3中必须包含模型训练时用到的所有预测变量,变量名必须和训练集完全一致
- 预测变量的类型、编码规则和训练集完全匹配:比如分类变量的水平不能出现训练集中完全没出现过的新值,连续变量的单位、取值逻辑和训练集一致
满足条件后直接调用predict()函数即可完成预测,不需要重新训练模型,示例代码如下:
# rpart_model为数据集1上训练得到的rpart决策树对象 pred_2 <- predict(rpart_model, newdata = dataset2) pred_3 <- predict(rpart_model, newdata = dataset3)
注意事项
- 新数据集中包含的训练时未用到的变量,
predict()函数会自动忽略,不会影响预测结果 - 如果新数据的分类预测变量出现训练集未覆盖的新水平,rpart默认会将该样本分配到当前分割节点的主分支(也就是训练时占比更高的分支),如果该逻辑不符合你的业务需求,可以提前对新数据的异常水平做归并处理。
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

