Weka源码分析(2)——core.converters package分析
来源:互联网 发布:mac 购买icloud空间 编辑:程序博客网 时间:2024/06/08 00:49
该package的主要目标是将外部存在的各种各式的数据与weka内部的数据表示进行相互转换,以解决数据的导入导出问题。主要含有Loader和Saver,一个负责加载,一个负责导出。
1. Loader及其继承体系
Loader的继承体系如下:
Loader是个Interface,其接口定义如下:
Loader定义了3种数据加载的模式常量,NONE/BATCH/INCREMENTAL。另外,定义了设置2种类型的数据源,File/InputStream的方法。获取Header的方法getStructure和实际数据的方法getDataSet;和获取下一行数据的方法getNextInstance
1.1 AbstractLoader
提供了所有Loader的默认实现,内部定义了m_retrieval field,用来保存Loader中定义的三种retrieval模式之一。对2个setSource方法提供了默认实现,该实现直接抛出异常,避免子类误用,这2个方法是为基于File的Loader子类设置的。
AbstractFileLoader是所有基于File的Loader的父类,其定义了如下fields:
1.2 AbstractFileLoader的子类
所有File-based Loader的实现:
1.3 DatabaseLoader
基于JDBC的,从数据库中加载数据的Loader子类。
1.3.1 fields
DatabaseLoader的field主要含有如下几类:
1. 与数据库connection相关的属性,m_URL、m_User、m_Password、m_CustomPropsFile
2. 读取模式控制字段,m_pseudoIncremental(实际是批量加载到内存,但是对weka是透明的)、m_checkForTable、m_nominalToStringLimit
3. 读取表数据时用到查询和字段,m_query、m_Keys、m_orderBy、m_idColumn、
4. 读取过程中的状态数据,m_firstTime、m_counter
5. 读取到的结果数据,m_structure、m_datasetPseudoInc、m_oldStructure、m_nominalStrings
1.3.2 methods
这里需要注意的是,DatabaseLoader并没有override AbstractLoader中的setSource(File)和setSource(InputStream)方法,因为它是从数据库中加载,不是面向File和InputStream的,这也是AbstractLoader中为这2个方法提供的默认实现都直接throw exeption的原因——避免DatabaseLoader这样的子类误用这些方法。
DataBase中的数据类型到不同type的Attribute之间的映射关系如下,参见readInstance(ResultSet)方法:
1.4 TextDirectoryLoader
从一个含有text文件的目录中加载Arff文件的AbstractLoader的实现类。由于用的不多,不做过多分析。
1.4.1 fields
1.4.2 methods
2 Saver
Saver的继承体系如下,可以看出,基本与Loader的继承体系一一对应。
同Loader理,Save也定义了3种写入模式,NONE/BATCH/INCREMENTAL,该模式会影响写入的执行过程。Loader接口还定义set写入目的地的基于File和Stream的方法,以及关键的执行写入的writeBatch和writeIncremental方法。
2.1 AbstractSaver
2.1.1 fields
2.1.2 methods
略过
3 Capability
算法和数据的适应性能力匹配的类。
Capabilities内部定义了一个Enum,用来枚举可供检测的Capability,如果不匹配,应该Fail-Fast。
- Weka源码分析(2)——core.converters package分析
- Weka源码分析(1)——模块划分及core package分析
- weka源码分析
- weka源码分析
- WEKA学习——CSVLoader 实例训练 和 源码分析
- Weka源码分析(4)——算法系统
- nginx源码分析—core模块callback
- nginx源码分析—core模块callback
- nginx源码分析—core模块callback
- Cordova CLI源码分析(二)——package.json
- Weka开发——REPTree源代码分析
- Weka算法Classifier-meta-Bagging源码分析
- Weka算法Classifier-trees-RandomTree源码分析
- Weka算法Clusterers-DBSCAN源码分析
- Weka算法Classifier-meta-AdditiveRegression源码分析
- Weka算法Clusterers-Xmeans源码分析
- Weka算法Classifier-trees-RandomTree源码分析
- Weka算法Classifier-meta-Bagging源码分析
- easyui datagrid组件 单击行 让他不选中 只有单击checkbox的时候才选中
- svn常用指令
- 关键词推荐的几种常见相关性计算方法
- 信号的阻塞
- 特征点检测学习_2(surf算法)
- Weka源码分析(2)——core.converters package分析
- lua coroutine
- laravel中关闭CSRF的方法
- 如何根据条件索搜索公众号某段时间内的文章信息,最权威的数据给您.......
- 关于原反补
- 慢查询定位
- 一种根据关键字进行分类的文本分类算法
- 最详细的 Android Toolbar 开发实践总结
- 微信群发接口 开发的各种问题