1、前言
之前讲了 Explorer 和 Experiment 模块功能,这一章讲一讲 KnowledgeFlow(知识流)界面的功能。
该模块功能在某些方面很实用,这里大概讲一下其使用原理:首先通过拉拽在画板上绘制机器学习流程图(右键各个模块图,可以设置参数),然后点击运行,整个算法会按照你绘制的流程图进行运行,最终给出结果。流程图示例如下:
2、界面介绍
如上图所示,总的来说共有 5 个区域,一一讲述:
- 区域 1:菜单项,主要使用的就是 data mining process,后面 Atribute summary 和 scatter plot matrix 呈现灰色是用来对数据集进行可视化,SQL viewer 是连接数据库,simple cLI 是一个简单的命令行界面,下面有输入框
- 区域 2:是各种类型功能框图,点击后可以在右边区域 3 中生成
- 区域 3:知识流画板,可以通过拖拽的方式获取各个模块,然后在画板上绘制流程图
- 区域 4:当区域 3 的流程图形成后,点击运行,整个算法就会跑起来了。
- 区域 5:状态与日志展示,当流程图算法跑起来后,会显示各个模块的运行状态
3、来个实例
说什么都不如跑一个 demo 来的清楚,下面我们来一步步生成。
注意:实例中每一步都是按照前言中的实例流程图的顺序一步步来的,看不懂,可以结合着该图分析。
3.1 第一步:选择数据加载器
如上图所示,在 datasources 中选择合适的数据加载器,一般是选择 arffLoader 或者 CSVLoader,点击选择的数据加载器后,鼠标化作十字,在右边的画板(区域 3)中点击即可形成一个加载器图标。
双击图标或者右键点击 config,可以打开配置界面,对加载器进行配置(老一套了,前面几个界面都用到过,不再细说了)。
这里要说一下,数据集加载器在配置了数据源后,右键就会出现一些其他功能:
send to perspective,是指将数据集加载后,将数据发送给可视化工具:
也就是上面两个灰色的部分,一个是属性总结,一个是矩阵图。
3.2 第二步:选择标签分配器
标签分配器就是让你选择当前数据集哪一列属性是将要预测的标签列。
这个是在评估器菜单里面,我总觉得 weka 这里设计的非常不合理,搞不懂这个为什么会在评估器菜单里面,感觉不太关联:
这个先不要配置,因为要和前面的数据集加载器联系起来,才能进行配置(否则配置下拉框中不会显示数据集的所有列,也就没有办法选择标签列)
3.3 第三步:为两者建立联系
单击数据集加载器图标,然后右键选择 dataset,如下图所示:
点击之后,在数据加载器图标上就会出现一根连接线,引导连接线指向标签分配器即可完成连接。
完成之后,可以看到连线上面是数据集,说明数据加载器输出的是 dataset,而类别分配器的输入是数据集。
事实上,每个图标右键,都可以看到类表中有两个类别:Edit 和 Connections,前者是编辑,后者是进行连接输出数据的;如上图中,数据集加载器除了可以输出数据集,还可以输出实例,点击 Instance,照样可以出现连接线。
连接线删除方式:
在连接线上方右键,出现后,选择连线,即可删除。
说实话,在建立连接时,当时难倒我了,我当时怎么也找不到如何连接,原因就在于如果界面中不存在可以连接的图标,就不会出现连接线!!!!
我一开始,拉了一个数据加载器和一个分类器,想要将两者连起来,但是怎么也无法出现连接线,当时一度以为是 weka 出现 bug 了,后来在 weka 给的实例上却发现可以出现连接线,对比了一下才明白问题所在。
3.4 第四步:选择交叉验证器
在评估器(Evaluation)菜单中选择交叉验证器(CrossValidationFoldMaker)。
标签分配器与之建立连接,输出为 dataset,操作和上面一致,不再细说。
3.5 第五步:选择分类器
在分类器菜单中选择决策树 J48,同时与前面的交叉验证器建立联系。
注意:这里要引出两条线——测试集和训练集,如下图所示:
如果只引出一条线,则在分类器这里运行就结束了,无法进行测试,后面即使还有步骤也不会再执行,因为没有测试集。
3.6 第六步:选择分类器性能评估器
在评估器菜单中,选择分类器性能评估器,分类器 J48 引出 batchClassify 连线,连接分类器性能评估器。
3.7 第七步:选择模型性能图表和文本可视化器
在可视化菜单中,选择模型性能图表和文本可视化器:
两个一左一右,与第五步的分类器性能评估器连接起来:
3.8 第八步:添加注释
如上所示,左边红色方框是用来添加注释的,不过有一点需要注意:不要用中文,因为保存之后,再打开就变成了了?????。
右边圆框是用来打开保存好的流程图文件的。
3.9 第九步:运行
4、注意事项
4.1 连线
只有当界面中存在可以连线的图标时,才会出现连线标准,如只有数据加载器和分类器,则不行。
4.2 注释
注释最好是英文,否则保存后,再加载会变成???,具体原因暂时不明。
4.3 内存
加载了一个自己的数据集(kdd99),结果运行总是报错:
网上找了一下,发现都是提示要修改 Runweak.ini 中的 maxheap,但是我的文件中并没有啊,只有一个 maxstack,尝试修改了一下,发现不行;尝试添加 maxheap 也不行。
最后看到了存在 javaOpts,进行修改发现可以!!修改如下:
另外,有一个问题就是发现使用交叉验证这个模块,使用内存太多了,建议直接使用切分数据集得了:
后续更新:
对于内存设置还可以直接在界面上进行修改:
点击进入系统设置:
找到上面这行,双击进入修改状态,直接修改即可。
4.4 增量学习
这个是 knowledgeFlow 与 Explorer 的差别之一,knowledgeFlow 可以进行增量学习和批量学习,而 Explorer 只能进行批量学习,官方文档原话:
这个也是为什么说 explorer 必须要将数据集全部加载到内存中才能运行,受限于内存大小;而 knowledgeFlow 则不需要,它可以递增的添加数据(我并没有试验过,是不是受限于内存大小,只是理论上推测)
4.5 实例
weka 本身给出了很多实例,在菜单中:
如上所示,点击红框部分,就会出现一个菜单,里面都是 weka 内置的流程实例,点击其中一个就会出来,只要配置好参数就可以运行。
评论