Python中的感知器学习算法

2025 年 1 月 5 日 | 23 分钟阅读

感知器算法由 Frank Rosenblatt 创建,其灵感来源于我们大脑的基本单元(即神经元)如何处理信息。该算法以 McCulloch-Pitts 神经元概念和 Hebb 的研究为基础。现在,尽管感知器算法拥有有趣的历史,并帮助我们理解单层神经网络的基础知识,但它并非当今实际应用中常用的算法。我们主要研究它的历史意义及其作为最简单的单层神经网络的作用。

感知器,简称 Perceptron,是 Rosenblatt 这位学者于 1958 年提出的一个概念。它堪比人工智能神经网络 (ANN) 的鼻祖,ANN 是旨在模拟人脑功能的软件应用程序。由于这个概念非常新颖,当时的神经网络社区对此兴趣盎然。这篇题为《感知器:大脑知识保留与组织的一个条件模型》的出版物对现代神经网络作为一项技术的接受度和实用性产生了重大影响。它堪比许多从根本上改变历史进程的科学突破之一。

早在 1969 年,机器学习领域发生了一件被称为“AI 冬天”的事情。对于神经网络(一种人工智能)来说,那是一个艰难的时期。两位科学家 Minsky 和 Papert 写了一本书,名为《感知器:计算几何学导论》。这本书使神经网络的研究放缓了大约十年。有些人对这本书争论不休,但它确实表明,一种称为“感知器”的基本神经网络无法处理非直线且复杂的非线性数据。由于大多数真实世界的数据都不是简单直线的,所以感知器和神经网络研究似乎可能失败。从 Minsky 和 Papert 写书到人们认为神经网络可以改变行业但未能实现之间,人们对神经网络失去了兴趣。直到 20 世纪 70 年代,学者们才开始尝试更高级的网络(也称为多层感知器)和一种名为反向传播的全新方法,神经网络才再次开始流行。然而,鉴于感知器是更大网络的基础,理解它至关重要。在本节中,我们将解释感知器的工作原理和学习过程(使用 delta 规则)。我们还将探讨感知器是否应该停止接收新信息。最后,我们将演示如何仅使用 Python 构建感知器,然后将其应用于证明它无法处理复杂的非线性数据。

感知器过程是一个简单的机器学习设备,用于将对象分为两组之一。将其视为神经网络或人造器官领域的基本模型。

想象它是一个脑细胞(神经元),它读取一些数据并响应:“嘿,我倾向于认为这属于 A 类或 B 类。”为了做出这个决定,它计算一个特殊数字,称为“激活”。这个激活是通过对信息和另一个称为“偏差”的数字进行一些数学运算来找到的。

如果激活最终是一个正数(大于 0.0),它会说:“这是 A 类!”如果激活为零或负数,它会说:“不,这是 B 类。”

因此,简单来说,它的工作方式类似于一个神经网络,它使用它分析的数字来确定某物是属于一个组还是另一个组。如果证据表明它可能属于一个类别,它会表示“是”;否则,它会表示“否”。

例如,当我们使用逻辑回归、逻辑回归和线性回归等系统时,它们通过使用某些数字(称为系数)来生成估计值。以特定方式组织信息以方便它们工作是一个很好的概念。

感知器是一种工具,可以帮助我们在这两种不同的事物之间做出决定,例如将电子邮件分类为垃圾邮件或非垃圾邮件。这就像在图表中在两者之间画一条线。我们称这条线为“超平面”。当事物可以用直线整齐地划分时,感知器非常有效。

在感知器中,它使用的数字称为“输入权重”。这些数字需要设置得恰到好处,才能使感知器正常工作。我们通过使用一种称为“随机梯度下降”的特定方法来训练感知器。这就像教感知器做出更好的决定。

修正这些权重以减少错误的过程就像微调乐器以演奏出正确的旋律一样。在机器学习中,我们有一个规则,称为感知器更新规则。其思想是根据所犯的错误,朝着正确的方向稍微调整权重。

