深度学习入门教程(1):用神经网络预测糖尿病病例Predict Diabetes Cases with Neural Networks

news2024/11/15 10:58:34

本深度学习入门教程是在polyu HPCStudio 启发以及资源支持下进行的,在此也感谢polyu以及提供支持的老师。

大纲(what will you learn from this project)

1:What are neural networks?
2:Why use neural networks in machine learning?
3:What is keras?
4:Flow of building a neural network model.
5:Example to build a Neural Network model to predict diabetes cases.

(1)神经网络:

模仿人脑神经网络是人工智能中的一种方法,它指导计算机以受人脑启发的方式处理数据。
它是一种称为深度学习的机器学习过程,它使用类似于人脑的分层结构中的互连节点或神经元
自然是发明之母——模仿自然的创新
在这里插入图片描述

在这里插入图片描述
发展历程:
在这里插入图片描述

在这里插入图片描述

(2)为什么在机器学习中使用神经网络:

神经网络可以帮助计算机在有限的人类协助下做出明智的决策。
这是因为他们可以通过示例(数据)学习对非线性且复杂的输入和输出数据之间的关系进行建模
可以自我训练/自我适应环境/数据的程序。

(3)Keras是什么

1Keras 是 Google 开发的用于实现神经网络的高级深度学习 API。
2它是用 Python 编写的,用于使神经网络的实现变得容易。 它还支持多个后端神经网络计算。
3更容易学习和使用。
4更简单的 API。
5后端:TensorFlow、Theano 或 CNTK其他一些用于机器学习的包。
例如。 PyTorch、TensorFlow、Theano。

(4)如何完成一个“用神经网络预测糖尿病病例”项目

步骤

  1. Collecting Data
  2. Cleaning Data and Feature Engineering
  3. Building Model
  4. Evaluating Model
  5. Deploying Model
  6. Go back to step 1 to reiterate if more data or features was found
    在这里插入图片描述

(5)数据集介绍:

The Pima Indians onset of diabetes dataset.

数据集链接,你也可以在我的Github项目仓库里找到

这是一个来自UCI机器学习库的标准机器学习数据集。它描述了皮马印第安人的五年内病历数据以及他们是否患有糖尿病。

  1. Number of times pregnant 怀孕次数
  2. Plasma glucose concentration at 2 hours in an oral glucose tolerance test 口服葡萄糖耐量试验2小时血浆葡萄糖浓度
  3. Diastolic blood pressure (mm Hg) 舒张压(毫米汞柱)
  4. Triceps skin fold thickness (mm) 肱三头肌皮褶厚度(mm)
  5. 2-hour serum insulin (mu U/ml) 2小时血清胰岛素(mu U/ml)
  6. Body mass index (weight in kg/(height in m)^2) 体重指数(体重公斤/(身高米)^2)
  7. Diabetes pedigree function - indicates the function which scores likelihood of diabetes based on family history糖尿病谱系函数 - 表示根据家族史对糖尿病可能性进行评分的函数
  8. Age (years)糖尿病谱系函数 - 表示根据家族史对糖尿病可能性进行评分的函数

(6)Loss Function and Optimizer 损失函数和优化器介绍

损失是对错误预测的惩罚。 也就是说,损失是一个数字,表明模型对单个示例的预测有多糟糕。 如果模型的预测是完美的,则损失为零; 否则,损失更大。

优化器是修改神经网络属性(例如权重和学习率)的函数或算法。 因此,它有助于减少总体损失并提高准确性。

损失函数是目标。 优化器是到达目标的方式。
在这里插入图片描述

(7)训练和测试需要分开 train/test —split

为什么我们需要它? 打个比方,假设你教孩子乘法,让孩子在小乘法表上训练,即从 1 * 1 到 9 * 9 的所有数字。
接下来,您测试孩子是否能够执行相同的乘法。 结果是成功了。 这孩子几乎每次都答对了。 这里有什么问题呢? 你不知道孩子是否完全理解乘法,或者只是记住了表格!
所以你要做的就是测试孩子的乘法,比如 11*12,这些都在表之外。
这正是我们需要在看不见的数据上测试机器学习模型的原因。 否则,我们无法知道算法是否已经学会了可概括的模式或只是记住了训练数据。

(8)模型收敛Model Convergence

收敛:优化算法的停止条件,其中稳定点位于并且算法的进一步迭代不太可能导致进一步的改进。我们可以根据经验测量和探索优化算法的收敛性,例如使用学习曲线。
在这里插入图片描述

(9)现在让我们开始编程

导入需要的包

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

加载读取数据

#read data from csv
diabetesData = pd.read_csv('N:/PolyuML/NeuralNetworks/data/diabetes/diabetes.csv')
diabetesData.head()

在这里插入图片描述
统计0,1(没患病与患病的人数)

