You need to enable JavaScript to run this app. caret包构建nnet分类器时自定义tuneGrid未生效问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

caret包构建nnet分类器时自定义tuneGrid未生效问题咨询

问题根因

这不是caret包的bug,属于代码书写疏漏,核心原因是R语言对函数参数名的大小写识别强敏感,你写错了train()函数的自定义网格参数名。

  • train()函数官方定义的自定义调参网格参数是驼峰格式的tuneGrid,你在代码里写的是全小写的tunegrid,这个命名完全不被函数识别。
  • 当函数接收不到合法的tuneGrid入参时,会自动忽略你传入的无效参数,直接调用caret内置的nnet默认调参网格执行训练,最终就出现了实际调参取值(仅遍历size=1/3/5、decay=0/1e-4/0.1共9组组合)和你自定义的32组参数范围完全不匹配的现象。
修正方法

将代码里的参数名调整为正确的驼峰格式即可,修正后的代码如下:

nnet_grid <- expand.grid(
  .decay = c(0.5, 0.1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7),
  .size = c(3, 5, 10, 20)
)

features.nn <- train(
  label ~ .,
  method     = "nnet",
  trControl  = trControl,
  data       = features,
  tuneGrid   = nnet_grid,  # 修正此处参数名的大小写写错问题
  verbose    = FALSE
)

额外提示:nnet模型对输入特征的尺度敏感度极高,建议在train()函数中补充preProcess = c("center", "scale")参数,对特征做标准化后再开展训练,避免模型因特征数值范围差异过大出现收敛异常、准确率偏低的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 23:45:06