这并非只发生一次。我们不会只给模型一个例子就完事。相反,我们会一遍又一遍地重复这个过程,处理许多例子。每次我们遍历所有例子,就像完成了一轮,我们称之为“时期”。这有助于模型看到许多不同的场景,并通过练习变得更好。

但这里有一个小小的变化。我们不能一下子将所有错误都加载到模型上。那就像对一个初学者音乐家施加过多的乐器调整一样。所以,我们一次只调整一点权重,分成小块。每次调整权重的多少取决于一个叫做“学习率”的东西。这就像控制模型学习的速度。如果学习率太高,模型可能会学得太快,但却无法真正理解音乐(数据)。相反,如果学习率太低,学习过程可能会变慢。

一言以蔽之,最后(权重 (t + 1) = 权重 (t) + 学习率 * (预期_i - 预测_i) * 输入_i)的方程式在数学上等同于说,“让我们开始吧!”根据它们的偏差程度和我们选择的学习速度,逐步改变这些值。”

因此,关键在于逐渐训练系统生成更好预测的能力,类似于音乐家通过单独练习每个和弦来学习旋律的方式。

何时停止训练:在教育计算机程序时,我们必须知道何时停止。当软件出色地完成其工作或无法进一步完成时,我们就可以停止。我们也可以选择停止。

  1. 初始值: 为了开始训练,我们给程序一些随机的起始值作为其“知识”。这就像给学生一些随机信息作为起点。
  2. 打乱数据: 想象一下你在备考,你不想每次都按顺序阅读教科书。打乱意味着改变你学习的顺序,以使学习更快更好。
  3. 随机学习: 这意味着学习过程具有随机性。这就像一个学生,每次学习的方式可能略有不同。为了确定程序的整体效率,尝试多次是明智之举。
  4. 努力率和周期: 将它们两者视为可以改变以辅助训练的两个环境。学习率就像决定学生学习新事物时迈出多大一步。而周期数就像决定学生应该练习多少轮。为了获得最佳结果,可以根据特定建议或通过试错来更改这些参数。

因此,我们旨在每次训练程序时都提高其性能。为了更快地进行教育,我们从随机信息开始,重新排列片段,并确保我们多次测试它以达到良好的整体结果。我们还调整它所采取的步骤大小以及它应该有多少轮练习。

AND 或 AND XOR 数据集

“在我们深入理解感知器之前,先谈谈‘按位运算’。这些运算包括 AND、OR 和 XOR(异或),如果你上过基础计算机科学课程,可能已经遇到过。

这些按位计算现在用来做什么?它们对仅为 0 和 1 的二进制数字对进行操作;因此,它们生成一个任意数字。所以,假设您希望将一对开关与 0 或 1 的值配对。有四种方法可以实现,下表列出了 AND、OR 和 XOR 的结果:让我们看一些处理值对的基本函数。考虑我们正在处理一对开关,一个标记为“x0”,另一个标记为“x1”,每个开关都可以打开 (1) 或关闭 (0)。

Perceptron Learning Algorithm in Python
  • 逻辑与: 将 AND 函数视为检查两个开关是否都已打开。如果两者都打开(1),则返回正信号(真)。但如果其中一个或两个都关闭(0),则返回负信号(假)。因此,只有在两个开关都打开时,它才返回正信号。
  • 逻辑或: 在这种情况下,这就像检查至少一个开关是否打开。如果其中一个打开(1),则发出正信号(真)。因此,至少有三种情况可能产生鼓励信号:x0 打开,x1 打开,或者两者都打开。
  • 逻辑异或: 异或有点独特。当只有一个阀门打开(1)时,它为真;但是,当任一阀门都打开时,它不为真。因此,异或产生乐观信号只有两种情况:要么 x0 打开而 x1 熄灭,要么 x0 关闭而 x1 打开。

现在,我们究竟为什么关心这些程序?它们可能看起来很简单,但它们具有很大的影响力。它们经常被用作评估和增强预测系统的基础组件。

如果我们用红线表示零结果,用蓝星表示一个结果来显示这些程序的结果,我们就会不可避免地在图 1 中看到一个引人入胜的设计。