#count outcome
diabetesData.groupby("Outcome")[["Outcome"]].count()

在这里插入图片描述

转化为百分百

diabetesData.groupby("Outcome")[["Outcome"]].count().apply(lambda my_df: my_df*100 / my_df.sum())

在这里插入图片描述
转化数据格式方便训练

#convert dataframe to numpy for training
dataset = diabetesData.to_numpy()

查看下转化后的数据

dataset[0:5]

在这里插入图片描述
定义一个神经网络模型

# define the keras model
model = Sequential()
model.add(Dense(12, input_shape=(8,), activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

在这里插入图片描述
查看模型的结构

model.summary()
'''
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense (Dense)               (None, 12)                108       
                                                                 
 dense_1 (Dense)             (None, 8)                 104       
                                                                 
 dense_2 (Dense)             (None, 1)                 9         
                                                                 
=================================================================
我们有 3 层神经网络。 input_shape=(8,) - 模型有 8 个输入。 (对应8列输入数据,8维的数据)第一层-layer1,有12个节点。 第二层 - Layer2,有 8 个节点。 第 3 层 - 第 3 层,输出层,有 1 个节点。
'''

编译模型,这里定义了使用的损失函数以及优化器

# compile the keras model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

在这里插入图片描述

切分数据集,分为X输入的和Y输出的

#split the dataset to X (input) and y (output)
X = dataset[:,0:8]
y = dataset[:,8]

开始使用刚刚定义的模型在处理好的数据上运行

# fit the keras model on the dataset
model.fit(X, y, epochs=200, batch_size=12)

batch_size批量大小是模型更新之前处理的样本数量。 epochs是完整通过训练数据集的次数。 我们可以调整batch size和epochs来看看是否可以获得更好的结果。

训练完之后需要对模型进行评估

#evaluate the keras model
_, accuracy = model.evaluate(X, y)
print('Accuracy: %.2f' %(accuracy*100))
'''
24/24 [==============================] - 0s 696us/step - loss: 0.4587 - accuracy: 0.7747
Accuracy: 77.47
'''

使用训练好的模型去预测糖尿病病例的发生

predictions = (model.predict(X) > 0.5).astype(int)

# predict for some cases
for i in range(5):
 print('%s => %d (expected %d)' % (X[i].tolist(), predictions[i], y[i]))

'''
[6.0, 148.0, 72.0, 35.0, 0.0, 33.6, 0.627, 50.0] => 1 (expected 1)
[1.0, 85.0, 66.0, 29.0, 0.0, 26.6, 0.351, 31.0] => 0 (expected 0)
[8.0, 183.0, 64.0, 0.0, 0.0, 23.3, 0.672, 32.0] => 1 (expected 1)
[1.0, 89.0, 66.0, 23.0, 94.0, 28.1, 0.167, 21.0] => 0 (expected 0)
[0.0, 137.0, 40.0, 35.0, 168.0, 43.1, 2.288, 33.0] => 1 (expected 1)
'''


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/796895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu /dev/loop<0..n>挂载的目录的分析

执行命令df -h lkmaoubuntu:~$ df -h Filesystem Size Used Avail Use% Mounted on udev 1.6G 0 1.6G 0% /dev tmpfs 391M 2.1M 389M 1% /run /dev/sda1 59G 30G 26G 54% / tmpfs 2.0G 0 2.0G 0% /dev/s…

华硕PN62:BIOS来电重启 和win10关闭升级Windows11提示方法

1,开机长按del键进bios设置界面,点高级—电源管理或APM Restore AC Power Loss有两个都选power on。如果不成功,检查主板上纽扣电池是否有电。 restore on ac power loss意思是“交流失电恢复”,这是BIOS里的电源管理选项&#xf…

【Python机器学习】实验04(1) 多分类(基于逻辑回归)实践

文章目录 多分类以及机器学习实践如何对多个类别进行分类1.1 数据的预处理1.2 训练数据的准备1.3 定义假设函数,代价函数,梯度下降算法(从实验3复制过来)1.4 调用梯度下降算法来学习三个分类模型的参数1.5 利用模型进行预测1.6 评…

volatile关键字(轻量级锁)

目录 一、volatile出现背景 二、JMM概述 2.1、JMM的规定 三、volatile的特性 3.1、可见性 3.1.1、举例说明 3.1.2、总结 3.2、无法保证原子性 3.2.1、举例说明 3.2.2、分析 3.2.3、使用volatile对原子性测试 3.2.4、使用锁机制 3.2.5、总结 3.3、禁止指令重排序 四、v…

【KO】vite使用 git bash here创建vue3项目时方向键失败!

文章目录 起因过程结果 起因 今天使用vite创建ue3项目,因为git使用习惯了就直接用git运行创建命令,前两步都没啥问题,到选择框架的时候问题来了,方向键无效。如图: 过程 常理来说是直接用方向键↑和↓进行选择&…

day15-239. 滑动窗口最大值

239. 滑动窗口最大值 力扣题目链接(opens new window) 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 进阶: 你能…

docker部署zabbix 6.0高可用集群实验

0 实验环境 虚拟机,postgresql本地部署,zabbix server及nginx容器部署 1 postgresql 参看前作 《postgresql timescaledb离线安装笔记》完成部署,对外端口tcp 5432,账号zabbix,密码123 2 zabbix server 2.1 拉取…

在vue页面中,直接展示代码及样式高亮(vue 中使用 highlight)

参考链接:https://blog.csdn.net/u011364720/article/details/90417302 前言:效果如下 想要在前端页面中,直接展示代码的样式,就像一些开发文档的源码展示一样使用插件 highlight.js 1、安装 npm install highlight.js2、main.j…

css中flex后文本溢出的问题

原因: 为了给flex item提供一个合理的默认最小尺寸,flex将flex item的min-width 和 min-height属性设置为了auto flex item的默认设置为: min-width: auto 水平flex布局 min-height:auto 垂直flex布局 解决办法&…

vue - 实现列表点击选择及多选 / 全选功能,类似购物车商品列表单选和全选效果功能,vue实现单选和多选功能详细示例教程(详细示例源码,一键复制开箱即用)

效果图 在vue项目中,实现了列表单选 / 全选功能,像商品购物车一样的功能效果详细教程,一键复制运行。 示例源码 直接复制运行就行,把数据换成后端返回的就可以了。 <tem

Nacos环境搭建

Nacos环境搭建 官方文档/下载地址 https://nacos.io/zh-cn/docs/quick-start.html 目录结构 导入nacos-mysql 在MySQL创建数据库&#xff1a;nacos_config导入conf目录下的nacos-mysql.sql文件 新建用户 在nacos_config/user中新增数据即可&#xff0c;但是密码是要BCryp…

汇编语言(第4版)实验7 寻址方式在结构化数据访问中的应用

参考答案&#xff1a; ①经分析&#xff0c;完整程序代码如下。 assume cs:codesg data segmentdb 1975,1976,1977,1978,1979,1980,1981,1982,1983db 1984,1985,1986,1987,1988,1989,1990,1991,1992db 1993,1994,1995dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140…

【C++】开源:Muduo网络库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Muduo网络库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

【力扣每日一题】2023.7.27 删除每行中的最大值

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码运行结果&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们一个矩阵&#xff0c;每次都把每行中的最大元素拿出来删掉&#xff0c;再把每次删除的元素里最大的元素拿出来加到结果里&…

C语言第九课------------------数组----------------C中之将

作者前言 作者介绍&#xff1a; 作者id&#xff1a;老秦包你会&#xff0c; 简单介绍&#xff1a; 喜欢学习C语言和python等编程语言&#xff0c;是一位爱分享的博主&#xff0c;有兴趣的小可爱可以来互讨 个人主页::小小页面 gitee页面:秦大大 一个爱分享的小博主 欢迎小可爱…

DaVinci工具链之DaVinci Configurator工程创建

目录 1、用DaVinci Configurator新建项目工程​编辑 2、用DaVinci Developer打开GL_Demo项目工程​编辑 3、在DaVinci Developer中新建一个调光控制模块 3.1.创建SWC Types 3.1.1.创建调光控制模块Composition SWC Type 3.1.2.创建调光分析计算Application SWC Type 3.1…

生信专题十余种案例

集成多组学数据的机器学习在生物医学中的应用 原文链接 案例部分图示&#xff1a; 案例图示一&#xff1a;基于自编码器的单细胞转录组-蛋白组学整合分析 案例图示二&#xff1a;基于蛋白组学-代谢组学的肿瘤生物标志物发现 案例图示三&#xff1a;基于GWAS-表型组学的肺癌风…

idea terminal npm指令无效

文章目录 一、修改setting二、修改启动方式 一、修改setting 菜单栏&#xff1a;File->Settings 二、修改启动方式 快捷方式->右键属性->兼容性->勾选管理员身份运行

ChatGLM-6B 部署与 P-Tuning 微调实战-使用Pycharm实战

国产大模型ChatGLM-6B微调部署入门-使用Pycharm实战 1.ChatGLM模型介绍 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM) 架构&#xff0c;具有 62 亿参数。结合模型量化技术&#xff0c;用户可以在消费级的显卡上进行本…

MyBatis学习笔记之缓存

文章目录 一级缓存一级缓存失效 二级缓存二级缓存失效二级缓存相关配置 MyBatis集成EhCache 缓存&#xff1a;cache 缓存的作用&#xff1a;通过减少IO的方式&#xff0c;来提高程序的执行效率 mybatis的缓存&#xff1a;将select语句的查询结果放到缓存&#xff08;内存&…