1、神经网络拟合函数的原理及流程
神经网络拟合函数是一种基于人工神经元之间相互连接的模型,用来拟合复杂的非线性函数关系。其原理是通过多层次的神经元网络,每一层神经元通过激活函数将输入信号加权求和后输出,经过多次迭代优化权值,使得网络输出与实际值误差最小化。
流程如下:
- 定义神经网络结构:包括输入层、隐藏层、输出层的神经元数量,选择激活函数、损失函数等网络参数。
- 初始化权重和偏置:随机初始化神经元之间的连接权重和偏置值。
- 前向传播计算:输入训练数据,通过输入层逐层传播计算每一层神经元的输出。
- 计算损失函数:将网络输出与真实标签值计算损失,评估网络拟合效果。
- 反向传播更新参数:根据损失函数反向传播误差,调整权值和偏置。采用梯度下降或其他优化算法更新参数。
- 重复迭代训练:循环进行步骤3-5,直到损失函数收敛或达到最大训练轮数。
- 模型测试和预测:使用训练好的神经网络模型进行测试数据验证和未知数据预测。
通过上述流程,神经网络可以拟合复杂的非线性函数关系,并在训练数据集上获得良好的拟合效果
2、 神经网络拟合函数的体脂估计说明
1)解决问题
函数拟合神经网络,基于解剖学测量值来估计体脂率
2)网络构建
构建一个神经网络,该网络可以估计通过 13 个身体属性进行描述的人的体脂率
3)实验参数
年龄(岁)/重量(磅)/身高(英寸)/颈围 (cm)/胸围 (cm)/腹围 (cm)/臀围 (cm)/大腿围 (cm)/膝围 (cm)/踝围 (cm)/上臂(伸展)围 (cm)/前臂围 (cm)/腕围 (cm)
4)整体说明
是输入与相关目标输出匹配的拟合问题,希望所创建的神经网络不仅可以根据已知输入估计已知目标,还能泛化成针对未被用于设计解决方案的输入准确估计输出。
神经网络非常擅长处理函数拟合问题。具有足够元素(称为神经元)的神经网络可以以任意准确度拟合任何数据。它们特别适合处理非线性问题。鉴于真实情况(如体脂增加)的非线性特性,神经网络是处理此问题的优选方案。
十三个身体属性将作为神经网络的输入,体脂率将成为目标。该网络将设计为使用体脂率已知的人体的解剖学数据进行训练以生成目标估值。
3、准备数据
说明
通过将数据组织成两个矩阵(输入矩阵 X 和目标矩阵 T)来为神经网络设置函数拟合问题的数据。
输入矩阵的每个第 i 列都将有十三个元素,表示一个体脂率已知的人体。
目标矩阵的每个对应列都将有一个元素,表示体脂率。
1)加载数据集
代码
[X,T] = bodyfat_dataset;
2)查看输入 X 和目标 T 的大小
说明:X 和 T 都有 252 列。这表示 252 个体型(输入)和相关体脂率(目标)。输入矩阵 X 有十三行,表示十三个属性。
代码
size(X)
size(T)
4、使用神经网络拟合函数
1)创建一个学习估计体脂率的神经网络。
说明:神经网络以随机初始权重开始,因此该示例的结果在每次运行时都会略有不同
代码
setdemorandstream(491218382)
2)具有 15 个神经元的单隐藏层
说明:
双层(即,一个隐藏层)前馈神经网络可以拟合任何输入-输出关系,前提是隐藏层中有足够的神经元。非输出层称为隐含层。
尝试具有 15 个神经元的单隐藏层。一般情况下,问题越困难,需要的神经元和层就越多。问题越简单,需要的神经元就越少。
输入和输出的大小为 0,因为网络尚未配置成与我们的输入数据和目标数据相匹配。
代码
net = fitnet(15);
view(net)
视图效果
1)开始训练
说明:样本自动分为训练集、验证集和测试集。训练集用于对网络进行训练。只要网络针对验证集持续改进,训练就会继续。测试集提供完全独立的网络准确度测量。
神经网络训练工具显示正在接受训练的网络和用于训练该网络的算法。它还显示训练过程中的训练状态以及停止训练的条件(以绿色突出显示)。
底部的按钮用于打开有用的绘图,这些图可以在训练期间和训练后打开。算法名称和绘图按钮旁边的链接可打开有关这些主题的文档。
代码
[net,tr] = train(net,X,T);
试图效果
2) 网络性能的改善
说明:
性能以均方误差衡量,并以对数刻度显示。随着网络训练的加深,均方误差迅速降低。
绘图会显示训练集、验证集和测试集的性能。最终网络是针对验证集性能最好的网络。
代码
figure(1)
plotperform(tr)
视图效果
5、测试神经网络
说明:
测试样本测量经过训练的神经网络的均方误差。能够了解网络在应用于真实数据时表现如何。
1)均方误差代码
testX = X(:,tr.testInd);
testT = T(:,tr.testInd);
testY = net(testX);
perf = mse(net,testT,testY)
2)回归图
说明:
衡量神经网络数据拟合程度的另一个方法是回归图,回归图显示了根据相关目标值绘制的实际网
络输出。如果网络已学会很好地拟合数据,则此输出-目标关系的线性拟合线与图边界的交点应该在左下角和右上角附近。如果不是这样,则建议进一步进行训练,或训练具有更多隐藏神经元的网络。
代码
Y = net(X);
figure(2)
plotregression(T,Y)
视图效果
3)误差直方图
说明:
衡量神经网络数据拟合程度的第三个方法是误差直方图。该图可显示误差大小的分布方式。通常,大多数误差接近于零,很少有误差大幅偏离。
代码
e = T - Y;
figure(3)
ploterrhist(e)
视图效果
7、总结
在MATLAB中使用神经网络进行体脂估计的步骤可以总结如下:
-
数据准备:准备包含个人生物特征数据(如身高、体重、腰围等)和对应的体脂率数据的训练集和测试集。
-
数据预处理:对数据进行标准化处理,使得数据具有相似的尺度和分布,有利于神经网络的训练。
-
创建神经网络模型:使用MATLAB的神经网络工具箱中的函数创建一个多层感知器(MLP)神经网络模型,并定义模型的结构、激活函数等参数。
-
训练神经网络:使用训练集对神经网络进行训练,通过反向传播算法不断调整网络权重和偏置,使得网络能够拟合输入特征与体脂率之间的非线性关系。
-
模型评价:使用测试集评价训练好的神经网络模型的性能,可以计算均方误差(MSE)等指标评估模型的拟合效果。
-
预测体脂率:使用训练好的神经网络模型对新的个人生物特征数据进行预测,得到对应的体脂率估计值。
-
结果分析:分析神经网络模型的预测结果,可以进一步优化模型参数或者增加数据特征,提升体脂率的估计准确度。
总的来说,基于MATLAB的神经网络拟合函数的体脂估计可以通过数据准备、神经网络模型构建、训练优化、模型评价和预测等步骤完成,为体脂率估计提供一种有效的方法。
8、源码
代码
%% 基于神经网络拟合函数的体脂估计
%说明:函数拟合神经网络,基于解剖学测量值来估计体脂率
%构建一个神经网络,该网络可以估计通过 13 个身体属性进行描述的人的体脂率
%参数:年龄(岁)重量(磅)身高(英寸)颈围 (cm)胸围 (cm)腹围 (cm)臀围 (cm)大腿围 (cm)膝围 (cm)踝围 (cm)上臂(伸展)围 (cm)前臂围 (cm)腕围 (cm)
%是输入与相关目标输出匹配的拟合问题,希望所创建的神经网络不仅可以根据已知输入估计已知目标,还能泛化成针对未被用于设计解决方案的输入准确估计输出。
%神经网络非常擅长处理函数拟合问题。具有足够元素(称为神经元)的神经网络可以以任意准确度拟合任何数据。它们特别适合处理非线性问题。鉴于真实情况(如体脂增加)的非线性特性,神经网络是处理此问题的优选方案。
%十三个身体属性将作为神经网络的输入,体脂率将成为目标。
%该网络将设计为使用体脂率已知的人体的解剖学数据进行训练以生成目标估值。
%% 准备数据
%说明:通过将数据组织成两个矩阵(输入矩阵 X 和目标矩阵 T)来为神经网络设置函数拟合问题的数据。
%输入矩阵的每个第 i 列都将有十三个元素,表示一个体脂率已知的人体。
%目标矩阵的每个对应列都将有一个元素,表示体脂率。
%加载数据集
[X,T] = bodyfat_dataset;
%查看输入 X 和目标 T 的大小。
%X 和 T 都有 252 列。这表示 252 个体型(输入)和相关体脂率(目标)。输入矩阵 X 有十三行,表示十三个属性。
size(X)
size(T)
%% 使用神经网络拟合函数
%创建一个学习估计体脂率的神经网络。
%神经网络以随机初始权重开始,因此该示例的结果在每次运行时都会略有不同
setdemorandstream(491218382)
%双层(即,一个隐藏层)前馈神经网络可以拟合任何输入-输出关系,前提是隐藏层中有足够的神经元。非输出层称为隐含层
%尝试具有 15 个神经元的单隐藏层。一般情况下,问题越困难,需要的神经元和层就越多。问题越简单,需要的神经元就越少。
%输入和输出的大小为 0,因为网络尚未配置成与我们的输入数据和目标数据相匹配。
net = fitnet(15);
view(net)
%开始训练
%样本自动分为训练集、验证集和测试集。训练集用于对网络进行训练。只要网络针对验证集持续改进,训练就会继续。测试集提供完全独立的网络准确度测量。
%神经网络训练工具显示正在接受训练的网络和用于训练该网络的算法。它还显示训练过程中的训练状态以及停止训练的条件(以绿色突出显示)。
%底部的按钮用于打开有用的绘图,这些图可以在训练期间和训练后打开。算法名称和绘图按钮旁边的链接可打开有关这些主题的文档。
[net,tr] = train(net,X,T);
%性能以均方误差衡量,并以对数刻度显示。随着网络训练的加深,均方误差迅速降低。
%绘图会显示训练集、验证集和测试集的性能。最终网络是针对验证集性能最好的网络。
%训练过程中网络性能的改善情况
figure(1)
plotperform(tr)
%% 测试神经网络
%测试样本测量经过训练的神经网络的均方误差。能够了解网络在应用于真实数据时表现如何。
testX = X(:,tr.testInd);
testT = T(:,tr.testInd);
testY = net(testX);
perf = mse(net,testT,testY)
%衡量神经网络数据拟合程度的另一个方法是回归图,回归图显示了根据相关目标值绘制的实际网
%络输出。如果网络已学会很好地拟合数据,则此输出-目标关系的线性拟合线与图边界的交点应该在左下角和右上角附近。
%如果不是这样,则建议进一步进行训练,或训练具有更多隐藏神经元的网络。
%回归图
Y = net(X);
figure(2)
plotregression(T,Y)
%衡量神经网络数据拟合程度的第三个方法是误差直方图。该图可显示误差大小的分布方式。通常,大多数误差接近于零,很少有误差大幅偏离。
%误差直方图
e = T - Y;
figure(3)
ploterrhist(e)
标签:cm,训练,43,网络,神经网络,matlab,拟合,体脂,体脂率
From: https://blog.csdn.net/XU157303764/article/details/139744447