使用人工神经网络 (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() 函数可用于模型训练过程。 模型训练前使用的两个主要参数是:

  1. Epochs:遍历整个数据集。
  2. 批量大小:每个批量大小都会更新权重。 时期由均匀分布的数据批次组成。

# 在数据集上拟合 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 的好用例。 当需要了解输入和输出之间的复杂关系时,会使用人工神经网络。 例如,变量中可能存在很多噪声,并且可能难以理解这些变量之间的关系。 因此,使用人工神经网络是保留知识和数据的常见做法。