使用人工神经网络 (ANN) 的分类模型
已发表: 2020-12-01在机器学习术语中,分类是指预测建模问题,其中输入数据被分类为预定义的标记类之一。 例如,预测是或否、真或假属于二元分类类别,因为输出的数量仅限于两个标签。
类似地,具有多个类别的输出(例如对不同年龄组进行分类)称为多类别分类问题。 分类问题是最常用或定义的 ML 问题类型之一,可用于各种用例。 有多种机器学习模型可用于分类问题。
从 Bagging 到 Boosting 技术虽然 ML 不仅能够处理分类用例,但当我们拥有大量输出类和大量数据来支持模型的性能时,神经网络就会出现。 展望未来,我们将研究如何使用 Keras 上的神经网络 (Python) 实现分类模型。
向世界顶尖大学学习人工智能课程。 获得硕士、Executive PGP 或高级证书课程以加快您的职业生涯。
目录
神经网络
神经网络松散地代表了人类大脑的学习。 人工神经网络由神经元组成,而神经元又负责创建层。 这些神经元也称为调谐参数。
每一层的输出被传递到下一层。 每一层都有不同的非线性激活函数,这有助于学习过程和每一层的输出。 输出层也称为终端神经元。

资料来源:维基百科
与神经元相关的权重和负责整体预测的权重在每个时期更新。 使用各种优化器优化学习率。 每个神经网络都提供了一个成本函数,该函数随着学习的继续而最小化。 然后使用成本函数给出最佳结果的最佳权重。
阅读:面向初学者的 TensorFlow 对象检测教程
分类问题
在本文中,我们将使用 Keras 构建神经网络。 可以使用以下命令在 python 中直接导入 Keras。
将张量流导入为 tf
从张量流导入 keras
从 keras.models 导入顺序
从 keras.layers 导入密集
数据集和目标变量
我们将使用具有以下特征的糖尿病数据集:
输入变量 (X):
- 怀孕次数:怀孕次数
- 葡萄糖:口服葡萄糖耐量试验中 2 小时的血浆葡萄糖浓度
- 血压:舒张压 (mm Hg)
- SkinThickness:三头肌皮褶厚度(mm)
- 胰岛素:2 小时血清胰岛素 (mu U/ml)
- BMI:体重指数(体重公斤/(身高米)^2)
- DiabetesPedigreeFunction:糖尿病谱系函数
- 年龄:年龄(岁)
输出变量(y):
结果:类别变量(0 或 1)[患者是否患有糖尿病]
# 加载数据集
df= loadtxt('pima-indians-diabetes.csv', delimiter=',')
# 将数据拆分为 X(输入)和 Y(输出)
X = 数据集[:,0:8]
y = 数据集[:,8]
定义 Keras 模型
我们可以开始使用顺序模型构建神经网络。 这种自上而下的方法有助于构建神经网络架构并使用形状和层。 第一层将具有可以使用 input_dim 修复的特征数量。 在这种情况下,我们将其设置为 8。

创建神经网络并不是一个非常容易的过程。 在建立一个好的模型之前,会发生许多试验和错误。 我们将使用 keras 中的 Dense 类构建一个全连接的网络结构。 神经元算作要提供给密集层的第一个参数。
可以使用激活参数设置激活函数。 在这种情况下,我们将使用 Rectified Linear Unit 作为激活函数。 还有其他选项,例如 Sigmoid 或 TanH,但 RELU 是一个非常通用且更好的选择。
# 定义keras模型
模型=顺序()
model.add(密集(12,input_dim=8,激活='relu'))
model.add(密集(8,激活='relu'))
model.add(密集(1,激活='sigmoid'))
编译 Keras 模型
编译模型是模型定义之后的下一步。 TensorFlow 用于模型编译。 编译是为模型训练和预测设置参数的过程。 CPU/GPU 或分布式内存可以在后台使用。
我们必须指定一个损失函数,用于评估不同层的权重。 优化器调整学习率并通过各种权重集。 在这种情况下,我们将使用二元交叉熵作为损失函数。 在优化器的情况下,我们将使用 ADAM,它是一种有效的随机梯度下降算法。
它非常普遍地用于调音。 最后,因为这是一个分类问题,我们将收集并报告分类准确度,通过度量参数定义。 在这种情况下,我们将使用准确性。
# 编译keras模型
model.compile(loss='binary_crossentropy',优化器='adam',metrics=['accuracy'])
模型拟合和评估
拟合模型本质上称为模型训练。 编译模型后,模型准备好有效地检查数据并进行自我训练。 Keras 的 fit() 函数可用于模型训练过程。 模型训练前使用的两个主要参数是:
- Epochs:遍历整个数据集。
- 批量大小:每个批量大小都会更新权重。 时期由均匀分布的数据批次组成。
# 在数据集上拟合 keras 模型
model.fit(X, y, epochs=150, batch_size=10)
在此过程中使用 GPU 或 CPU。 训练可能是一个非常漫长的过程,具体取决于时期、批量大小,最重要的是数据的大小。
我们还可以使用 evaluate() 函数在训练数据集上评估模型。 数据可分为训练集和测试集,测试 X 和 Y 可用于模型评估。
对于每个输入和输出对,这将产生一个预测并收集分数,包括平均损失和我们安装的任何测量值,例如精度。
evaluate() 函数将返回一个包含两个值的列表。 第一个是数据集上的模型损失,第二个是模型在数据集上的准确性。 我们只对报告的准确性感兴趣,因此我们将忽略损失的重要性。
# 评估 keras 模型

_, 准确度 = model.evaluate(Xtest, ytest)
print('准确度: %.2f' % (准确度*100))
另请阅读:神经网络模型介绍
结论
我们创建并评估了一个基于分类的神经网络。 尽管在这种情况下使用的数据很小,但神经网络主要适用于大型数值数据集。
查看 upGrad 的机器学习和 NLP 高级证书课程。 本课程的设计考虑到对机器学习感兴趣的各种学生,提供 1-1 指导等等。
神经网络如何用于分类?
分类是将对象分类为组。 一种分类是预测多个类别的地方。 在神经网络中,神经单元被组织成层。 在第一层,处理输入并产生输出。 然后将该输出通过其余层发送以产生最终输出。 通过层处理相同的输入以产生不同的输出。 这可以用多层感知器来表示。 用于分类的神经网络类型取决于数据集,但神经网络已用于分类问题。
为什么人工神经网络有利于分类?
为了回答这个问题,我们需要了解神经网络的基本原理以及神经网络旨在解决的问题。 顾名思义,神经网络是受生物启发的人脑模型。 基本思想是我们希望将神经元建模为数学函数。 每个神经元从其他神经元获取输入并计算输出。 然后我们以一种模仿大脑神经网络的方式连接这些神经元。 目标是学习一个可以接收一些数据并产生适当输出的网络。
我们什么时候应该使用人工神经网络?
人工神经网络用于尝试复制生物体的性能或检测数据模式的情况。 医疗诊断、识别语音、可视化数据和预测手写数字都是 ANN 的好用例。 当需要了解输入和输出之间的复杂关系时,会使用人工神经网络。 例如,变量中可能存在很多噪声,并且可能难以理解这些变量之间的关系。 因此,使用人工神经网络是保留知识和数据的常见做法。