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

Tidymodels决策树中分类变量按数值变量划分的问题求助

解决决策树按哑变量数值划分而非原始类别问题

核心原因

你用step_dummy生成的哑变量是数值型的0/1变量,决策树算法会把这类变量当作连续型变量处理,因此出现job_other<0.5这类基于阈值的划分规则,而非识别原始的职业类别。

解决方案

决策树(如rpart、partykit等包的实现)本身支持直接处理因子类型(factor)的分类变量,不需要提前做哑编码。调整你的预处理流程即可:

  1. 移除分类变量的哑编码步骤
    修改你的recipe,不对分类变量执行step_dummy,确保原始分类变量以因子类型传入模型:

    # 假设你的响应变量是housing_burden,预测变量包含job等分类变量
    rec <- recipe(housing_burden ~ ., data = your_data) %>%
      # 仅对需要的变量做其他预处理(比如中心化/标准化数值变量),跳过分类变量的哑编码
      step_center(all_numeric_predictors()) %>%
      step_scale(all_numeric_predictors())
    
  2. 确保分类变量是因子类型
    如果原始数据中分类变量是字符型(character),先转换为因子:

    your_data$job <- as.factor(your_data$job)
    # 批量转换所有分类变量
    your_data <- your_data %>%
      mutate(across(where(is.character), as.factor))
    
  3. 重新训练决策树
    用处理后的数据集训练模型,此时决策树会基于原始类别生成划分规则,比如job == "正式工"、job %in% c("临时工", "个体户")这类符合你问卷设定的逻辑。

补充说明

如果因特殊需求必须保留哑编码,可将生成的哑变量转换为因子(但不推荐,会增加变量数量且无必要):

rec <- recipe(housing_burden ~ ., data = your_data) %>%
  step_dummy(all_nominal_predictors(), one_hot = TRUE) %>%
  step_mutate(across(contains("job_"), as.factor))

内容的提问来源于stack exchange,提问作者chuchu_yelin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:20:41