Weka manual 3.6翻译: 16.2 数据载入

最近谷歌译员访问很是不顺,翻译只能先放着了 
这篇的格式也不调了,每次粘贴过来都要手动调整格式,太累了,也不知是我格式的问题还是OSC博客的问题

看不顺的话可以点这,会好些。

16.2 数据载入

在任何过滤器,分类的聚类器可以应用之前,数据必须存在。Weka能从文件(各种格式的文件)和从数据库中加载数据。在后者的情况下,假定在该数据库连接设置和工作。如何正确配置Weka与JDBC(Java数据库连接)URL的详细信息,请参阅第13章详细说明。

若要使用本节中介绍的功能, wekaexamples.core.converters 包的 WEKA实例 集合有例子。

下面的一些类用于在内存中存储数据:

      weka.core.Instances-拥有一个完整的数据集。这个数据结构是基于行的;单一的行可以通过从0开始索引的instance(int) 方法获得。有关列的信息可以通过attribute(int)方法获得。此方法返回 weka.core.Attribute对象(见下文)。

      weka.core.Instance。-封装了一个单行。它基本上是一个双原语数组的包装。因为这个类不包含关于列的类型的任何信息,它总是需要访问weka.core.Instances对象(见方法 datasetsetDatasetweka.core.SparseInstance 类在稀疏数据的情况下使用。

      weka.core.Attribute -拥有数据集中单个列的类型信息。它存储属性的类型,以及标称属性的标签,字符串属性可能的值或关系属性的数据集(这些也都是weka.core.Instances对象)。

16.2.1 从文件加载数据

当从文件加载数据时,可以让WEKA根据文件的扩展名选择合适的加载器(可用的加载器在 weka.core.converters 包中),或可以直接使用正确的装载机。如果文件没有正确的扩展名,应使用后一种方法。

DataSource类(内部类的 weka.core.converters的。ConverterUtils 类),可用于有适当的文件扩展名的文件中读取数据。{0}下面是一些例子:{/0}

import weka.core.converters.ConverterUtils.DataSource; import weka.core.Instances; ...

Instances data1 = DataSource.read("/some/where/dataset.arff");

Instances data2 = DataSource.read("/some/where/dataset.csv");

Instances data3 = DataSource.read("/some/where/dataset.xrff");

如果文件没有一个与加载器关联的特殊扩展名,则要直接使用加载器。下面的示例加载一个CSV(逗号分隔值)文件:

import weka.core.converters.CSVLoader;


import weka.core.Instances; import java.io.File; ...

CSVLoader loader = new CSVLoader();

loader.setSource(new File("/some/where/some.data"));

Instances data = loader.getDataSet();

注意: 不是所有的文件格式都可以存储关于类属性的信息(例如,ARFF不存储类属性的信息,但XRFF存储)。今后,如果一个类属性是必需的,例如,当使用一个分类器,可以通过 setClassIndex(int) 方法设置:

// 使用第一属性作为类属性 if (data.classIndex() == -1) data.setClassIndex(0); ...

//使用最后一个属性作为类属性 if(data.classIndex()== -1)

data.setClassIndex(data.numAttributes() - 1) ;

16.2.2 加载数据库中的数据

对于从数据库中加载数据,可以使用下面的两个类之一:

     weka.experiment.InstanceQuery

     weka.core.converters.DatabaseLoader

它们之间的差异是, InstanceQuery 类允许检索稀疏数据而 DatabaseLoader 可以增量地检索数据。

下面是一个使用 InstanceQuery 类的:

import weka.core.Instances; import weka.experiment.InstanceQuery; ...

InstanceQuery query = new InstanceQuery(); query.setDatabaseURL("jdbc_url"); query.setUsername("the_user"); query.setPassword("the_password");

query.setQuery("select * from whatsoever");

/ /如果你的数据是稀疏的,那么你可以这样写:

// query.setSparseData(true);

Instances data = query.retrieveInstances();

使用DatabaseLoader类“批处理检索“的一个例子:

import weka.core.Instances;

import weka.core.converters.DatabaseLoader; ...

DatabaseLoader loader = new DatabaseLoader(); loader.setSource("jdbc_url", "the_user", "the_password"); loader.setQuery("select * from whatsoever");

Instances data = loader.getDataSet();

DatabaseLoader 在“增量模式”使用如下:

import weka.core.Instance;

import weka.core.Instances; import weka.core.converters.DatabaseLoader; ...

DatabaseLoader loader = new DatabaseLoader(); loader.setSource("jdbc_url", "the_user", "the_password"); loader.setQuery("select * from whatsoever");

Instances structure = loader.getStructure();

Instances data = new Instances(structure);

Instance inst;

while ((inst = loader.getNextInstance(structure)) != null) data.add(inst);

注:

         •       不是所有的数据库系统都允许增量检索。

      并非所有的查询都具有一个唯一的key用于增量检索。在这种情况下,可以用setKeys(String) 方法(以逗号分隔的列)提供必要的列

      如果不能以增量方式检索数据,它是首先完全加载到内存中,然后一行一行提供(“伪增量”)。

 

转载于:https://my.oschina.net/leopardsaga/blog/91789

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值