Perceptron Learning Algorithm in Python

在机器学习领域,我们经常面临各种各样的知识。有些数据可以很容易地分离或划分,就像把东西放进两个盒子一样。任何人都可以通过画一条直线来区分这种类型的数据——“线性可分”数据。

想象一下你拿着两个包裹,一个上面写着“0”,另一个上面写着“1”。为了使你放入每个容器中的物品不同,你可以划一条线。

然而,某些信息可以归结到那个级别。XOR 示例是一个例外。使用 XOR 将对象分成相应的“0”和“1”组并使用一条漂亮的平行线是困难的。XOR 示例说明了“非线性可恢复”数据,这证明更加困难。

在现实世界中,我们经常遇到像 XOR 这样的线性独立数据。为了管理这种复杂的数据,我们使用的机器学习算法需要具备这种能力。

我们采用一种特殊的设置来评估我们的算法在这方面的效果。我们使用相同的材料来训练和测试我们的算法,而不是将其分成不同的训练集和测试集。这使我们能够评估我们的算法如何识别现有信息中可识别的趋势。

重要的是,线性可分的 AND 和 OR 过程可以被感知器方法正确分类;然而,该方法不能分类线性可分的 XOR 数据。这表明了该算法在管理日益复杂的数据方面的局限性。

感知器架构

1958 年,Rosenblatt 引入了一种称为感知器的东西。把它想象成一个学习系统,它使用带标签的例子,就像一位老师指导你一样。它接收被称为“特征向量”或原始像素数据的东西,并找出它们的类别。

把感知器想象成一个简单的盒子,有 N 个输入按钮,每个要分类的项目一个。它只有一层,末端只有一个按钮。所以,你通过这些按钮输入数据。

这个盒子有连接和分配给每个输入按钮的权重。这些权重决定了每个按钮的重要性。将所有关键值相加后,滑块选择最终响应是 0 还是 1。它充当决策者,如果值为 0 则声明“类别 #1”,如果值为 1 则声明“课程 #2”。然而,感知器只能以最基本的方式将项目分为两组,使其类似于一个自动设备。

Perceptron Learning Algorithm in Python

步骤 1: 首先为我们的权重向量设置一堆小的随机值,就像一组我们将用来进行预测的旋钮。

步骤 2: 让我们通过继续执行以下步骤来开始,直到发生某个事件(我们稍后会讲到)。

  1. 回顾我们拥有的每组知识,例如宠物图片和指示它们是猫还是狗的标签,其中包含我们想了解的主题的详细信息。
  2. 将每一条知识的信息输入一个独特的科学公式。这个公式帮助我们做出猜测,比如猜测图片是猫还是狗。这个猜测用“yj”值表示。
  3. 根据我们的猜测好坏,我们对之前提到的那些旋钮(权重)进行微调。这些调整就像稍微朝正确的方向转动旋钮,以便更好地进行预测。

现在,关于“直到感知器收敛”的部分:我们不断重复这些步骤(1、2a、2b 和 2c),直到我们擅长进行预测。当我们对预测的准确性感到满意后,我们就称感知器“收敛”了。

因此,简单来说,这项技术类似于试图从数据中获取知识。我们从一些任意的假设(权重)开始,利用这些假设进行预测,然后逐步修改我们的估计以变得更好,直到我们非常擅长。我们不断这样做,直到我们对预测的准确性感到满意。

感知器训练过程和 Delta 规则

训练感知器就像教一个简单的计算机程序做决策。假设有一些数据对于计算机来说,需要正确地解释和分类。为此,您需要修改应用程序代码中的一组值(权重)。

事情是这样的

  1. 尽管程序还不是很擅长,但我们一开始就向它输入知识,并指导它根据目前所了解的做出判断。
  2. 我们不断地重复这个过程,当我们同时查看所有信息时,我们称之为“一个 epoch”。
  3. 通常需要经过几轮数据(多个 epoch)后,程序才能真正擅长分类数据。
  4. 程序的学习过程主要分为两个步骤。首先,它查看数据并计算权重。这会给我们一个输出,就像程序的猜测一样。
  5. 另一个过程决定了答案应该是 1 还是 0。如果它准确(大于 0),预测变为 1;否则变为 0。

