Weka源码分析(2)——core.converters package分析

该package的主要目标是将外部存在的各种各式的数据与weka内部的数据表示进行相互转换,以解决数据的导入导出问题。主要含有Loader和Saver,一个负责加载,一个负责导出。

1. Loader及其继承体系

Loader的继承体系如下:
Loader继承体系
Loader是个Interface,其接口定义如下:
Loader的类图
Loader定义了3种数据加载的模式常量,NONE/BATCH/INCREMENTAL。另外,定义了设置2种类型的数据源,File/InputStream的方法。获取Header的方法getStructure和实际数据的方法getDataSet;和获取下一行数据的方法getNextInstance

1.1 AbstractLoader

AbstactLoader类图
提供了所有Loader的默认实现,内部定义了m_retrieval field,用来保存Loader中定义的三种retrieval模式之一。对2个setSource方法提供了默认实现,该实现直接抛出异常,避免子类误用,这2个方法是为基于File的Loader子类设置的。
AbstractFileLoader是所有基于File的Loader的父类,其定义了如下fields:

field name作用备注
m_FileCWD,当前工作路径
m_structure解析后的header
m_sourceFile存储数据的文件
m_useRelativePath如何解释m_sourceFile的路径
m_env用来将形如”${}”的变量替换成实际值以增加系统的可移植性

1.2 AbstractFileLoader的子类

所有File-based Loader的实现:

Class职责备注
ArffLoader加载Arff格式文件
XRFFLoader加载XML形式的Arff文件
C45Loader加载C4.5格式的文件.names和.data文件分开
CSVLoaderCSV格式的文件
JSONLoaderJSON格式的文件
LibSVMLoader加载LibSVM需要的格式文件参见libSVM网站
SVMLightLoader加载svm light格式的文件参见svmLight网站
MatlabLoader加载Matlab格式文件
SerializedInstancesLoader加载java ObjectStream序列化之后的Instances

1.3 DatabaseLoader

基于JDBC的,从数据库中加载数据的Loader子类。

1.3.1 fields

DatabaseLoader的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方法定义
这里需要注意的是,DatabaseLoader并没有override AbstractLoader中的setSource(File)和setSource(InputStream)方法,因为它是从数据库中加载,不是面向File和InputStream的,这也是AbstractLoader中为这2个方法提供的默认实现都直接throw exeption的原因——避免DatabaseLoader这样的子类误用这些方法。
DataBase中的数据类型到不同type的Attribute之间的映射关系如下,参见readInstance(ResultSet)方法:

DataBase TypeAttribute Type备注
STRINGString/Nominal实际Instance中存储码值,int类型,具体String还是nominal,受参数nominalToStringLimit参数控制,超过该值weka认为是取值过多,是String类型
TEXTString/Nominal
BOOLNominaltrue:1.0,false:0.0
BYTENumericup cast to double
SHORTNumericup cast to double
INTEGERNumericup cast to double
LONGNumericup cast to double
DATEDate存储Date.getTime()值
TIMEDate存储Time.getTime()值

1.4 TextDirectoryLoader

从一个含有text文件的目录中加载Arff文件的AbstractLoader的实现类。由于用的不多,不做过多分析。

1.4.1 fields

TextDirectoryLoader字段定义

1.4.2 methods

TextDirectoryLoader方法定义

2 Saver

Saver的继承体系如下,可以看出,基本与Loader的继承体系一一对应。
Saver继承体系
Saver类图
同Loader理,Save也定义了3种写入模式,NONE/BATCH/INCREMENTAL,该模式会影响写入的执行过程。Loader接口还定义set写入目的地的基于File和Stream的方法,以及关键的执行写入的writeBatch和writeIncremental方法。

2.1 AbstractSaver

2.1.1 fields

AbstractSaver字段定义

2.1.2 methods

略过

3 Capability

算法和数据的适应性能力匹配的类。
Capability类图
Capabilities内部定义了一个Enum,用来枚举可供检测的Capability,如果不匹配,应该Fail-Fast。
Capability内部定义的Enum

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值