5

我刚刚开始使用 Weka,并且在第一步中遇到了麻烦。

我们有我们的训练集:

@relation 感知器异或
@attribute X1 数字
@attribute X2 数字
@attribute 输出数字
@数据
1,1,-1
-1,1,1
1,-1,1
-1,-1,-1

我想做的第一步就是训练,然后使用 Weka gui 对集合进行分类。到目前为止我一直在做什么:

使用 Weka 3.7.0。

  1. 启动图形用户界面。
  2. 探险家。
  3. 打开文件-> 选择我的 arff 文件。
  4. 分类选项卡。
  5. 使用训练集单选按钮。
  6. 选择-> 函数>multilayer_perceptron
  7. 单击顶部的“多层感知器”文本以打开设置。
  8. 将隐藏层设置为“2”。(如果选择 gui 为真,则表明这是我们想要的正确网络)。单击确定。
  9. 点击开始。

输出:

=== 运行信息 ===

方案:weka.classifiers.functions.MultilayerPerceptron -L 0.3 -M 0.2 -N 500 -V 0 -S 0 -E 20 -H 2 -R
关系:PerceptronXOR
实例:4
属性:3
              X1
              X2
              输出
测试模式:对训练数据进行评估

=== 分类器模型(完整的训练集)===

线性节点 0
    输入权重
    阈值 0.21069691964232443
    节点 1 1.8781169869419072
    节点 2 -1.8403146612166397
Sigmoid 节点 1
    输入权重
    阈值 -3.7331156814378685
    属性 X1 3.6380519730323164
    属性 X2 -1.0420815868133226
乙状结肠节点 2
    输入权重
    阈值 -3.64785119182632
    属性 X1 3.603244645539393
    属性 X2 0.9535137571446323
班级
    输入
    节点 0


构建模型所需时间:0 秒

=== 训练集评估 ===
=== 总结 ===

相关系数 0.7047
平均绝对误差 0.6073
均方根误差 0.7468
相对绝对误差 60.7288 %
根相对平方误差 74.6842 %
实例总数 4     

0.3 的 500 次迭代并没有得到错误,但 5000 @ 0.1 的错误似乎很奇怪,所以让我们继续吧。

现在使用测试数据集:

@relation 感知器异或
@attribute X1 数字
@attribute X2 数字
@attribute 输出数字
@数据
1,1,-1
-1,1,1
1,-1,1
-1,-1,-1
0.5,0.5,-1
-0.5,0.5,1
0.5,-0.5,1
-0.5,-0.5,-1
  1. “提供的测试集”的单选按钮
  2. 选择我的测试集 arff。
  3. 点击开始。
=== 运行信息 ===

方案:weka.classifiers.functions.MultilayerPerceptron -L 0.1 -M 0.2 -N 5000 -V 0 -S 0 -E 20 -H 2 -R
关系:PerceptronXOR
实例:4
属性:3
              X1
              X2
              输出
测试模式:用户提供的测试集:大小未知(增量读取)

=== 分类器模型(完整的训练集)===

线性节点 0
    输入权重
    阈值-1.2208619057226187
    节点 1 3.1172079341507497
    节点 2 -3.212484459911485
Sigmoid 节点 1
    输入权重
    阈值 1.091378074639599
    属性 X1 1.8621040828953983
    属性 X2 1.800744048145267
乙状结肠节点 2
    输入权重
    阈值 -3.372580743113282
    属性 X1 2.9207154176666386
    属性 X2 2.576791630598144
班级
    输入
    节点 0


构建模型所需时间:0.04 秒

=== 测试集评估 ===
=== 总结 ===

相关系数 0.8296
平均绝对误差 0.3006
均方根误差 0.6344
相对绝对误差 30.0592 %
根相对平方误差 63.4377 %
实例总数 8     

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

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

问题。

  1. 为什么 500 @ 0.3 不起作用?对于这样一个简单的问题似乎很奇怪。
  2. 为什么它在测试集上失败。
  3. 如何传入一个集合进行分类?
4

1 回答 1

4

对于这两个示例,使用 0.5 的学习率可以完成 500 次迭代。学习率是它为新示例赋予的权重。显然这个问题很困难,很容易通过 2 个隐藏层进入局部最小值。如果您使用具有高迭代次数的低学习率,则学习过程将更加保守,并且更有可能达到良好的最小值。

于 2014-03-07T12:30:56.783 回答