因此,简单来说,我们通过逐步修改某些量(权重)来训练计算机程序识别和正确分类数据,直到它变得熟练。程序要精通此任务需要一些时间和多次尝试(epoch)。

我们再来讨论一下改进机器学习的方法。思考我们的软件如何利用大量数据来做出判断。它们被称为我们的“权重向量”。为了提高我们软件的决策能力,我们希望修改这些数字。

在这种情况下,我们采用“delta 规则”。它类似于一组方向。为了确定我们程序的判断是否正确,我们首先通过减去另外两个整数来计算数量。如果正确,这个数字应该是 0。如果错误,结果值是一个正数或负数,这表明我们的权重向量需要向哪个方向调整才能正确。

我们继续将这个量乘以一个不同的整数,以帮助我们进行较小的调整。这个不同的数字被称为“alpha”。获得正确的 alpha 值的重要性再怎么强调也不为过。如果它足够大,我们可能会把事情搞砸,因为我们改变的数字太多了。如果它足够小,我们就有可能没有充分改变它,我们的程序就不会改进。因此,找到理想的平衡至关重要。

考虑学习一项不熟悉的技能,例如如何骑自行车。考虑“ ”是教育旅程阶段的大小,只要我们从事“ ”。当“ ”很小时,您将缓慢而谨慎地移动以防止绕道。但是,学习可能需要相当长的时间,因为您进展缓慢。

我们再来讨论一下如何运用我们已经获得的知识。这类似于你每次练习骑自行车时都会进步一点。为了反映我们随着时间获得的知识,我们使用一个“权重向量”。这有助于我们保持前进。乍一看可能很难理解,所以如果这听起来很复杂,请不要担心。

感知器训练终止

当我们训练一个计算机程序,比如感知器时,我们会不断向它展示示例,直到它全部正确,或者直到我们决定它已经尝试了足够多次。如果我们使用一个非常小的“α”值,并且我们的示例可以整齐地分为两组,那么我们就知道它已经完成。

但是,如果我们的示例不能整齐地分成两组,或者我们选择了错误的 α 值怎么办?训练会永远进行下去吗?不。当软件反复犯完全相同的错误时,这表明材料对它来说太复杂而无法理解,我们通常会在特定次数的试验后停止,或者如果软件完全停止学习。

在 Python 中实现感知器

感知器技术已经介绍完毕,现在是时候使用 Python 来实现它了。我们将在“pyimagesearch.nn”模块中添加一个名为“perceptron.py”的目录。这个文件将包含我们真正的感知器实现。

Perceptron Learning Algorithm in Python

创建文档时,请访问它并插入以下代码

Perceptron Learning Algorithm in Python

我们声明在第 5 行中它类中的一个“构造函数”。这个构造函数接受两个参数

N:这是我们输入特征向量中的列数。在我们的例子中,由于我们处理的是位运算数据集,我们将 N 设置为 2,因为有两个输入。

alpha:这是一个数字,它决定了我们感知器的学习速度。我们将其默认值设置为 0.1。通常,人们会为 alpha 选择 0.1、0.01 或 0.001 等值。

第 7 行是我们用随机数填充权重矩阵 W 的地方。这些随机数来自所谓的“正态”(高斯)分布。这个分布的平均值(均值)为零,标准差为一。我们的权重矩阵将有 N + 1 个值,这包括特征向量中 N 个输入中的每一个,以及一个额外的“偏差”值。我们还在这里做了一些小计算,将 W 除以输入数量的平方根。这有助于我们缩放权重矩阵并更快地收敛(学习)。我们将在本章后面详细讨论权重初始化技术。

现在,让我们来谈谈“阶跃函数”。

Perceptron Learning Algorithm in Python

当然,让我们用更简单的语言来解释你提到的概念

