3

I just started a Machine learning class and we went over Perceptrons. For homework we are supposed to: "Choose appropriate training and test data sets of two dimensions (plane). Use 10 data points for training and 5 for testing. " Then we are supposed to write a program that will use a perceptron algorithm and output:

  • a comment on whether the training data points are linearly separable
  • a comment on whether the test points are linearly separable
  • your initial choice of the weights and constants
  • the final solution equation (decision boundary)
  • the total number of weight updates that your algorithm made
  • the total number of iterations made over the training set
  • the final misclassification error, if any, on the training data and also on the test data

I have read the first chapter of my book several times and I am still having trouble fully understanding perceptrons.

I understand that you change the weights if a point is misclassified until none are misclassified anymore, I guess what I'm having trouble understanding is

  1. What do I use the test data for and how does that relate to the training data?
  2. How do I know if a point is misclassified?
  3. How do I go about choosing test points, training points, threshold or a bias?

It's really hard for me to know how to make up one of these without my book providing good examples. As you can tell I am pretty lost, any help would be so much appreciated.

4

2 回答 2

12

我将测试数据用于什么以及它与训练数据有何关系?

想想小时候的感知器。您想教孩子如何区分苹果和橙子。你向它展示 5 个不同的苹果(全是红色/黄色)和 5 个橙子(不同的形状),同时告诉它它在每一个转弯处看到了什么(“这是一个苹果。这是一个橙子)。假设孩子有完美的记忆力,如果你向他展示足够多的例子,它会学会理解是什么让苹果变成了苹果,让橙子变成了橘子。他最终会在你不告诉他的情况下开始使用元特征(如形状)。这就是感知器所做的。您向他展示了所有示例,从头开始,这称为新纪元

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

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

如果它与应有的不同。假设一个苹果有 0 类,一个橙子有 1 类(在这里你应该开始阅读单层/多层感知器以及多个感知器的神经网络如何工作)。网络将接受您的输入。它的编码方式与此无关,假设输入是字符串“apple”。你的训练集是 {(apple1,0), (apple2,0), (apple3,0), (orange1,1), (orange2,1).....}。由于您事先知道类,因此网络将为输入“apple1”输出 1 或 0。如果它输出 1,则执行 (targetValue-actualValue) = (1-0) = 1。在这种情况下,1 意味着网络给出了错误的输出。将此与 delta 规则进行比较,您将了解这个小方程是较大更新方程的一部分。如果您得到 1,您将执行权重更新。

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

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

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

感知器

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

现在回答关于选择训练点和测试点的最后一个问题:这非常困难,您可以根据经验做到这一点。在您所处的位置,您首先要实现简单的逻辑函数,如 AND、OR、XOR 等。这很简单。您将所有内容放入训练集中并使用与训练集相同的值进行测试(因为对于 x XOR y 等,只有 4 个可能的输入 00、10、01、11)。对于图像、音频等复杂数据,您将不得不尝试调整您的数据和功能,直到您觉得网络可以按照您的意愿使用它。

于 2015-02-01T13:45:15.577 回答
0

我将测试数据用于什么以及它与训练数据有何关系?

通常,要评估特定算法的执行情况,首先要对其进行训练,然后使用不同的数据来测试它在从未见过的数据上的执行情况。

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

您的训练数据具有标签,这意味着对于训练集中的每个点,您都知道它属于哪个类。

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

对于简单的问题,您通常会获取所有训练数据并将其拆分为 80/20 左右。您对 80% 进行训练并针对剩余的 20% 进行测试。

于 2015-01-31T21:00:56.363 回答