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

使用brulee训练神经网络时参数变更但预测结果近乎一致的求助

解决brulee神经网络预测结果一致的问题

以下是针对你遇到的预测结果几乎相同问题的排查和解决方向:

1. 优先处理特征标准化

神经网络对输入特征的尺度极度敏感,尤其是使用relu激活函数时,若特征量级差异过大,极易导致神经元输出饱和,最终模型输出趋于一致。

  • 对训练和测试特征做标准化处理,确保特征均值为0、方差为1:
    # 标准化训练特征
    x_train <- as.matrix(data_train[, 2:ncol(data_train)])
    x_train_scaled <- scale(x_train)
    
    # 用训练集的均值和标准差标准化测试集(避免数据泄露)
    x_test <- as.matrix(data_test[, 2:ncol(data_test)])
    x_test_scaled <- scale(x_test, 
                           center = attr(x_train_scaled, "scaled:center"), 
                           scale = attr(x_train_scaled, "scaled:scale"))
    
    # 重新拟合模型
    fit <- brulee_mlp(x = x_train_scaled,
                      y = data_train$cc,
                      hidden_units = hidden_units,
                      epochs = epochs, dropout = dropout, learn_rate = learn_rate, activation = activation,
                      penalty = penalty, validation = validation)
    
    # 预测并绘图
    predict(fit, x_test_scaled) %>%
      bind_cols(data_test) %>%
      ggplot(aes(x = .pred, y = cc)) +
      geom_abline(col = "green") +
      geom_point(alpha = .3) +
      lims(x = c(0, 1.0), y = c(0, 1.0)) +
      coord_fixed(ratio = 1)
    

2. 调整模型参数

当前参数设置可能限制了模型的学习能力:

  • 迭代次数:50轮可能不足以让模型收敛,尝试将epochs调整为200或500。
  • 学习率:0.01可能过高或过低,尝试测试0.1、0.001等不同值,观察损失变化。
  • 隐藏单元数:仅4个隐藏单元可能无法捕捉数据的复杂关系,尝试增加到8、16或32。
  • 正则化参数:penalty=0.01惩罚力度过大,会限制参数更新,先尝试设为0或0.0001;dropout=0.01几乎无正则化效果,若不是过拟合问题,可先设为0。

3. 确认任务类型匹配

从目标变量cc的0-1范围来看,这应该是二分类任务,需确保brulee_mlp使用正确的损失函数:

  • 在拟合时指定loss = "logistic",明确任务为二分类:
    fit <- brulee_mlp(x = x_train_scaled,
                      y = data_train$cc,
                      hidden_units = hidden_units,
                      epochs = 200,
                      learn_rate = 0.001,
                      activation = "relu",
                      penalty = 0,
                      validation = 0.8,
                      loss = "logistic")
    

4. 检查数据分布

  • 查看目标变量cc的分布:
    table(data_train$cc)
    hist(data_train$cc)
    
    如果大部分样本的cc值集中在某个区间(比如接近0.5),模型可能倾向于输出均值,导致预测结果趋同,这种情况下需要检查数据本身是否存在问题,或尝试增加模型复杂度。

5. 监控训练过程

  • 绘制训练损失曲线,观察模型是否在学习:
    plot(fit)
    
    如果损失曲线一直平坦,说明模型没有更新参数,需进一步排查学习率、数据预处理等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:02:23