模拟阶跃方程:这个函数的作用类似于阶跃方程。如果你给它一个数字“x”,如果“x”是正整数,它将返回一个值“1”。如果“x”不好(例如,0 或负数),我们将收到 0。

感知器的课程:我们使用一种称为“fit”的机制来训练我们的感知器,这是一种机器学习形式。Fit 是一个常用术语,表示使用信息训练模型的功能。如果您熟悉人工智能、Python 案例和 scikit-learn 包,您可能已经知道这一点。

Perceptron Learning Algorithm in Python

“fit”函数的输入如下:这些是“fit”操作的一些要求

'X':这是我们实际的训练数据。它就像我们用来教 AI 的信息。

'y':这表示我们的 AI 应该预测的正确答案或标签。

'epochs':这个数字告诉我们的感知器应该从数据中学习多少次。

添加偏差技巧:在代码的第 18 行,应用了一个名为“偏差技巧”的东西。这意味着我们在训练数据中添加了一列一。这个巧妙的技巧帮助我们将偏差(一种调整)视为我们的 AI 可以直接学习的东西,以及其他诸如权重之类的东西。

训练过程:组装完所有这些元素后,我们开始进行指令。在这里,我们的 AI 利用信息来获取知识,并努力在预测未来方面变得更加熟练。

当然,让我们简化你提供的文本中的技术语言

Perceptron Learning Algorithm in Python

这是程序通俗易懂的运行方式

  1. 第 21 行标志着一个循环的开始,该循环遍历一定数量的周期,称为“epoch”。对于每个周期,我们查看每一条数据(我们称之为“x”)及其目标类别标签(第 23 行)。
  2. 计算预测:在第 27 行,我们使用“x”的特征和称为“W”的权重矩阵进行一些数学运算。然后我们通过一个函数来使用感知器进行预测。
  3. 更新权重:我们遵循图 3 中所示的训练方法。关键部分是:我们只在预测与目标类别不匹配时才更改我们的“W”矩阵(第 31 行)。当这种情况发生时,我们通过找出预测值与正确值之间的差异来计算我们的错误程度(第 33 行)。
  4. 调整权重:我们在第 36 行调整我们的“W”矩阵,以使其更接近正确答案。我们分步进行,这些步骤的大小取决于我们的“学习率”,我们称之为“alpha”。经过多个周期(epoch),我们的感知器学习数据中的模式,并且“W”值会发生变化,以便我们可以正确分类“x”样本。
  5. 进行预测:最后,我们需要一个名为“predict”的函数。顾名思义,它帮助我们猜测我们以前从未见过的新数据的类别标签。

在使用感知器进行预测时,我们遵循几个涉及简单数学运算的步骤。让我用通俗易懂的语言为你分解一下

步骤 1:进行预测

  • 首先,我们有表示为“x”的输入特征和权重矩阵“W”。
  • 我们获取这些输入特征和权重矩阵,并进行一种特殊的乘法,称为点积。把它想象成一种组合这两组数字的方式。
  • 接下来,我们将结果通过一个称为阶跃函数的东西。这个阶跃函数帮助我们预测一些事情,比如电子邮件是否是垃圾邮件。

步骤 2:训练感知器

  • 为了训练我们的感知器(教它做出更好的预测),我们使用图表(图 3)中详述的过程。以下是我们所做的
  • 我们将我们的预测与我们想要的结果进行比较,这称为目标。
  • 如果我们的预测与目标不匹配,我们就计算出我们错了多少。这称为确定误差。
  • 我们通过查看预测值和期望值(目标)之间的差异来确定误差。如果偏差很大,误差将是一个很大的正数或负数。
  • 然后,我们更新我们的权重矩阵。这意味着我们调整权重矩阵中的值,以更接近做出正确的预测。我们逐步进行,步骤的大小由一个称为学习率的参数控制,通常表示为“alpha”。
  • 随着时间的推移,在重复此过程多次(我们称之为“epochs”)之后,我们的感知器学习数据中的模式并改进做出正确预测的能力。

