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

如何在R的caret包train函数中使用GAM的tensor交互函数

在caret的train函数中使用GAM的样条函数与Tensor交互项

要在caret::train()中结合GAM的样条函数s()和张量交互函数ti(),核心是直接在模型公式中显式调用mgcv包的这些函数(因为caret的method = "gam"底层依赖mgcv::gam()),具体实现如下:

完整修改代码

library(caret)
library(mgcv)  # 必须加载,s()和ti()是该包的核心函数

# 生成数据(简化冗余处理)
set.seed(1)
df <- data.frame(Y=rnorm(100), x1=rnorm(100),x2=rnorm(100), x3=rnorm(100))

# 划分训练集和测试集(用响应变量Y划分更合理)
training.samples <- createDataPartition(df$Y, p = 0.8, list = FALSE)
train_df  <- df[training.samples, ]
test_df <- df[-training.samples, ]

# 设置交叉验证控制
train.control <- trainControl(method = "repeatedcv", number = 10, repeats = 2)

# 显式在公式中定义GAM的样条项和张量交互项
fit_train <- train(
  Y ~ s(x1) + s(x2) + s(x3) + ti(x1, x2),
  data = train_df,
  method = "gam",
  trControl = train.control
)

# 训练集与测试集预测
Prediction_train <- as.numeric(predict(fit_train, newdata = train_df, type = "raw"))  
Prediction_test  <- as.numeric(predict(fit_train, newdata = test_df, type = "raw"))

关键说明

  • 依赖mgcv包:s()和ti()是mgcv包的专属函数,caret的gam方法只是封装了mgcv::gam(),因此必须提前加载该包。
  • 公式需自定义GAM结构:当需要添加张量交互这类自定义GAM项时,不能像线性模型那样仅写变量名,必须直接在公式中使用s()、ti()等函数,caret会自动将这些结构传递给底层的mgcv::gam()拟合。
  • 数据划分优化:原代码用自变量x1划分数据集,建议改为用响应变量Y,能保证训练集和测试集的响应变量分布更均衡。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:25:17