在Weka中训练多层感知器解决XOR问题的逐步指南?

我刚开始使用Weka,遇到了一些初步的困难。

我们已经准备好了训练集:

@relation PerceptronXOR@attribute X1 numeric@attribute X2 numeric@attribute Output numeric@data1,1,-1-1,1,11,-1,1-1,-1,-1

第一步我想做的只是训练,然后使用Weka的图形界面来分类一组数据。我目前所做的步骤如下:

使用Weka 3.7.0版本。

  1. 启动GUI界面。
  2. 选择“Explorer”。
  3. 打开文件 -> 选择我的arff文件。
  4. 切换到“Classify”标签页。
  5. 选择“Use training set”单选按钮。
  6. 选择 -> 函数 -> 多层感知器
  7. 点击顶部的“multilayer perceptron”文本以打开设置。
  8. 将隐藏层设置为“2”。(如果GUI选择为true,这表明这是我们想要的正确网络)。点击确定。
  9. 点击开始。

输出结果如下:

=== Run information ===Scheme:       weka.classifiers.functions.MultilayerPerceptron -L 0.3 -M 0.2 -N 500 -V 0 -S 0 -E 20 -H 2 -RRelation:     PerceptronXORInstances:    4Attributes:   3              X1              X2              OutputTest mode:    evaluate on training data=== Classifier model (full training set) ===Linear Node 0    Inputs    Weights    Threshold    0.21069691964232443    Node 1    1.8781169869419072    Node 2    -1.8403146612166397Sigmoid Node 1    Inputs    Weights    Threshold    -3.7331156814378685    Attrib X1    3.6380519730323164    Attrib X2    -1.0420815868133226Sigmoid Node 2    Inputs    Weights    Threshold    -3.64785119182632    Attrib X1    3.603244645539393    Attrib X2    0.9535137571446323Class     Input    Node 0Time taken to build model: 0 seconds=== Evaluation on training set ====== Summary ===Correlation coefficient                  0.7047Mean absolute error                      0.6073Root mean squared error                  0.7468Relative absolute error                 60.7288 %Root relative squared error             74.6842 %Total Number of Instances                4     

奇怪的是,500次迭代在学习率0.3时无法降低误差,而在学习率0.1时进行5000次迭代却可以,所以我们采用后者。

现在使用测试数据集:

@relation PerceptronXOR@attribute X1 numeric@attribute X2 numeric@attribute Output numeric@data1,1,-1-1,1,11,-1,1-1,-1,-10.5,0.5,-1-0.5,0.5,10.5,-0.5,1-0.5,-0.5,-1
  1. 选择“Supplied test set”单选按钮
  2. 选择我的测试集arff文件。
  3. 点击开始。
=== Run information ===Scheme:       weka.classifiers.functions.MultilayerPerceptron -L 0.1 -M 0.2 -N 5000 -V 0 -S 0 -E 20 -H 2 -RRelation:     PerceptronXORInstances:    4Attributes:   3              X1              X2              OutputTest mode:    user supplied test set:  size unknown (reading incrementally)=== Classifier model (full training set) ===Linear Node 0    Inputs    Weights    Threshold    -1.2208619057226187    Node 1    3.1172079341507497    Node 2    -3.212484459911485Sigmoid Node 1    Inputs    Weights    Threshold    1.091378074639599    Attrib X1    1.8621040828953983    Attrib X2    1.800744048145267Sigmoid Node 2    Inputs    Weights    Threshold    -3.372580743113282    Attrib X1    2.9207154176666386    Attrib X2    2.576791630598144Class     Input    Node 0Time taken to build model: 0.04 seconds=== Evaluation on test set ====== Summary ===Correlation coefficient                  0.8296Mean absolute error                      0.3006Root mean squared error                  0.6344Relative absolute error                 30.0592 %Root relative squared error             63.4377 %Total Number of Instances                8     

为什么无法正确分类这些数据?

是因为它在训练数据上很快就达到了局部最小值,并且“不知道”这并不适合所有情况吗?

问题如下:

  1. 为什么500次迭代在学习率0.3时不起作用?对于这样一个简单的问题,这似乎很奇怪。
  2. 为什么在测试集上失败了?
  3. 如何传递一组数据进行分类?

回答:

使用0.5的学习率,在500次迭代下可以解决这两个例子。学习率决定了对新例子的权重大小。显然,这个问题比较困难,使用两个隐藏层很容易陷入局部最小值。如果你使用低学习率和高迭代次数,学习过程会更加保守,更有可能找到一个好的最小值。

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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