最近谷歌译员访问非常不顺,翻译只能先放着了
这篇的格式也不调了,每次粘贴过来都要手动调整格式,太累了,也不知是我格式的问题仍是OSC博客的问题 java
看不顺的话能够点这,会好些。 数据库
在任何过滤器,分类的聚类器能够应用以前,数据必须存在。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对象(见方法 dataset 和 setDataset 。weka.core.SparseInstance 类在稀疏数据的状况下使用。 spa
• weka.core.Attribute -拥有数据集中单个列的类型信息。它存储属性的类型,以及标称属性的标签,字符串属性可能的值或关系属性的数据集(这些也都是weka.core.Instances对象)。 翻译
当从文件加载数据时,可让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) ;
对于从数据库中加载数据,可使用下面的两个类之一:
• 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) 方法(以逗号分隔的列)提供必要的列 。
• 若是不能以增量方式检索数据,它是首先彻底加载到内存中,而后一行一行提供(“伪增量”)。