You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rpart构建决策树仅返回根节点问题求助

问题诊断与解决方法

核心原因分析

你遇到的仅显示根节点的问题,大概率是以下两个关键原因:

  1. 错误将连续数值变量转为因子:hr(心率)、sbp(收缩压)、dbp(舒张压)属于连续型生理指标,转成因子后每个数值对应一个水平,导致每个水平的样本量极少,rpart无法找到能提升模型性能的分裂规则。
  2. rpart默认参数过于严格:默认的cp(复杂度参数)为0.01,只有当分裂带来的性能提升超过该阈值时才会保留节点;minsplit(分裂所需最小样本量)默认20、minbucket(叶子节点最小样本量)默认7,若你的数据集样本量不大,这些参数会阻止节点分裂。

具体解决步骤

1. 修正变量类型(优先处理)

将hr、sbp、dbp还原为数值型变量,仅保留gender为因子(性别本身是分类变量):

library(rpart)
library(rpart.plot)
train <- read.csv('train.csv', head=T, sep=",", dec=".")
train$gender <- factor(train$gender)
# 注释掉错误的因子转换,保留数值型
# train$hr <- factor(train$hr)
# train$sbp <- factor(train$sbp)
# train$dbp <- factor(train$dbp)
train$outcome <- factor(train$outcome)

2. 调整rpart控制参数,放松分裂阈值

如果修正变量类型后仍只有根节点,可通过rpart.control降低分裂门槛:

model <- rpart(outcome~., data=train, method="class",
               control = rpart.control(
                 cp = 0.001,    # 降低复杂度阈值,保留更多分裂
                 minsplit = 5,  # 降低分裂所需最小样本量
                 minbucket = 2  # 降低叶子节点最小样本量
               ))
rpart.plot(model)

3. 验证变量与因变量的相关性

如果上述操作后仍无改善,需确认自变量和因变量是否存在关联:

  • 对于分类变量(如gender),用卡方检验:
    chisq.test(train$gender, train$outcome)
    
  • 对于数值变量(如hr、sbp),用方差分析:
    anova(lm(outcome~hr+sbp+dbp, data=train))
    

如果检验结果的p值远大于0.05,说明变量和因变量无显著关联,自然无法生成有效分裂节点。

4. 检查样本量

如果你的训练集样本量过小(比如少于50条),即使变量有相关性,也可能因达不到minsplit和minbucket的要求而无法分裂,此时可进一步降低这两个参数的值,或增加样本量。

内容的提问来源于stack exchange,提问作者Konstantina S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 02:57:48