1. 首页
  2. 机器学习

Python中如何实现感知器算法

如何从头开始在Python中实现感知器算法

Perceptron算法是最简单的人工神经网络类型。

它是单个神经元的模型,可用于两类分类问题,并为以后开发更大的网络提供了基础。

在本教程中,您将发现如何使用Python从头实现Perceptron算法。

完成本教程后,您将知道:

  • 如何训练感知器的网络权重。
  • 如何使用感知器进行预测。
  • 如何为现实世界中的分类问题实现Perceptron算法。

本节简要介绍了Perceptron算法和Sonar数据集,我们稍后将对其应用。

感知器算法

感知器的灵感来自称为神经元的单个神经细胞的信息处理。

神经元通过其树突接受输入信号,这些树突将电信号向下传递到细胞体。

以类似的方式,感知器从训练数据的示例中接收输入信号,我们对这些数据进行加权并组合为一个称为激活的线性方程式。

然后使用传递函数(例如步进传递函数)将激活转换为输出值或预测。

这样,Perceptron是针对两类(0和1)问题的分类算法,其中可以使用线性方程式(像或超平面)将这两个类分开。

它与以相似方式进行预测的线性回归和逻辑回归密切相关(例如,输入的加权总和)。

必须使用随机梯度下降法从训练数据中估算Perceptron算法的权重。

随机梯度下降

梯度下降是通过遵循成本函数的梯度来最小化函数的过程。

这涉及到了解成本和微分的形式,以便从给定的点知道梯度,并且可以沿该方向移动,例如下坡到最小值。

在机器学习中,我们可以使用一种技术,该技术在每次迭代中评估和更新权重,称为随机梯度下降,以最大程度地减少训练数据上模型的误差。

该优化算法的工作方式是一次将每个训练实例显示给模型。该模型对训练实例进行预测,计算误差并更新模型,以减少下一个预测的误差。

此过程可用于查找模型中的权重集,该权重集会导致模型在训练数据上的最小误差。

对于Perceptron算法,每次迭代均权重()使用以下公式更新:

在哪里正在优化重量,学习率是您必须配置的学习率(例如0.01),(预期–预期)是模型在训练数据上归因于权重的预测误差,X是输入值。

声纳数据集

我们将在本教程中使用的数据集是Sonar数据集。

这是一个数据集,描述了从不同服务反弹的声纳chi返回。60个输入变量是不同角度的收益强度。这是一个二元分类问题,需要一个模型来区分岩石和金属圆柱体。

这是一个易于理解的数据集。所有变量都是连续的,并且通常在0到1的范围内。因此,我们不必对输入数据进行归一化,这对于Perceptron算法通常是一种好习惯。输出变量是矿山的字符串“ M”和岩石的“ R”,需要将其转换为整数1和0。

通过预测数据集中(M或地雷)中观察次数最多的类别,零规则算法可以达到53%的准确性。

教程

本教程分为三个部分:

  1. 做出预测。
  2. 训练网络权重。
  3. 对声纳数据集建模。

这些步骤将为您实现Perceptron算法并将其应用于您自己的分类预测建模问题奠定基础。

1.做出预测

第一步是开发可以进行预测的功能。

在评估随机梯度下降中的候选权重值时以及在模型完成后,我们都需要这样做,我们希望开始对测试数据或新数据进行预测。

下面是一个名为预测()在给定一组权重的情况下预测行的输出值。

第一个权重始终是偏差,因为它是独立的,并不负责特定的输入值。

我们可以设计一个小的数据集来测试我们的预测功能。

我们还可以使用先前准备的权重对此数据集进行预测。

综合所有这些,我们可以测试我们的预测()功能如下。

有两个输入值(X1X2)和三个权重值(偏见,w1w2)。我们为此问题建模的激活方程为:

或者,根据具体的重量值,我们手动选择了:

运行此函数,我们得到与预期输出匹配的预测(ÿ)值。

现在,我们准备执行随机梯度下降以优化我们的权重值。

2.训练网络权重

我们可以使用随机梯度下降来估计训练数据的权重值。

随机梯度下降需要两个参数:

  • 学习率:用于限制每次更新时校正的每个砝码的数量。
  • 遍历:更新权重时遍历训练数据的次数。

这些以及训练数据将成为函数的参数。

我们需要在函数中执行3个循环:

  1. 循环遍历每个纪元。
  2. 在训练数据中的每一行上循环一个历元。
  3. 循环遍历每个权重,并在一个纪元内将其更新为一行。

如您所见,我们在每个时期更新训练数据中每一行的每个权重。

权重根据模型产生的错误进行更新。将误差计算为预期输出值与使用候选权重进行的预测之间的差。

每个输入属性都有一个权重,并且这些权重以一致的方式进行更新,例如:

除了没有输入外,该偏差还以类似的方式更新,因为它不与特定的输入值相关联:

现在,我们可以将所有这些放在一起。下面是一个名为train_weights()使用随机梯度下降来计算训练数据集的权重值。

您可以看到,我们还跟踪每个时期的平方误差和(正值),这样我们就可以在每个外部循环中打印出一条漂亮的消息。

我们可以从上方在相同的小型人为数据集上测试此功能。

我们使用0.1的学习率,并且仅在5个时期内训练模型,或者将权重暴露给整个训练数据集5次。

运行示例将在每个时期打印一条消息,其中包含该时期的平方和和最终权重。

您可以看到该算法是如何快速了解问题的。

现在,让我们将此算法应用于真实数据集。

3.对声纳数据集建模

在本节中,我们将在Sonar数据集上使用随机梯度下降训练Perceptron模型。

该示例假定数据集的CSV副本位于当前工作目录中,且文件名声纳。所有数据.csv.

首先加载数据集,将字符串值转换为数字,然后将输出列从字符串转换为0到1的整数。这可以通过辅助函数来实现load_csv(),str_column_to_float()str_column_to_int()加载并准备数据集。

我们将使用k倍交叉验证来评估学习模型在看不见的数据上的性能。这意味着我们将构建和评估k个模型,并将性能评估为平均模型误差。分类准确性将用于评估每个模型。这些行为在cross_validation_split(),precision_metric()Evaluation_algorithm()辅助功能。

我们将使用预测()和train_weights()上面创建的用于训练模型的功能和新功能perceptron()将它们绑在一起的功能。

以下是完整的示例。

使用k值为3进行交叉验证,得出每个折叠208/3 = 69.3或略低于70条记录,以便在每次迭代时进行评估。通过少量实验选择了0.1和500个训练时期的学习率。

您可以尝试自己的配置,看看是否可以超过我的分数。

运行此示例将打印3个交叉验证折叠中每一个的得分,然后打印平均分类准确性。

我们可以看到,如果仅使用零规则算法预测多数类别,则准确性约为72%,高于仅略高于50%的基线值。

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code