【MATLAB深度学习工具箱】学习笔记--体脂估计Body Fat Estimation

本文主要是介绍【MATLAB深度学习工具箱】学习笔记--体脂估计Body Fat Estimation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

本示例展示一个函数拟合神经网络如何根据解剖学测量结果估计体脂。

【注:关键词:多维数据 函数拟合 神经网络】

问题描述

在本例子中根据如下13种身体特征评估体脂。【注:具体的属性特征对学习此解决问题的逻辑影响并不大,知道是许多相关或不相关的多维度特征即可】

  • Age (years)

  • Weight (lbs)

  • Height (inches)

  • Neck circumference (cm)

  • Chest circumference (cm)

  • Abdomen circumference (cm)

  • Hip circumference (cm)

  • Thigh circumference (cm)

  • Knee circumference (cm)

  • Ankle circumference (cm)

  • Biceps (extended) circumference (cm)

  • Forearm circumference (cm)

  • Wrist circumference (cm)

为何使用神经网络? 

神经网络擅长于函数拟合问题。包含足够多神经元的神经网络可以以任意精度逼近任意数据,因此尤其适用于非线性问题。【注:拟合本身不是目的,发现因素背后的规律才是目的】

输入:13项身体特征数据;

输出:体脂率

数据准备

导入数据的方式如下:

[X,T] = bodyfat_dataset;

其中:

X为13项身体特征数据,共252行;

T为1项对应的体脂率,共252行。

>> size(X)
size(T)

ans =
    13   252
ans =
     1   252

 


【注:拿到数据后的第一反应肯定不是直接就套用某一种方法开始拟合,首先需要观察,观察数据和预期结果之间的对应关系,将主要因素心中有数】

 以下为13项因素与体脂率的对应关系。

因素1如下,直观关联性不明显。

 因素2如下,因素2的关联性比因素1明显清晰。

 因素3如下,因素3的数据大部分集中于X∈70±5的范围内,但是在X≈30的地方有一个很特殊的点,极有可能是错误数据,看后续神经网络中如何区分错误数据。

 因素4如下, 数据大致趋势和因素2接近。

因素5如下,因素5的趋势与因素4接近。

 因素6如下,因素6在X<120时规律性较好,但是在X>120后点数较少且规律性不明显。

 因素7如下,因素7与因素6规律非常接近。  

因素8如下,因素5/6/7/8规律均接近。 

 因素9如下,因素5/6/7/8/9规律接近。

 因素10如下,在X>28之后出现了部分规律反常的点。

 因素11如下,因素5/6/7/8/911规律接近。 

 因素12如下,因素12整体散差较大,规律性不明显。

 因素13如下,因素13整体散差也较大,规律性不明显。

 综合以上13幅图,可以基本归纳如下特点:

(1)大部分因素与体脂率正相关;

(2)部分因素散差较大,规律不明显;

(3)个别因素中有坏点。

后续评估采用神经网络进行拟合的效果。


采用神经网络进行函数拟合

神经网络拟合需要随机的初始权重,每次的运行结果可能略有差异。可以通过设置随机数种子的方法让每次均采用相同的过程。

setdemorandstream(491218382)

在隐藏层神经网络足够多的情况下,两层前向型神经网络(其中一层为隐藏层)可以拟合任意的输入-输出关系。非输出层的各层称为隐藏层。

本示例中隐藏层神经元个数为15个。一般而言,问题越复杂,需要的神经元个数越多,层数也可能越多。

输入层和输出层的sizes为0,因为网络还没有得到配置去匹配本例子中的输入和输出数据。在网络训练好之后,将会进行配置。

net = fitnet(15);
view(net)

 目前的网络已经可以进行训练。在本示例中,会自动对训练集training set、验证集validation set和测试集test set进行划分。其中,训练集的目的是对网络进行训练。训练的结果将使得网络对验证集的数据可以进行拟合。测试集独立地对训练后的网络拟合精度进行评估。

[net,tr] = train(net,X,T);
nntraintool
nntraintool('close')

运行后得到:

 Performance:

为了显示在训练过程中网络拟合能力是如何得到提高的,点击“Performance”按钮,得到下图。

误差的测度是均方误差mean squared error(MSE),用对数作图。训练初期,MSE迅速下降。【注:由于采用的是和MATLAB帮助文件中相同的随机数种子,得到的图片与帮助文件中的图片完全一致。】

最终得到的网络是在验证集中表现最好的网络,如图中绿色线最低点处圆圈位置。

 Training State:

 对神经网络进行测试

【注:帮助文件中采用了脚本进行出图,而在nntraintool中直接点击也可以得到相关结果。】

 Error Histogram:误差直方图

 Regression:回归分析

 

这篇关于【MATLAB深度学习工具箱】学习笔记--体脂估计Body Fat Estimation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/303096

相关文章

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499