理解感知器

我刚开始上机器学习课程,我们学习了感知器。作业要求我们:“选择两维(平面)的适当训练和测试数据集。使用10个数据点进行训练,5个用于测试。”然后我们需要编写一个程序,使用感知器算法并输出以下内容:

  • 关于训练数据点是否线性可分的评论
  • 关于测试点是否线性可分的评论
  • 你初始选择的权重和常数
  • 最终解方程(决策边界)
  • 你的算法进行的权重更新总数
  • 在训练集上进行的总迭代次数
  • 最终的误分类错误,如果有的话,在训练数据和测试数据上

我已经多次阅读了书中的第一章,但我仍然难以完全理解感知器。

我明白,如果一个点被误分类,你会更改权重,直到没有点被误分类,我想我难以理解的是

  1. 测试数据的用途是什么,它与训练数据有什么关系?
  2. 我如何知道一个点是否被误分类?
  3. 我如何选择测试点、训练点、阈值或偏置?

没有书中提供好的例子,我很难知道如何构建这些。显然,我感到非常迷茫,任何帮助都将非常感激。


回答:

测试数据的用途是什么,它与训练数据有什么关系?

把感知器想象成一个小孩。你想教他区分苹果和橙子。你给他展示5个不同的苹果(全是红/黄色的)和5个橙子(形状各异),并在每一步告诉他这是什么(“这是一个苹果。这是一个橙子”)。假设这个孩子有完美的记忆力,如果你给他展示足够多的例子,他将学会理解什么让苹果成为苹果,什么让橙子成为橙子。他最终会开始使用你没有明确告诉他的元特征(如形状)。这正是感知器所做的。在你展示完所有例子后,你从头开始,这称为新的周期

当你想测试这个孩子的知识时会发生什么?你给他展示新的东西。一个绿苹果(不仅仅是黄/红色的),一个葡萄柚,或者一个西瓜。为什么不在训练时给他展示完全相同的数据呢?因为孩子有完美的记忆力,他只会告诉你你告诉他的内容。你不会看到他从已知数据到未见数据的泛化能力,除非你有不同的训练数据,这些数据在训练期间你从未展示给他。如果孩子在测试数据上的表现很差,但在训练数据上的表现为100%,你就会知道他什么也没学到——他只是在重复训练期间被告知的内容——你训练他太久了,他只是记住了你的例子,而没有理解什么让苹果成为苹果,因为你给了他太多细节——这被称为过拟合。为了防止你的感知器仅(!)识别训练数据,你必须在合理的时间停止训练,并找到训练集和测试集大小的良好平衡。

我如何知道一个点是否被误分类?

如果它与应有的不同。假设苹果的类别为0,橙子的类别为1(在这里你应该开始阅读单层/多层感知器以及多个感知器的神经网络是如何工作的)。网络将接收你的输入。输入如何编码并不重要,假设输入是一个字符串“apple”。你的训练集则是{(apple1,0), (apple2,0), (apple3,0), (orange1,1), (orange2,1)…..}。由于你事先知道类别,网络将对输入“apple1”输出1或0。如果它输出1,你执行(目标值-实际值)=(1-0)=1。在这种情况下,1表示网络给出了错误的输出。将其与delta规则进行比较,你会理解这个小方程是更大更新方程的一部分。如果你得到1,你将执行权重更新。如果目标值和实际值相同,你总是会得到0,你知道网络没有误分类。

我如何选择测试点、训练点、阈值或偏置?

实际上,偏置和阈值并不是“选择”的。偏置像任何其他单元一样被训练,使用一个简单的“技巧”,即使用值为1的额外输入单元作为偏置——这意味着实际的偏置值被编码在这个额外单元的权重中,我们使用的算法将确保它自动学习偏置。

根据你的激活函数,阈值是预先确定的。对于一个简单的感知器,分类将如下进行:

感知器

由于我们使用二进制输出(在0和1之间),将阈值设在0.5是一个好的开始,因为这是范围[0,1]的正中间。

现在来回答你关于选择训练点和测试点的最后一个问题:这相当困难,你通过经验来做。在你目前的阶段,你可以从实现简单的逻辑函数如AND、OR、XOR等开始。在那里这是很简单的。你把所有东西都放在训练集中,并用与训练集相同的值进行测试(因为对于x XOR y等,只有4种可能的输入00、10、01、11)。对于复杂数据如图像、音频等,你需要尝试和调整你的数据和特征,直到你觉得网络可以像你希望的那样好地处理它们。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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