我刚开始使用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版本。
- 启动GUI界面。
- 选择“Explorer”。
- 打开文件 -> 选择我的arff文件。
- 切换到“Classify”标签页。
- 选择“Use training set”单选按钮。
- 选择 -> 函数 -> 多层感知器
- 点击顶部的“multilayer perceptron”文本以打开设置。
- 将隐藏层设置为“2”。(如果GUI选择为true,这表明这是我们想要的正确网络)。点击确定。
- 点击开始。
输出结果如下:
=== 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
- 选择“Supplied test set”单选按钮
- 选择我的测试集arff文件。
- 点击开始。
=== 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
为什么无法正确分类这些数据?
是因为它在训练数据上很快就达到了局部最小值,并且“不知道”这并不适合所有情况吗?
问题如下:
- 为什么500次迭代在学习率0.3时不起作用?对于这样一个简单的问题,这似乎很奇怪。
- 为什么在测试集上失败了?
- 如何传递一组数据进行分类?
回答:
使用0.5的学习率,在500次迭代下可以解决这两个例子。学习率决定了对新例子的权重大小。显然,这个问题比较困难,使用两个隐藏层很容易陷入局部最小值。如果你使用低学习率和高迭代次数,学习过程会更加保守,更有可能找到一个好的最小值。