【问题标题】:How to do regularization in Matlab's NN toolbox如何在 Matlab NN 工具箱中进行正则化
【发布时间】:2019-09-25 13:51:34
【问题描述】:

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

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

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

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

问题1:我的训练性能总是低于测试性能指标,即perf_Train = 0.0867perf_Test = 0.567

这是过拟合还是欠拟合?

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

【问题讨论】:

    标签: matlab neural-network deep-learning regression prediction


    【解决方案1】:

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

    为了调节,可以这样设置:

    net.performParam.regularization = 0.5;
    

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

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

    【讨论】:

    • 感谢您提供信息和文档链接。我有几个cmets,你能澄清一下吗? (1) 当数据集分为训练集、验证集和测试集时,通常会根据验证集报告过拟合或欠拟合。但是,我无法找出过拟合或欠拟合,因为 Matlab 会自动将训练分为训练和验证。因此,根据看不见的测试数据报告过拟合或欠拟合是否合法?
    • (2) 我认为如果验证错误> 训练错误,我们有过拟合的情况。在我的例子中,测试错误 > 训练错误,那么过拟合的概念是否也适用于测试错误集? (您提到它是欠拟合或过拟合,请检查)。
    • 对不起,你是对的,perform 函数给出了错误,我以为是相反的。因此,正如您所写,它在您的情况下过度拟合。
    • 感谢您的澄清和更正。在大多数书籍和教程中,建议将 70% 的数据用于训练,其余 30% 用于测试。但是为什么你建议使用更少的训练数据以及使用多少呢?你能解释一下吗?感谢您的时间和精力。
    • 一般来说70%就不错了,但是没有规定。您必须尝试找到最佳组合。你可以检查你的训练数据,如果有很多类似的数据,你会人为地有很好的表现。
    猜你喜欢
    • 2014-02-06
    • 1970-01-01
    • 2011-11-23
    • 2011-03-26
    • 2023-03-06
    • 2011-03-24
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多