MATLAB中用BP神经网络预测人体脂肪百分比数据

简介: MATLAB中用BP神经网络预测人体脂肪百分比数据

这个例子说明了一个函数拟合的神经网络如何根据测量结果来估计脂肪百分比(BFP) 。

问题:估计脂肪百分比

在这个例子中,我们试图建立一个神经网络来估计一个人的脂肪百分比,这个人由13个物理属性描述。

  • 年龄
  • 体重
  • 身高
  • 颈围
  • 胸围
  • 腹部周长
  • 臀围
  • 大腿周长
  • 膝盖周长
  • 踝关节周长
  • 肱二头肌(伸展)周长
  • 前臂周长
  • 腕围

这是一个拟合问题的例子,其中输入与相关的目标输出相匹配,我们希望创建一个神经网络,它不仅可以估计已知的目标,给定已知的输入,而且还可以泛化,来准确估计未知数据的结果。

为什么是神经网络?

神经网络在函数拟合问题上非常出色。一个有足够多的元素(称为神经元)的神经网络可以以任意的精度拟合任何数据。它们特别适合于解决非线性问题。鉴于现实世界的非线性性质,如身体脂肪的增加,神经网络是解决该问题的不错方法。

十三个物理属性将作为神经网络的输入,而体脂百分比将是目标。

该网络通过使用已经知道体脂百分比的人体数据来建立模型,来训练它产生目标值。

准备数据

函数拟合的数据是两个矩阵,即输入矩阵X和目标矩阵T。

输入矩阵的每一列将有13个元素,代表一个已知脂肪百分比的身体数据。

目标矩阵的每一对应列将有一个元素,代表脂肪百分比。

加载数据集后,我们可以查看输入X和目标变量T的大小。

请注意,X和T都有252列。这些代表了252种体质(输入变量)和相关的体脂百分比(目标变量)。

输入矩阵X有13行,代表13个属性。目标矩阵T只有一行,因为对于每个例子我们只有一个期望的输出,即脂肪百分比。

size(X)
size(T)

用神经网络拟合函数

下一步是创建一个神经网络,它将学习估计脂肪百分比。

由于神经网络以随机的初始权重开始,这个例子每次运行的结果都会略有不同。设置随机种子是为了避免这种随机性。

setdemorandstream(491)

两层(即一个隐藏层)前馈神经网络可以拟合任何输入-输出关系,只要隐藏层有足够的神经元。不属于输出层的层被称为隐藏层。

在这个例子中,我们将尝试使用由15个神经元组成的单一隐藏层。一般来说,更难的问题需要更多的神经元,也许需要更多的层。较简单的问题则需要较少的神经元。

输入和输出的大小为0,因为神经网络还没有被配置为与我们的输入和目标数据相匹配。将在网络被训练时进行。

net = fitnet(15);
view(net)

现在,网络已经准备好被训练了。样本被自动划分为训练集、验证集和测试集。训练集被用来训练网络。只要网络在验证集上继续改进,训练就会继续。测试集提供了一个完全独立的网络准确性的衡量标准。

神经网络训练工具显示正在训练的网络和用于训练的算法。它还显示了训练期间的训练状态,停止训练的标准将以绿色突出显示。

底部的按钮可以打开有用的图表,这些图表可以在训练中和训练后打开。算法名称和绘图按钮旁边的链接可以打开关于这些主题的文档。

train(net,X,T);

要看网络的性能在训练中是如何提高的,可以点击训练工具中的 "性能 "按钮。

性能是以均方误差来衡量的,并以对数比例显示。随着网络的训练,误差迅速减小。训练集、验证集和测试集的性能分别显示。最终的网络是在验证集上表现最好的网络。

plotperform(tr)

测试神经网络

现在可以测量训练后的神经网络的均方误差与测试样本的关系。我们可以了解该网络在应用于真实数据时的表现如何。

mse(net,testT,testY)

另一个衡量神经网络对数据拟合程度的方法是回归图。这里的回归图是在所有样本中绘制的。

回归图显示了实际网络输出与目标值的关系。如果网络已经学会了很好地拟合数据,那么这个输出-目标关系的线性拟合应该与图的左下角和右上角紧密相交。

如果不是这样,那么进一步的训练,或者训练一个有更多隐藏神经元的网络。

plot(T,Y)

另一个衡量神经网络对数据的拟合程度的方法是误差直方图。这显示了误差大小是如何分布的。通常情况下,大多数误差接近零,很少有误差远离零。

e = T - Y;
hist(e)

这个例子说明了如何设计一个神经网络,从身体特征来估计脂肪百分比。


相关文章
|
22天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
12天前
|
机器学习/深度学习 算法 Python
基于BP神经网络的金融序列预测matlab仿真
本项目基于BP神经网络实现金融序列预测,使用MATLAB2022A版本进行开发与测试。通过构建多层前馈神经网络模型,利用历史金融数据训练模型,实现对未来金融时间序列如股票价格、汇率等的预测,并展示了预测误差及训练曲线。
|
10天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
29天前
|
机器学习/深度学习 算法 关系型数据库
基于PSO-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目展示了利用粒子群优化(PSO)算法优化支持向量机(SVM)参数的过程,提高了分类准确性和泛化能力。包括无水印的算法运行效果预览、Matlab2022a环境下的实现、核心代码及详细注释、操作视频,以及对PSO和SVM理论的概述。PSO-SVM结合了PSO的全局搜索能力和SVM的分类优势,特别适用于复杂数据集的分类任务,如乳腺癌诊断等。
|
23天前
|
弹性计算 安全 容灾
阿里云DTS踩坑经验分享系列|使用VPC数据通道解决网络冲突问题
阿里云DTS作为数据世界高速传输通道的建造者,每周为您分享一个避坑技巧,助力数据之旅更加快捷、便利、安全。本文介绍如何使用VPC数据通道解决网络冲突问题。
77 0
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
|
4月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
61 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
|
4月前
|
机器学习/深度学习 Linux TensorFlow
【Tensorflow+keras】用代码给神经网络结构绘图
文章提供了使用TensorFlow和Keras来绘制神经网络结构图的方法,并给出了具体的代码示例。
63 0
下一篇
DataWorks