matlab - 如何在 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.0867
即perf_Test = 0.567
这是过拟合还是欠拟合?
问题2:如何使测试数据准确拟合?理论说,为了克服过拟合和欠拟合,我们需要做正则化。是否有任何参数需要输入到函数中,例如正则化来克服这个问题?
解决方案
这是过拟合,因为训练误差低于测试误差。我建议为您的训练设置更少的时期(迭代)或使用更少的训练数据。我还建议检查训练数据和测试数据是否是随机提取的。
对于监管,可以这样设置:
net.performParam.regularization = 0.5;
性能比取决于型号,0.5 只是一个例子。
有关更多详细信息,您可以参考下面的文档。 https://www.mathworks.com/help/deeplearning/ug/improve-neural-network-generalization-and-avoid-overfitting.html#bss4gz0-38
推荐阅读
- swift - 崩溃仅自 iOS13 以来导致,我无法重现
- excel - MS Excel - 通过分隔符将文本分隔到特定列中
- async-await - 实现 Web 控制器时异步方法的目的?
- python-3.x - 如何在 excel 文件中搜索一组输入字符串并使用 Python 返回所有匹配的行?
- c# - 实体框架 - 是否真的需要过度使用“EntityState.Unchanged”?
- html - CSS变换翻转效果,Chrome有问题
- javascript - 如何对齐yii2表单域中的文本框?
- java - 使用“提供的”依赖项编译项目
- docker - 用于 asp.net 核心项目的 Docker 容器
- docker - 通过 jenkins 用新建的镜像重启 Docker 容器(在容器中运行)