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

如何在tidymodels中生成独立列形式的ispline特征?

在tidymodels中生成独立的I-spline特征列

你遇到的嵌套问题是因为model.matrix()返回的矩阵在step_mutate()中会被作为单个列存入数据框,而非拆分后的独立列。解决这个问题最简洁的方式是使用tidymodels生态中recipes包提供的专门样条步骤函数,而非手动调用model.matrix()。

推荐方案:使用step_spline_is()

step_spline_is()是recipes包中专门用于生成I-spline特征的步骤,它会自动将样条特征拆分为独立列,完美适配后续的bake()操作。

代码示例

library(tidymodels)
data(mtcars)

# 创建包含I-spline特征的recipe
spline_rec <- recipe(mpg ~ ., data = mtcars) %>%
  # 对disp变量生成df=5的I-spline特征,可选择保留原变量(keep_original=TRUE)
  step_spline_is(disp, df = 5, keep_original = FALSE)

# 预处理recipe并生成结果
prepped_rec <- prep(spline_rec)
bake(prepped_rec, new_data = NULL) %>% head()

执行后,你会得到命名为disp_splines_1到disp_splines_5的独立列,每个列对应一个I-spline特征。

备选方案:手动展开嵌套列(不推荐)

如果你一定要用step_mutate()结合model.matrix(),可以配合unnest_wider()将嵌套的矩阵列拆分为独立列,但这种方式不如专门的样条步骤简洁,且容易引入额外问题:

alt_rec <- recipe(mpg ~ ., data = mtcars) %>%
  step_mutate(
    # 将model.matrix结果转换为tibble,方便后续展开
    splines = as_tibble(model.matrix(~ isp(disp, df=5) - 1))
  ) %>%
  # 展开嵌套的splines列
  unnest_wider(splines)

bake(prep(alt_rec), new_data = NULL) %>% head()

总结

优先使用step_spline_is(),它是tidymodels官方推荐的样条特征生成方式,能更好地与其他预处理步骤兼容,且无需手动处理嵌套问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:32:11