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

本深度学习入门教程是在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.mfbz.cn/a/51601.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3D 渲染技巧-如何创建高质量写实渲染?

掌握创建高质量建筑渲染和任何 3D 渲染的艺术是一项复杂且需要技巧的工作,通常需要多年的经验和实践。实现逼真的结果需要仔细考虑众多因素,并避免可能导致缺乏真实性的假渲染效果的常见错误。 避免常见错误 - 提升渲染游戏的技巧 在追求创建真正逼真的…

从零开始学习CTF——CTF是什么

引言: 从2019年10月开始接触CTF,学习了sql注入、文件包含等web知识点,但都是只知道知识点却实用不上,后来在刷CTF题才发现知识点的使用方法,知道在哪里使用,哪里容易出漏洞,可是在挖src漏洞中还…

Appium+python自动化(二十四) - 元素等待(超详解)

思考 在自动化过程中,元素出现受网络环境,设备性能等多种因素影响。因此元素加载的时间可能不一致,从而会导致元素无法定位超时报错,但是实际上元素是正常加载了的,只是出现时间晚一点而已。那么如何解决这个问题呢&am…

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】

4.权限管理模块开发 4.1 权限管理概述 4.1.1 权限管理的意义 后台管理系统中,通常需要控制不同的登录用户可以操作的内容。权限管理用于管理系统资源,分配用户菜单、资源权限,以及验证用户是否有访问资源权限。 4.1.2 RBAC权限设计模型 …

Scratch 教程 之 如何四舍五入保留一个小数到指定的数位

有些时候,我们需要四舍五入一个多位小数到指定的位,但scratch并没有这个积木,怎么做呢?我来教你~ 我们创建一个函数,需要时调用就行了~ 如图,创建一个带参函数,勾选"…

wxwidgets Ribbon构建多个page与按钮响应

新建一个控制台应用程序,添加好头文件的依赖与lib库文件的依赖,修改属性: 将进入ribbon界面的文件与主界面的类分开: 1、RibbonSample.cpp #include "stdafx.h" #include "MyFrame.h" class MyApp : public…

微服务——Docker

docker与虚拟机的区别 首先要知道三个层次 硬件层:计算机硬件 内核层:与硬件交互,提供操作硬件的指令 应用层: 系统应用封装内核指令为函数,便于程序员调用。用户程序基于系统函数库实现功能。 docker在打包的时候直接把应用层的函数库也进行打包&a…

机器学习深度学习——softmax回归的简洁实现

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——softmax回归从零开始实现 📚订阅专栏:机器学习&&深度学习 希望文章对你…

状态机实现N位按键消抖

状态机实现N位按键消抖 1、原理 利用状态机实现按键的消抖,具体的原理可参考 (50条消息) 基于FPGA的按键消抖_fpga 按键消抖_辣子鸡味的橘子的博客-CSDN博客 状态机简介: 状态机分类可以主要分为两类:moore和mealy 根据三段式状态机最后…

Virtualbox虚拟机中Ubuntu忘记密码

1、首先重新启动Ubuntu系统,鼠标快速点一下Virtualbox虚拟机窗口获取焦点,然后按住shift键,以调出grub启动菜单。 2、根据提示按下键盘E键进入编辑模式,向下移动光标,将如下"ro quiet splash $vt_handoff"部…

软件测试面试【证券项目公司】

这家公司是做证券项目的,约的9点钟,路程还是有点遥远,转了一趟公交两趟地铁,精力都花在了路上,感觉有点累,以下是今天得面试流程。 到公司前台给我了一张面试表,写完之后就是等待面试。一共面试…

GAMES101 笔记 Lecture13 光线追踪1

目录 Why Ray Tracing?(为什么需要光线追踪?)Basic Ray Tracing Algorithm(基础的光线追踪算法)Ray Casting(光线的投射)Generating Eye Rays(生成Eye Rays) Recursive(Whitted-Styled) Ray Tracing Ray-Surface Intersection(光线和平面的交点)Ray Rquation(射线方…

PC音频框架学习

1.整体链路 下行播放: App下发音源→CPU Audio Engine 信号处理→DSP数字信号处理→Codec DAC→PA→SPK 上行录音: MIC拾音→集成运放→Codec ADC→DSP数字信号处理→CPU Audio Engine 信号处理→App 2.硬件 CPU PCH DSP(可选) Codec PA SPKbox MIC…

spring项目中idea提示Application context not configured for this file

今天在重构项目的时候,碰到一个问题。就是在spring底下,有一个包里面的所有配置类,在idea的开发工具类底下提示,Application context not configured for this file,如图所示 一开始以为是警告,不予处理&am…

【NLP】语音识别 — GMM, HMM

一、说明 在语音识别的深度学习(DL)时代之前,HMM和GMM是语音识别的两项必学技术。现在,有将HMM与深度学习相结合的混合系统,并且有些系统是免费的HMM。我们现在有更多的设计选择。然而,对于许多生成模型来说…

C++之文件操作

1.C文件操作 C中文件操作头文件:fstream。   文件类型:文件文件和二进制文件。 文件操作三大类:     ofstream 写操作     ifstream 读操作     fstream:读写操作 文件打开方式: 标志说明ios::in只读ios::out只写,文件不存在则…

JVM详解(超详细)

目录 JVM 的简介 JVM 执行流程 JVM 运行时数据区 由五部分组成 JVM 的类加载机制 类加载的过程(五个) 双亲委派模型 类加载器 双亲委派模型的优点 JVM 中的垃圾回收策略 GC GC 中主要分成两个阶段 死亡对象的判断算法 引用计数算法 可达性分析算法 垃圾回收算…

【设计模式——学习笔记】23种设计模式——组合模式Composite(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入学校院系展示 介绍基本介绍使用场景登场角色 案例实现案例1类图代码实现 案例2类图代码实现拓展 组合模式在JDK的HashMap源码中的应用组合模式总结文章说明 案例引入 学校院系展示 编写程序展示一个学校院系结构: 需求是这样,要在一个页面中展示…

EXCEL,如何比较2个表里的数据差异(使用数据透视表)

目录 1 问题: 需要比较如下2个表的内容差异 1.1 原始数据喝问题 1.2 提前总结 2 使用EXCEL公式方法 2.1 新增辅助列: 辅助index 2.2 具体公式 配合条件格式 使用 3 数据透视表方法 3.1 新增辅助列: 辅助index 3.2 需要先打开 数据透视表向导 …

CMU 15-445 -- Multi-Version Concurrency Control - 16

CMU 15-445 -- Multi-Version Concurrency Control - 16 引言MVCCExample #1Example #2小结 Design DecisionsConcurrency Control ProtocolVersion StorageAppend-Only StorageTime-Travel StorageDelta Storage Garbage CollectionTuple-Level GCTransaction-Level GC Index …