如何在 Matlab NN 工具箱中进行正则化
How to do regularization in Matlab's NN toolbox
我的数据集有 150 个自变量和 10 个预测变量或响应变量。问题是找到输入和输出变量之间的映射。有 1000 个数据点,其中 70% 用于训练,30% 用于测试。如 Matlab document 中所述,我正在使用具有 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
我的数据集有 150 个自变量和 10 个预测变量或响应变量。问题是找到输入和输出变量之间的映射。有 1000 个数据点,其中 70% 用于训练,30% 用于测试。如 Matlab document 中所述,我正在使用具有 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