使用R语言C5.0构建决策树无输出的问题排查
C5.0算法未生成预期决策树的排查与解决
问题背景
使用R语言的C50包构建决策树,数据集为14行3列的jogging数据,目标变量为CLASSIFICATION。执行代码后未生成预期的2节点决策树,无树结构输出。
数据集详情
WEATHER JOGGED_YESTERDAY CLASSIFICATION C N + W Y - Y Y - C Y - Y N - W Y - C N - W N + C Y - W Y + W N + C N + Y N - W Y -
dput结构:
structure(list(WEATHER = c("C", "W", "Y", "C", "Y", "W", "C", "W", "C", "W", "W", "C", "Y", "W"), JOGGED_YESTERDAY = c("N", "Y", "Y", "Y", "N", "Y", "N", "N", "Y", "Y", "N", "N", "N", "Y" ), CLASSIFICATION = c("+", "-", "-", "-", "-", "-", "-", "+", "-", "+", "+", "+", "-", "-")), class = "data.frame", row.names = c(NA, -14L))
执行代码
jogging <- read.csv("Jogging.csv") jogging #training data library(C50) jogging$CLASSIFICATION <- as.factor(jogging$CLASSIFICATION) jogging_model <- C5.0(jogging[-3], jogging$CLASSIFICATION) jogging_model summary(jogging_model) plot(jogging_model)
问题原因
C5.0()函数默认会根据数据复杂度自动选择生成规则集还是决策树。当算法判定规则集比决策树更简洁时,会输出规则而非树结构,这就导致你看不到预期的决策树节点。
另外需确认数据读取是否正确:若你的Jogging.csv是用空格分隔而非逗号,read.csv()会错误合并列,导致模型输入异常。但从你提供的dput结构看,数据格式是正确的,所以核心原因是算法自动选择了规则集。
解决方法
强制C5.0()生成决策树,只需在函数中添加rules = FALSE参数:
library(C50) # 确保目标变量是因子类型 jogging$CLASSIFICATION <- as.factor(jogging$CLASSIFICATION) # 强制生成决策树 jogging_model <- C5.0(jogging[-3], jogging$CLASSIFICATION, rules = FALSE) # 查看树结构 jogging_model summary(jogging_model) plot(jogging_model)
执行修改后的代码后,就能生成并查看决策树结构了。
内容的提问来源于stack exchange,提问作者kang yep sng
相关产品推荐
相关产品推荐

