1. 程式人生 > >用Java建立weka需要的Instance物件和arff檔案

用Java建立weka需要的Instance物件和arff檔案

在用Java使用weka時,我們需要weka支援的資料格式,weka官網上給出的大多是從arff檔案中匯入資料。從資料庫中生成對系統環境要求也較高。因此本文介紹瞭如何通過普通的Java物件生成weka支援的Instance物件,並儲存到arff檔案中。

總體思路

首先建立一個Instances物件,為Instances物件設定屬性(@Attribute),然後從物件建立Instance加入到Instances中,如果需要儲存,可以直接將Instances物件儲存為arff格式的檔案。

Attribute

在介紹attribute之前首先簡述一下arff的檔案格式。官網上示例如下:

%
1. Title: Iris Plants Database % % 2. Sources: % (a) Creator: R.A. Fisher % (b) Donor: Michael Marshall (MARSHALL%[email protected].arc.nasa.gov) % (c) Date: July, 1988 % @RELATION iris @ATTRIBUTE sepallength NUMERIC @ATTRIBUTE sepalwidth NUMERIC @ATTRIBUTE petallength NUMERIC @ATTRIBUTE petalwidth NUMERIC @ATTRIBUTE class {Iris-setosa
,Iris-versicolor,Iris-virginica} @DATA 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa 4.6,3.1,1.5,0.2,Iris-setosa 5.0,3.6,1.4,0.2,Iris-setosa 5.4,3.9,1.7,0.4,Iris-setosa 4.6,3.4,1.4,0.3,Iris-setosa 5.0,3.4,1.5,0.2,Iris-setosa 4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa

因為arff檔案和Instances是對應的,在建立Instances物件之前我們需要指定Instances的屬性,對應到Java中,@ATTRIBUTE對應的是weka.core.Attribute物件。

Instance

Instance是一條資料,類似於資料庫中的一行。在新版的weka(>3.5)中,Instance只是一個介面,在本文中以DenseInstance為例建立Instance,其他Instance可以在weka官方api中查到。

建立Instances

private Instances generatePopularInstance(List<SecRepoEntity> entities) {
        //set attributes
        ArrayList<Attribute> attributes = new ArrayList<>();
        attributes.add(new Attribute("fork"));
        attributes.add(new Attribute("size"));
        attributes.add(new Attribute("sum"));
        attributes.add(new Attribute("avg"));
        attributes.add(new Attribute("weight"));
        //set instances
        Instances instances = new Instances("repo_popular",attributes,0);
        instances.setClassIndex(instances.numAttributes() - 1);
        //add instance
        for (SecRepoEntity secRepoEntity: entities) {
            Instance instance = new DenseInstance(attributes.size());
            instance.setValue(0,secRepoEntity.getForkCount());
            instance.setValue(1,secRepoEntity.getSize());
            instance.setValue(2,secRepoEntity.getSumFollower());
            instance.setValue(3,secRepoEntity.getAvgFollower());
            instance.setValue(4,secRepoEntity.getWeightFollower());
            instances.add(instance);
        }
        return instances;
    }

