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

      若是不能以增量方式檢索數據,它是首先徹底加載到內存中,而後一行一行提供(「僞增量」)。

相關文章
相關標籤/搜索