使用 Keras 进行分类
介绍
深度学习是当今数据科学和人工智能领域最热门的话题之一。它是机器学习的一个分支,由一组基于数据学习表示的算法组成。深度学习已应用于当今一些最令人兴奋的技术创新,如机器人技术、自动驾驶汽车、计算机视觉、自然语言处理、图像识别等等。
目前有很多深度学习库,但最受欢迎的是 TensorFlow、Keras 和 PyTorch。在本指南中,我们将重点介绍 Keras。
Keras 是一个高级神经网络 API,用 Python 编写,可以在 TensorFlow、CNTK 或 Theano 上运行。它的开发重点是实现快速实验。使用 Keras 的优势在于它注重用户友好性、模块化和可扩展性。
在本指南中,我们将重点介绍如何使用 Keras 库构建分类模型。如果您正在寻找有关如何使用 Keras 进行回归的指南,请参阅我之前的指南(/guides/regression-keras/)
使用 Keras 进行分类
分类是一种用于预测分类标签的监督式机器学习算法。分类的一些有用示例包括预测客户是否会流失、将电子邮件归类为垃圾邮件或银行贷款是否会违约。
我们将要介绍的深度学习神经网络的基本架构由三个主要部分组成。
输入层:这是输入训练观测值的地方。预测变量的数量也通过神经元在这里指定。
隐藏层:这些是输入层和输出层之间的中间层。深度神经网络在此组件中学习数据中涉及的关系。
输出层:这是从前两层发生的事情中提取最终输出的层。对于回归问题,输出层将有一个神经元。
问题陈述
糖尿病是一种严重的健康问题,会导致血糖升高。如果糖尿病得不到治疗和诊断,就会引发许多并发症。
本指南的目的是建立一个分类模型来检测糖尿病。我们将使用包含 768 个观测值和 9 个变量的糖尿病数据集,如下所述:
- 怀孕 - 怀孕次数
- 葡萄糖 - 血浆葡萄糖浓度
- 舒张压 - 舒张压(毫米汞柱)
- 三头肌 - 皮褶厚度(毫米)
- 胰岛素 - 小时血清胰岛素 (mu U/ml)
- bmi——基础代谢率(体重(千克)/身高(米))
- dpf - 糖尿病谱系功能
- age - 年龄(岁)
- 糖尿病 - 1 表示患有糖尿病,0 表示没有患糖尿病。这是目标变量。
另外,所选的分类算法是逻辑回归模型,它是最古老和最广泛使用的算法之一。
评估指标
我们将使用准确度来评估模型的性能,准确度表示正确分类的案例的百分比。
从数学上来说,对于二元分类器,其表示为准确率 = (TP+TN)/(TP+TN+FP+FN),其中
- 真正例 (TP) 是指带有正标签的案例,且被正确归类为正例。
- 真阴性(TN)是指带有阴性标签的案例,但被正确归类为阴性。
- 假阳性(FP)是指带有负标签的案例被错误地归类为阳性。
- 假阴性(FN)是指具有正标签但被错误地归类为负标签的案例。
步骤
以下是使用 Keras 实现回归模型时通常遵循的步骤。
步骤 1 - 加载所需的库和模块
第 2 步 - 加载数据并执行基本数据检查
步骤 3——为特征和响应变量创建数组
步骤 4 - 创建训练和测试数据集
第 5 步 - 定义、编译和拟合 Keras 分类模型
步骤 6 - 预测测试数据并计算评估指标
以下部分将介绍这些步骤。
步骤 1 - 加载所需的库和模块
# Import required libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import sklearn
# Import necessary modules
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from math import sqrt
# Keras specific
import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
第 2 步 - 读取数据并执行基本数据检查
第一行代码将数据读入为 pandas 数据框,而第二行代码打印形状 - 9 个变量的 768 个观测值。第三行给出数值变量的汇总统计信息。数据中没有缺失值,因为所有变量的“计数”均为 768,这等于数据集中的记录数。
df = pd.read_csv('diabetes.csv')
print(df.shape)
df.describe()
(768, 9)
怀孕 | 葡萄糖 | 舒张压 | 三头肌 | 胰岛素 | 体重指数 | DPPF | 年龄 | 糖尿病 | |
---|---|---|---|---|---|---|---|---|---|
数数 | 768.000000 | 768.000000 | 768.000000 | 768.000000 | 768.000000 | 768.000000 | 768.000000 | 768.000000 | 768.000000 |
意思是 | 3.845052 | 120.894531 | 69.105469 | 20.536458 | 79.799479 | 31.992578 | 0.471876 | 33.240885 | 0.348958 |
标准 | 3.369578 | 31.972618 | 19.355807 | 15.952218 | 115.244002 | 7.884160 | 0.331329 | 11.760232 | 0.476951 |
分钟 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.078000 | 21.000000 | 0.000000 |
25% | 1.000000 | 99.000000 | 62.000000 | 0.000000 | 0.000000 | 27.300000 | 0.243750 | 24.000000 | 0.000000 |
50% | 3.000000 | 117.000000 | 72.000000 | 23.000000 | 30.500000 | 32.000000 | 0.372500 | 29.000000 | 0.000000 |
75% | 6.000000 | 140.250000 | 80.000000 | 32.000000 | 127.250000 | 36.600000 | 0.626250 | 41.000000 | 1.000000 |
最大限度 | 17.000000 | 199.000000 | 122.000000 | 99.000000 | 846.000000 | 67.100000 | 2.420000 | 81.000000 | 1.000000 |
步骤 3-为特征和响应变量创建数组。
第一行代码创建了目标变量的对象,而第二行代码给出了排除目标变量“糖尿病”后的所有特征的列表。
第三行通过在 0 和 1 之间缩放来对预测变量进行标准化。这是为了消除预测变量的单位和幅度对建模过程的影响。
第四行显示标准化数据的摘要。目标变量保持不变。
target_column = ['diabetes']
predictors = list(set(list(df.columns))-set(target_column))
df[predictors] = df[predictors]/df[predictors].max()
df.describe()
怀孕 | 葡萄糖 | 舒张压 | 三头肌 | 胰岛素 | 体重指数 | DPPF | 年龄 | 糖尿病 | |
---|---|---|---|---|---|---|---|---|---|
数数 | 768.000000 | 768.000000 | 768.000000 | 768.000000 | 768.000000 | 768.000000 | 768.000000 | 768.000000 | 768.000000 |
意思是 | 0.226180 | 0.607510 | 0.566438 | 0.207439 | 0.094326 | 0.476790 | 0.194990 | 0.410381 | 0.348958 |
标准 | 0.198210 | 0.160666 | 0.158654 | 0.161134 | 0.136222 | 0.117499 | 0.136913 | 0.145188 | 0.476951 |
<font style="vertical-align: inhe |
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~