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

神经网络交叉验证首尾折MSE过高问题求助

小样本神经网络通胀预测的精度优化需求

我首次用Python搭建神经网络,基于通胀、平均薪资、失业率及失业人数的历史数据预测通胀走势。采用5折KFold交叉验证时,发现第1折和第5折的MSE值异常偏高,其余折的模型表现良好。

终端输出结果如下:

折1
1/1 [==============================] - 0s 197ms/step - loss: 306.7101 - accuracy: 0.0000e+00
错误:Mean Squared Error = 306.7101135253906,神经网络模型拟合效果不佳,预测结果明显错误,需重新运行模型因训练未准确执行。
折2
1/1 [==============================] - 0s 16ms/step - loss: 2.6362 - accuracy: 0.0000e+00
成功:Mean Squared Error = 2.636242389678955,神经网络模型拟合效果良好。
折3
1/1 [==============================] - 0s 15ms/step - loss: 1.9960 - accuracy: 0.0000e+00
成功:Mean Squared Error = 1.9960471391677856,神经网络模型拟合效果良好。
折4
1/1 [==============================] - 0s 15ms/step - loss: 13.9704 - accuracy: 0.1667
成功:Mean Squared Error = 13.970401763916016,神经网络模型拟合效果良好。
折5
1/1 [==============================] - 0s 16ms/step - loss: 130.8911 - accuracy: 0.0000e+00
错误:Mean Squared Error = 130.89105224609375,神经网络模型拟合效果不佳,预测结果明显错误,需重新运行模型因训练未准确执行。

我尝试过调整batch_size、epochs、网络层数、神经元数量、激活函数、学习率及折数,不仅没能解决部分折MSE偏高的问题,反而导致所有折的MSE整体上升。目前数据集仅有54组,无法扩充;此前按70/15/15划分训练/验证/测试集时,模型MSE约为20。现寻求无需扩充数据的模型精度提升方案。

相关代码片段如下:

# 定义交叉验证的折数
n_folds = 5

# 使用KFold划分训练集和测试集
kf = KFold(n_splits=n_folds)
fold = 1

# 定义模型
model = Sequential()
model.add(Dense(128, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
model.add(Dense(64, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
model.add(Dense(32, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
model.add(Dropout(0.2))
model.add(Dense(16, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
model.add(Dense(8, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
model.add(Dense(4, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
model.add(Dense(1, activation='linear'))

# 使用较低学习率编译模型
adam = Adam(learning_rate=0.001)
model.compile(loss='mean_squared_error', optimizer=adam, metrics=['accuracy'])

for train_indices, test_indices in kf.split(inputs):
    print(f"Fold {fold}")
    fold += 1
    
    # 划分训练集和测试集
    train_inputs = inputs[train_indices]
    train_targets = targets[train_indices]
    test_inputs = inputs[test_indices]
    test_targets = targets[test_indices]
    
    # 在训练集上训练模型
    history = model.fit(
        train_inputs,
        train_targets,
        epochs=400,
        batch_size=40,
        verbose=0
    )
    
    # 在测试集上评估模型
    test_loss = model.evaluate(test_inputs, test_targets)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:07:21