使用神经网络拟合对数据进行拟合
此示例说明如何使用神经网络拟合训练浅层神经网络来对数据进行拟合。
使用 nftool
打开神经网络拟合。
nftool
选择数据
神经网络拟合提供了示例数据来帮助您开始训练神经网络。
要导入示例体脂数据,请选择导入 > 导入体脂数据集。您可以使用此数据集来训练神经网络,以基于各种测量值来估计人的体脂。如果您从文件或工作区导入自己的数据,则必须指定预测变量和响应变量,以及观测值位于行中还是列中。
有关导入数据的信息显示在模型摘要中。此数据集包含 252 个观测值,每个观测值有 13 个特征。响应包含每个观测值的体脂百分比。
将数据分成训练集、验证集和测试集。保留默认设置。数据拆分为:
70% 用于训练。
15% 用于验证网络是否正在泛化,并在过拟合前停止训练。
15% 用于独立测试网络泛化。
有关数据划分的详细信息,请参阅划分数据以实现最优神经网络训练。
创建网络
网络是一个双层前馈网络,其中在隐藏层有一个 sigmoid 传递函数,在输出层有一个线性传递函数。层大小值定义隐藏神经元的数量。保持默认层大小值 10。您可以在网络窗格中看到网络架构。网络图会更新以反映输入数据。在此示例中,数据有 13 个输入(特征)和一个输出。
训练网络
要训练网络,请选择训练 > 莱文贝格-马夸特法训练。这是默认训练算法,与点击训练效果相同。
对于大多数问题,都推荐使用莱文贝格-马夸特 (trainlm
) 进行训练。对于含噪问题或小型问题,贝叶斯正则化 (trainbr
) 可以获得更好的解,但代价是耗时更长。对于大型问题,推荐使用量化共轭梯度 (trainscg
),因为它使用的梯度计算比其他两种算法使用的雅可比矩阵计算更节省内存。
在训练窗格中,您可以看到训练进度。训练会一直持续,直到满足其中一个停止条件。在此示例中,训练会一直持续,直到 6 次迭代的验证误差持续增大(“满足验证条件”)。
分析结果
模型摘要包含关于每个数据集的训练算法和训练结果的信息。
您可以通过生成绘图来进一步分析结果。要对线性回归绘图,请在绘图部分中,点击回归。回归图显示关于训练集、验证集和测试集的响应(目标)的网络预测(输出)。
如果是完美拟合,则数据应沿 45 度线下降,其中网络输出等于响应。对于此问题,所有数据集的拟合效果都很不错。如果您需要更准确的结果,可以再次点击训练重新训练网络。每次训练都会采用不同网络初始权重和偏置,并且在重新训练后可以产生改进的网络。
查看误差直方图以获得网络性能的额外验证。在绘图部分中,点击误差直方图。
蓝条表示训练数据,绿条表示验证数据,红条表示测试数据。直方图可以指示离群值,这些离群值是拟合明显比大部分数据差的数据点。最好检查离群值以确定数据是否不良,或者这些数据点是否不同于数据集的其余部分。如果离群值是有效的数据点,但不同于其余数据,则网络将对这些点进行外插。您应该收集更多看起来像离群数据点的数据,并重新训练网络。
如果您对网络性能不满意,可以执行以下操作之一:
重新训练网络。
增加隐藏神经元的数量。
使用更大的训练数据集。
如果基于训练集的性能很好,但测试集的性能很差,这可能表明模型出现了过拟合。减少神经元的数量可以减少过拟合。
您还可以评估基于附加测试集的网络性能。要加载附加测试数据来评估网络,请在测试部分中,点击测试。模型摘要显示附加测试结果。您也可以生成图来分析附加测试数据结果。
生成代码
选择生成代码 > 生成简单的训练脚本以创建 MATLAB 代码,从命令行重现前面的步骤。如果您要了解如何使用工具箱的命令行功能来自定义训练过程,则创建 MATLAB 代码会很有帮助。在使用命令行函数拟合数据中,您可以更详细地研究生成的脚本。
导出网络
您可以将经过训练的网络导出到工作区或 Simulink®。您也可以使用 MATLAB Compiler™ 工具和其他 MATLAB 代码生成工具部署网络。要导出您的训练网络和结果,请选择导出模型 > 导出到工作区。
另请参阅
神经网络拟合 | 神经网络时间序列 | 神经网络模式识别 | 神经网络聚类 | trainlm
| fitnet