这个例子说明了一个函数拟合的神经网络如何根据测量结果来估计脂肪百分比。
在这个例子中,我们试图建立一个神经网络来估计一个人的脂肪百分比,这个人由13个物理属性描述。
问题:估计脂肪百分比
- 年龄
- 体重
- 身高
- 颈围
- 胸围
- 腹部周长
- 臀围
- 大腿周长
- 膝盖周长
- 踝关节周长
- 肱二头肌(伸展)周长
- 前臂周长
- 腕围
可下载资源
这是一个拟合问题的例子,其中输入与相关的目标输出相匹配,我们希望创建一个神经网络,它不仅可以估计已知的目标,给定已知的输入,而且还可以泛化,来准确估计未知数据的结果。
为什么是神经网络?
来源:科技日报 赵文红
肥胖是世界卫生组织确定的十大慢性疾病之一,而中国的肥胖现状更为严峻。世界卫生组织的最新报告显示,在我国现有近9000万肥胖者,这一数字已超越美国居世界首位。肥胖常与心血管、高血脂、糖尿病等疾病相伴,更增加了对人体健康的威胁。然而,怎样才算肥胖,如何对肥胖进行更确切的评估呢?2016年第3期《前沿科学》刊载了清华大学体育与健康科学研究中心主任张冰教授等的论文“基于BP神经网络的体脂百分比评估模型研究”,对这一问题进行了详细解读。
张冰告诉记者,通常人体体重可划分为两部分,脂肪组织的重量和去脂肪重量。人体成分是指人体中的脂肪重量和去脂体重占体重的比例,而用来评价一个人的身体成分最重要的指数就是体脂百分比或称脂肪率,即脂肪重量占人体体重的百分比。
近几十年随着科学技术的发展,用来进行人体成分评测的方法和技术越来越丰富。据张冰介绍,评估人体成分的直接方法是通过尸体解剖进行分析,其他的评价方法都是间接的。由于尸体的研究数量有限,所以许多身体成分的评价技术可以被称为双重间接测试,也就是通过另一个间接测试方法、误差以及随后的测量数据进行估测。如此间接的结果,大多数是用来对人体成分进行估测或预测。而估测的方法也从简单易行的方法到非常复杂昂贵的实验室测试等,也可以按照测试人员的技能和仪器设备两个参数进行分类。比较复杂的测试方法有实验室的水下称重法、双能X射线测试法、总体电导率或阻抗、核磁共振成像等,而比较简单的方法有皮褶测试法、围度测试法、生物电阻抗等。其中水下称重密度测试方法历来被认为是人体成分测量的金标准,其主要通过水下人体重量与人体密度密切相关的原理来进行估测的。以上检测测量设备对环境、成本等要求较高,所以通过人体测量学的方法对青少年和成人的身体成分进行评测显得尤为重要。
“人体测量方法可以用来评估身体形态及身体成分的比例,具体方法包括身高、体重、身材比例、围度、皮褶厚度、骨骼围度和长度等。”张冰说。通过筛查,选定了研究样本量在1000人以上的三个国外经典体脂百分比预测方程作为比较对象。本次测试在实验室采用韩国Inbody3.0测试仪器,主要以大学生及大学附近的社区居民为主要对象。总计测试了1000人,其中男女各500人,年龄在20岁至76岁之间,体质指数(BMI)在16.2—42.7 kg/m2之间。进一步线性相关分析发现,三个公式同Inbody3.0仪器测试均呈现出显著的相关关系。相比原公式推导时的验证的相关系数,本次实验数据均达到或超过了原实验的相关系数,可以看出三个经典方程对于估测体脂百分比均有较好的效度。采用1000人的Inbody3.0仪器检测数据,输入指标为年龄、性别、身高、体重和BMI指标,利用BP人工神经网络进行建模实现更加精确的评估。
张冰说,人脑可以看作是一个高度复杂的、非线性的和并行的信息处理系统。神经元是人脑神经系统的最基本结构单元,当一个神经元被激活后,一个信号在该神经元的轴突传递,最终经过该神经元的轴突末梢将信号传递给其他神经元或神经。通过刺激传递,人脑能完成许多高效计算机也难以完成的感知识别任务。
什么是人工神经网络呢?张冰说:“随着神经生物学、生理学的发展,人们试图通过模仿人脑的一些基本的信息处理方法建立模型,这种模仿大脑的功能称为人工神经网络。”如果从自适应机器的视角对神经网络进行分析,可以将神经网络看作是有简单处理单元构成的大规模并行分布式处理器,其天然地具备存储经验知识和使之可用的特性。神经网络同人脑主要有两个方面比较相似,一是通过学习从外界环境中获取知识,二是互联神经元的连接强度及突触权值用于存储所获得的知识。张冰认为,尽管不是所有问题都适合采用神经网络来解决,但神经网络对于许多问题还是非常好的解决方法之一。相较于传统程序算法,神经网络可以实现相同功能而用更少的代码。神经网络对于求解一些难以用固定模式解决的问题比较适合,如模式识别、分组分类、预测和数据挖掘等。单层感知器只能解决线性可分的问题,而实际应用过程中大量的问题都属于线性不可分问题,而采用多层人工神经网络可以实现复杂的预测及分类任务。
目前人工神经网络至少已经有几十种模型,例如BP神经网络、RBF神经网络、ART神经网络等。其中应用最多、范围最广的应属BP算法,其采用非循环多级网络的训练算法,虽收敛速度较慢,但因其具有广泛的适用性,使得它自从被提出后很快就成为应用最为广泛的多层网络训练算法。可以说BP算法的出现,弥补了多层人工神经网络没有算法的缺点。
张冰指出,采用BP人工神经网络经过数万次的反复分析、训练,计算,确定了输入指标为年龄、性别、身高和BMI2,采用最大错误率为万分之一,学习率0.02,记忆率0.7,训练次数2万次得出结果符合预期要求,将经典回归方程的偏倚程度缩小了0.9,评估准确性在其基础上提高了7.6%。总体上来看,通过BP人工神经网络模型估算方法比前面的三个估测方程更加理想,可以更确切的进行体脂百分比的评估。
神经网络在函数拟合问题上非常出色。一个有足够多的元素(称为神经元)的神经网络可以以任意的精度拟合任何数据。它们特别适合于解决非线性问题。鉴于现实世界的非线性性质,如身体脂肪的增加,神经网络是解决该问题的不错方法。
十三个物理属性将作为神经网络的输入,而体脂百分比将是目标。
该网络通过使用已经知道体脂百分比的人体数据来建立模型,来训练它产生目标值。
准备数据
函数拟合的数据是两个矩阵,即输入矩阵X和目标矩阵T。
输入矩阵的每一列将有13个元素,代表一个已知脂肪百分比的身体数据。
目标矩阵的每一对应列将有一个元素,代表脂肪百分比。
加载数据集后,我们可以查看输入X和目标变量T的大小。
请注意,X和T都有252列。这些代表了252种体质(输入变量)和相关的体脂百分比(目标变量)。
输入矩阵X有13行,代表13个属性。目标矩阵T只有一行,因为对于每个例子我们只有一个期望的输出,即脂肪百分比。
size(X)
size(T)
用神经网络拟合函数
下一步是创建一个神经网络,它将学习估计脂肪百分比。
由于神经网络以随机的初始权重开始,这个例子每次运行的结果都会略有不同。设置随机种子是为了避免这种随机性。
setdemorandstream(8382)
两层(即一个隐藏层)前馈神经网络可以拟合任何输入-输出关系,只要隐藏层有足够的神经元。不属于输出层的层被称为隐藏层。
在这个例子中,我们将尝试使用由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)
这个例子说明了如何设计一个神经网络,从身体特征来估计脂肪百分比。
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!