首页 > 解决方案 > 如何在 Matlab 的 NN 工具箱中进行正则化

问题描述

我的数据集有 150 个自变量和 10 个预测变量或响应。问题是找到输入和输出变量之间的映射。有 1000 个数据点,其中 70% 用于训练,30% 用于测试。如本Matlab 文档中所述,我正在使用具有 10 个隐藏神经元的前馈神经网络。我正在使用命令评估性能

perf_Train = perform(net,TrainedData',lblTrain')

YPred = net(XTest);
perf_Test = perform(net,YPred,lblTest')

这基本上给出了训练和测试的实际和预测(估计)响应之间的均方误差。我的测试数据无法正确拟合经过训练的模型,但训练数据非常适合。

问题1:我的训练表现总是低于测试表现,perf_Train = 0.0867perf_Test = 0.567

这是过拟合还是欠拟合?

问题2:如何使测试数据准确拟合?理论说,为了克服过拟合和欠拟合,我们需要做正则化。是否有任何参数需要输入到函数中,例如正则化来克服这个问题?

标签: matlabneural-networkdeep-learningregressionprediction

解决方案


这是过拟合,因为训练误差低于测试误差。我建议为您的训练设置更少的时期(迭代)或使用更少的训练数据。我还建议检查训练数据和测试数据是否是随机提取的。

对于监管,可以这样设置:

net.performParam.regularization = 0.5;

性能比取决于型号,0.5 只是一个例子。

有关更多详细信息,您可以参考下面的文档。 https://www.mathworks.com/help/deeplearning/ug/improve-neural-network-generalization-and-avoid-overfitting.html#bss4gz0-38


推荐阅读