步骤 3:训练后进行预测

  • 最后,我们定义了另一个名为“predict”的函数。这个函数的作用就像它的名字所暗示的那样——它帮助我们预测给定输入数据组的类别标签(例如“垃圾邮件”或“非垃圾邮件”)。因此,在我们的感知器经过训练之后,我们可以用它来对新的、未见过的数据进行预测。
    Perceptron Learning Algorithm in Python
  • 在我们的预测过程中,我们处理一组名为 X 的输入数据,我们希望对其进行分类。我们还在第 43 行检查是否需要包含额外的列来调整数据。
  • 获取此输入数据 X 的预测与我们训练系统的方式非常相似。我们基本上将 X 中的输入特征乘以一组由 W 表示的权重,然后我们使用阶跃函数来处理此结果。此阶跃函数的输出然后返回给请求它的系统部分。

现在我们已经设置了感知器类,让我们在位数据集上测试它,看看我们的神经网络能表现得如何。

评估感知器位数据集

让我们从创建一个名为“perceptron_or.py”的文件开始。在这个文件中,我们将致力于将感知器模型拟合到一个与“OR”操作相关的特殊数据集上。

Perceptron Learning Algorithm in Python

在代码的第 2 行和第 3 行,我们引入了所需的 Python 工具和包。具体来说,我们将使用我们自己实现的感知器模型。

接下来,在第 6 行和第 7 行,我们描述并创建 OR 数据集,它是一组遵循表 1 中所示规则的数据点。

现在,在第 11 行和第 12 行,我们进入训练部分。我们将使用这个数据集来训练我们的感知器,并且我们将以 α = 0.1 的学习率进行。这个训练过程将进行 20 次,或者我们称之为“20 个 epoch”。

最后,在我们的感知器从数据中学习后,我们将对其进行测试。我们将用它来检查它是否能够在新数据上正确执行 OR 函数。这样,我们就能知道我们的模型是否正确地学会了这项任务。

Perceptron Learning Algorithm in Python

在我们程序的这部分中,想象它就像一个食谱,在第 18 行,我们遍历 OR 数据集中的所有信息。对于其中的每一部分,我们将其输入到我们的计算机程序中,就像将配料输入到机器中一样,然后我们从机器中得到一个猜测(在第 21 行,就像机器告诉我们它在想什么一样)。

完成所有这些之后,在第 22 行和第 23 行,我们会在计算机屏幕上显示我们输入到机器中的内容、我们知道的正确答案以及机器的猜测。

要检查我们的感知器算法是否能学会执行 OR 函数,只需点击或输入一个按钮,上面写着 [在此处插入命令]。把它想象成按微波炉的“启动”按钮,看看它是否正确烹饪食物。

Perceptron Learning Algorithm in Python

当 x0 和 x1 都设置为零时,OR 运算结果为零;而所有其他组合都产生一的结果,我们的神经网络在预测方面表现准确。

接下来我们将探讨合取特征。为此,您必须创建一个名为“perceptron_and.py”的全新文件,并添加以下代码

只有第 6 行和第 7 行与程序的其余部分有所不同。我们现在处理的是 AND 数据集,而不是定义 OR 数据集。

现在,当我们运行以下命令时,我们可以看到感知器应用于 AND 函数时的表现

Perceptron Learning Algorithm in Python

我们的感知器再次成功地表示了该函数。当 x0 和 x1 恰好等于 1 时,AND 算法只在这种情况下返回“真”。对于任何其他参数组合,结果为零。

现在,让我们在“perceptron_xor.py”文件中深入探讨更复杂的 XOR 函数。

再次,我们只修改了第 6 行和第 7 行代码,其中我们定义了 XOR 数据。让我们首先了解 XOR:只有当一个“x”值为 1 而不是两者都为 1 时,它才为真。

Perceptron Learning Algorithm in Python

当我们运行以下命令时,我们可以看到感知器难以学习这种非直观的关系。换句话说,它无法理解 XOR。

无论你用不同的学习率或初始权重设置尝试多少次这个实验,单层感知器都无法正确理解 XOR 函数。我们需要一种更复杂的方法——我们需要具有非线性激活函数的多个层。这标志着深度学习的开始。

