Weka manual 3.6翻译: 16.2 数据载入

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

看不顺的话能够点这,会好些。 数据库

16.2 数据载入

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

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

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

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

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

      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) 方法(以逗号分隔的列)提供必要的列

      若是不能以增量方式检索数据,它是首先彻底加载到内存中,而后一行一行提供(“伪增量”)。

相关文章
相关标签/搜索