儲存Instances物件為arff檔案

    /**
     * generate weka dataSource file
     * @param instances weka Instances
     */
    public void generateArffFile(Instances instances, String path) {
        ArffSaver saver = new ArffSaver();
        saver.setInstances(instances);
        try {
            saver.setFile(new File(path));
            saver.writeBatch();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

從arff檔案匯入Instances

weka官網有詳細的說明,這裡摘錄新版的方法。(使用DataSource)

import weka.core.converters.ConverterUtils.DataSource;
 ...
 DataSource source = new DataSource("/some/where/data.arff");
 Instances data = source.getDataSet();
 // setting class attribute if the data format does not provide this information
 // For example, the XRFF format saves the class attribute information as well
 if (data.classIndex() == -1)
   data.setClassIndex(data.numAttributes() - 1);

相關推薦

Java建立weka需要Instance物件arff檔案

在用Java使用weka時,我們需要weka支援的資料格式,weka官網上給出的大多是從arff檔案中匯入資料。從資料庫中生成對系統環境要求也較高。因此本文介紹瞭如何通過普通的Java物件生成weka支援的Instance物件,並儲存到arff檔案中。 總體思

new方法生成一個img物件document.createElement方法建立一個img物件的區別

我用兩種方法來生成img物件,第一種方法是用new方法,第二種方法是用document.createElement方法。 var img1 = new Image(); var img2 = document.createElement('img');其實,乍一看,感覺有些

JAVA給數據庫增加修改數據代碼

pre dst set mod string statement exec modify str public class DeptDao{ public int a dd(Connection conn,Dept dept) throws Except

java數組模擬登錄註冊功能

ann print copy int oid java user AS port package com.linkage.login; import java.util.Scanner; public class user { // 存儲用戶名和密碼 publi

HDFS(三)—— Java 建立一個 HDFS 目錄,HDFS 的許可權的問題

一、匯入 HDFS 所需 jar 包 把解壓後的 hadoop 資料夾下的 common 目錄中的 jar,和裡面的 lib 包中所有的 jar,以及 hdfs 目錄下的 jar,和裡面的 lib 包中所有的 jar 都新增到專案的環境變數中。 二、編寫測試程式碼 im

Java建立二叉排序樹平衡樹

建立二叉排序樹,是從前往後掃描陣列,可以不保證高度最小,從頭節點依次向下尋找要插入的適當位置。 建立平衡樹,可以先將陣列進行排序,然後選取中間元素作為根節點,陣列中間元素左邊的元素為根節點的左子樹,陣列中間右邊的元素為根節點的右子樹。 再對右子樹和右子樹選取中間

java中new出來一個物件定義一個物件賦值為空有什麼不同

new 一個物件出來,比如SomeClass sc=new SomeClass();這個時候已經為sc這個物件分配了指向 new SomeClass() 所建立的記憶體空間。即對這個物件sc進行了例項化。而SomeClass sc=null,則sc物件未進行例項化,是一個空的物件,未能指向任何記憶體空間。

Java程式設計思想》--面向物件JVM基礎

1.java中的4種訪問制許可權 (1).public 最大訪問控制權限,對所有的類都可見。 (2).protect 同一包可見,不在同一個包的所有子類也可見。 (3).default 包訪問許可權,

Java實現傳送http的getpost請求

import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; imp

【譯】Java建立你的第一個區塊鏈-part1

區塊鏈是分散式資料儲存、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。所謂共識機制是區塊鏈系統中實現不同節點之間建立信任、獲取權益的數學演算法 。 前言 本系列教程旨在幫助你瞭解如何開發區塊鏈技術。 本章目標 建立你第一個非

給id屬性v-bind動態繫結物件字串

class和id 動態的繫結一個字串達到自定義名稱的方法::class="'字串'+item.value"  :id="'字串'+item.value" <!DOCTYPE html> <html> <head>   <meta c

java建立一個子類物件是會呼叫父類的構造方法會不會建立父類

第三個部分就是java原始碼中的構造方法中的程式碼,java原始碼中有幾個構造方法,那麼class檔案中就有幾個初始化方法,編譯器會把第一部分與第二部分分別複製到每個初始化方法的前端,然後把初始化方法對應引數的構造方法的程式碼複製到相應初始化方法中(這裡說的複製其實應該說是編譯,不過為了讓你更好理解所以如此說

[Java] Introduction to Java Programming 筆記 Chapter 9. 物件

如果一個檔案含有兩個類,只有一個類可以為public,public 類和檔名同名,但此檔案編譯後,將生成兩個.class 檔案,一個類對應一個class檔案。 匿名物件:建立一個物件,但是並不將其引用賦給變數 new Circle(); // or Sy

java建立執行緒implement runnable extends thread 比較

我們都知道java實現執行緒有兩種方法 一。繼承Thread類 二。實現Runnable介面 看到很多說法他們之間有一個區別是:實現Runnable接口才能實現資源共享。繼承thread的方式不行 並且附有類似以下的例項: //Implement Runnable 的方

java在redis中儲存物件

最近需要封裝一個操作redis的工具類,不知道怎麼向redis中儲存物件,想到過用java反射去做。在網上搜索了一下,發現可以用序列化物件的方式去儲存。再此我整理了一下感謝,殘劍_提供的方法:http://www.cnblogs.com/liuling/p/2014-4-19

Java求整數區間[a,b][c,d]的交集、並集

1. 求整數區間[a,b]和[c,d]的交集、並集 package cn.oop.nk; /** * 求整數區間[a,b]和[c,d]的交集、並集 * @author 溫暖wk * */ public class Demo02 { pu

Java建立你第一個區塊鏈-part1

      比特幣是區塊鏈中最重要的一個應用,在比特幣大漲之後又出現了很多幣種,比如萊特幣、以太幣等等,更在2014年以太坊的出現,市面上出現了各種各樣的幣種以及ICO,在此先簡單介紹一下以太坊(Ethereum)並不是一個機構,而是一款能夠在區塊鏈上實現智慧合約、開源的底層

Java建立Excel檔案Java Excel API的使用

Java Excel API的使用  Java Excel API(JXL)是一個成熟開源的Java類庫,用來操作Excel電子表格,支援讀取,修改,寫入等操作。這個專案基於GPL釋出,與poi比較,對中文有很好的支援。而且支援PNG格式圖片以及各種數字型別。當然poi除了可

Java建立你第一個區塊鏈-part3

      在上一章節中最後說到了要實現p2p網路,那麼在這一章節中就主要說一下p2p網路,實現的方式是什麼,以及為什麼要實現p2p網路。      首先先簡單的介紹一下什麼是p2p網路?p2p網路技術又稱為對等網路技術,是一種網路的新技術,依賴網路中參與者的計算能力和頻寬,

利用socket技術實現java實現客戶端向服務端傳送檔案,伺服器端接收檔案並給出一個響應。

通訊是網路程式設計中重要的組成部分,而socket程式設計是網路程式設計的基礎。利用socket可以實現客戶端和伺服器端的通訊。下面我先把客戶端和伺服器端的程式碼粘上去再進行詳細的分析。 package test1; import java.io.File; import java.io