Python 中感知器算法的优点

尽管感知器方法不如某些更复杂的学习技术复杂,但它比其他方法具有优势,尤其是在特定情况下。以下是一些考虑使用 Python 感知器算法的原因

  1. 简单性: 感知器算法就像机器学习的“ABC”。它简单易懂,使其成为新手学习机器学习和分类的绝佳起点。
  2. 快速性: 感知器方法由于其简单性可以快速教学和做出预测。这种快速性对于需要及时或近实时响应的服务来说可能非常有价值。
  3. 低资源要求: 感知器算法不需要大量的计算机资源。它不需要一堆花哨的参数或复杂的结构,因此它可以在资源适度的系统上运行。
  4. 适用于线性可分数据: 当数据可以用直线(在 2D 中)或超平面(在更多维度中)整齐地分成两组时,此算法表现出色。在这些情况下,感知器可以可靠地找到解决方案。
  5. 易于理解: 感知器创建的模型非常清晰。您可以直接看到每个特征的重要性,这有助于您更好地理解数据。
  6. 在线学习: 感知器可以随着新数据的到来而不断适应。当您必须跟上不断变化的模式或处理流数据时,这非常方便。
  7. 二元分类: 当您必须将数据分类为仅两个类别时,感知器是您的首选工具。
  8. Python 友好: 感知器技术由于其众多模块和函数而非常适合 Python。这意味着您可以轻松地将其包含在任何涉及数据科学或机器学习的项目中。

然而,感知器方法也有几个缺点,就像生活中的任何事物一样。例如,与神经网络等复杂模型不同,它无法处理无法轻易分成两个独立组的数据。它的适应性也较差。

因此,它最适合数据分离简单的问题。对于更复杂的任务,您可能需要探索其他机器学习方法。

Python 中感知器算法的缺点

感知器算法就像计算机世界中的一个简单工具,用于在两件事之间做出决定。它在某些情况下非常方便,但也有其怪癖。以下是当我们与 Python 一起使用感知器工具时,它不太好的地方

  1. 它喜欢直线: 感知器是直线的粉丝。当它可以画一条直线将事物分成两组时,它工作得最好。然而,在现实中,许多数据并不遵守这些规则。它们是混乱的,不能很好地分割,这使得感知器用处不大。
  2. 不保证成功: 这个工具是不可预测的。有时,它会不断调整其设置,但不能给我们一个明确的答案。特别是当数据不友好时,它可能会永远尝试而不会说:“这是解决方案!”
  3. 对起始值挑剔: 感知器的“心情”会因起始值而异。如果我们从不同的猜测开始,我们可能会得到不同的答案,或者需要更长时间才能做出决定。
  4. 不喜欢曲线: 不幸的是,这个工具只理解直线。它无法处理答案不遵循直线路径的更复杂问题。我们需要更高级的工具,如支持向量机或神经网络。
  5. 没有“也许”: 感知器不处理“也许”。它不会告诉你某事发生的可能性。现代工具如逻辑回归或神经网络可以做到这一点。
  6. 单类别大脑: 它不擅长同时处理多个选项。如果您需要从两个以上的选项中进行选择,基本感知器需要升级。
  7. 对不平衡团队没有帮助: 如果数据中的一个组比另一个组大得多,感知器只是耸耸肩。它不会自动解决这个问题。我们必须自己进行更改。
  8. 噪音让它紧张: 当有很多令人困惑的数据时,感知器会变得不稳定。它可能无法给出最佳答案,或者可能需要很长时间才能做出决定。
  9. 特殊技巧靠自己: 如果你需要让数据更高级,感知器不会提供帮助。它无法简化情况或突出关键要素。这取决于你自己来完成。
  10. 感知器的学习方法相当简单。它可能无法像更高级的工具那样捕捉数据中所有棘手的东西。

在现实世界中,感知器更像一本历史书。学习它很有趣,也适合教学,但当我们进行严肃的计算机工作时,我们通常会转向更智能、更通用的工具。