本节内容将通过图形界面。使用MOA来学习几种分类器模型,并以不同方式对其进行评估。初始MOA GUI窗口下图所示。
点击 Configure
设置一个任务。可以通过最上方的下拉菜单改变任务类型,我们这里是 LearnModel
。
可以看见其默认的 learner
学习模型是 NaiveBayes
,可以点击 Edit
,从顶部的下拉菜单中选择不同的学习模型,但是现在保留 NaiveBayes
。
再往下,是 stream
数据流,默认是RandomTreeGenerator
,用对应的 Edit
改成 WaveformGenerator
数据流,从波形的集合中产生实例。将实例的数量从10 000 000改成1 000 000。最后指定 taskResultFile
,例如 modelNB.moa
,MOA模型会把模型输出到该文件。
现在点击 OK
,然后点击 Run
启动这项任务。中间面板会显示文字输出,这个任务中每过10 000输出一次。刚刚运行的任务是:
LearnModel -l bayes.NaiveBayes
-s generators.WaveformGenerator
-m 1000000 -O modelDB.moa
提示:如果你快速连续点击Run两次,就会生成同时运行的任务。
点击 Configure
,把学习模型改成 Hoeffding
树,并且输出到文件 modelHT.moa
:
LearnModel -l trees.HoeffdingTree
-s generators.WaveformGenerator
-m 1000000 -O modelHT.moa
然后运行,现在有两个模型存储在磁盘,即 modelNB.moa
和 modelHT.moa
。
接下来用 WaveformGenerator
生成1 000 000个新实例来评估朴素贝叶斯模型,可以通过以下任务命令完成:
EvaluateModel -m file:modelDB.moa
-s (generators.WaveformGenerator -i 2) -i 1000000
-i 2 给波形生成器设置了一个不同的随机种子。在 Configure
面板中设置其他参数,在顶部,吧任务设置成 EvaluateModel
,然后把数据流模型配置成 WaveformGenerator
,以及把 instanceRandomSeed
设置成2,但令人遗憾的是暂时无法从文件中读取模型。
问题还是可以解决的。先点击 确定
返回到MOA主页面,点击右键选择 Copy configuration to clipborad
,编辑内容继续写下 -m file:modelDB.moa
,然后选择 Enter configuration
并把剪切板的内容粘贴到新的配置中,然后执行。
再将 file:modelHT.moa
替换,同样地方法再次运行。
很明显看到:
NaiveBayes
模型正确分类的比例是80.4%左右Hoeffding
树模型的正确分类的比例是84.4%左右Hoeffding
的性能更好在MOA中可以嵌套命令行,比如,LearnModel
和 EvaluateModel
的步骤可以合并为一行,避免额外产生一个文件。但是只能编辑 Configure
命令行。
EvaluateModel -m (LearnModel -l meta.OzaBag
-s generators.WaveformGenerator -m 1000000)
-s (generators.WaveformGenerator -i 2) -i 1000000
通过复制该命令,点击右键选择 Enter configuration
,将其粘贴为 Configure
文本。
OzaBag
的正确率是 85.8%左右。
EvaluatePeriodicHeldOutTest -l trees.HoeffdingTree
-s generators.WaveformGenerator
-n 100000 -i 10000000 -f 1000000
其中,EvaluatePeriodicHeldOutTest
任务训练模型时,在一个保留测试集上周期性地截取性能快照。上面命令是在 WaveformGenerator
的 10 000 000 个样本上,训练 HoeffdingTree
分类器。首先保留前 100 000 个样本作为测试集;之后每 1 000 000个样本在保留集上进行一次测试。
最终的准确率是 84.9% ,最终的Kappa统计是77.35%
先序评估法首先在任一实例上评估,然后用作训练。这里是一个 EvaluatePrequential
任务,在 WaveformGenerator
的 1 000 000 个样本上训练一个 HoeffdingTree
分类器,之后每 10 000 个样本创建一个 100 行的csv文件:
EvaluatePrequential -l trees.HoeffdingTree
-s generators.WaveformGenerator
-i 1000000 -f 10000
EvaluatePrequential -l bayes.NaiveBayes
-s generators.WaveformGenerator
-i 1000000 -f 10000
Hoeffding
树的性能在前面会低于朴素贝叶斯,并不是一直领先。Hoeffding
树的最终Kappa统计是 75.89%。默认情况下,先序评估法显示具有1000个实例的滑动窗口的性能,从而创建了一个跳跃的锯齿状的学习曲线。在 Configure
面板中的评估器:你可以看到使用的是 WindowClassificationPerformanceEvaluator
,窗口大小为1000。作为替代,选择 BasicClassificationPerformanceEvaluator
,从数据流的第一样本开始,使用每一个样本进行评估:
EvaluatePrequential -l trees.HoeffdingTree
-s generators.WaveformGenerator
-e BasicClassificationPerformanceEvaluator
-i 1000000 -f 10000
EvaluatePrequential -l bayes.NaiveBayes
-s generators.WaveformGenerator
-e BasicClassificationPerformanceEvaluator
-i 1000000 -f 10000
可以看到这项任务肯定能够保证产生一个平滑曲线,因为随着时间发展,单个样本对于整体平均的作用越来越不显著。
Hoeffding
树的性能在前面会低于朴素贝叶斯,并不是一直领先。Hoeffding
树的最终Kappa统计是 74.50%。