我刚刚开始了一个机器学习课,我们去了Perceptrons。对于家庭作业,我们应该: "选择适当的培训和测试两个维度(平面)的数据集。使用10个数据点进行培训,使用5个进行测试。 "然后我们应该编写一个程序,使用感知器算法和输出:
我已多次阅读本书的第一章,但我仍然无法完全理解感知器。
据我所知,如果一个点被错误分类,直到没有人被错误分类,你就会改变权重,我想我理解的是
如果没有我的书提供好的例子,我真的很难知道如何构成其中的一个。你可以告诉我,我很失落,任何帮助都会非常感激。
答案 0 :(得分:11)
我如何使用测试数据以及测试数据与测试数据的关系 培训数据?
将Perceptron视为年幼的孩子。你想教孩子如何区分苹果和橘子。你会告诉它每个转弯处看到的东西(“这是一个苹果。这是一个橙色)。你假设孩子有完美的记忆,你会看到5个不同的苹果(全红色/黄色)和5个橙色(不同形状)。如果你向他展示足够多的例子,它将学习如何理解苹果是苹果和桔子橙的原因。他最终会开始使用meta- 功能(比如形状),而不会实际告诉他。这是Perceptron的作用。在你向他展示所有例子后,你从头开始,这被称为新的纪元。
当你想测试孩子的知识时会发生什么?你表现出新的东西。青苹果(不仅是黄色/红色),葡萄柚,也许是西瓜。为什么不在训练期间向孩子展示与以前完全相同的数据?因为孩子有完美的记忆,它只会告诉你你告诉他的是什么。您不会看到概括从已知看不见数据有多好,除非您在培训期间从未向他展示过不同的培训数据。如果孩子在测试数据上表现糟糕,但在训练数据上表现出100%的表现,那么你就会知道他什么都没学到 - 它只是重复了他在训练中被告知的内容 - 你训练过他太长了,他只是记住你的例子,却没有理解是什么让苹果变成苹果,因为你给了他太多细节 - 这就是所谓的过度拟合。为防止Perceptron仅(!)识别训练数据,您必须在合理的时间停止训练,并在训练和测试组的大小之间找到一个良好的平衡。
我如何知道某一点是否被错误分类?
如果它与它应该是的不同。假设一个苹果有0级,橙色有1个(这里你应该开始阅读Single / MultiLayer Perceptrons以及多个Perceptrons的神经网络是如何工作的)。网络将接受您的输入。如何编码与此无关,让我们说输入是一个字符串“apple”。那么你的训练集是{(apple1,0),(apple2,0),(apple3,0),(orange1,1),(orange2,1).....}。由于您事先知道了该类,因此网络将输出1或0作为输入“apple1”。如果输出1,则执行(targetValue-actualValue)=(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)。对于图像,音频等复杂数据,您必须尝试调整数据和功能,直到您觉得网络可以按照您的意愿使用它。
答案 1 :(得分:0)
我如何使用测试数据以及它与训练数据的关系?
通常,为了评估特定算法的执行情况,首先对其进行训练,然后使用不同的数据来测试它对以前从未见过的数据的处理效果。
我如何知道某一点是否被错误分类?
您的训练数据有标签,这意味着对于训练集中的每个点,您都知道它属于哪个类。
如何选择测试点,训练点,阈值或偏差?
对于简单问题,您通常会获取所有训练数据并将其拆分为80/20左右。你训练80%,并测试剩余的20%。