1. 程式人生 > >Java機器學習庫ML之一Dataset和Instance

Java機器學習庫ML之一Dataset和Instance

Java機器學習庫ML官網:http://java-ml.sourceforge.net/

對於一個機器學習庫來說,最基礎就是資料處理能力,ml庫給了dataset和instance兩個類,dataset是矩陣,instance是行(可以理解是一個list,或一個double陣列)。

本文給出最基本的Dataset和Instance操作,可以完成對一個矩陣的遍歷,定位到每一行裡的每一個列,可惜的是dataset本身好像不具備行列切片,這個和python裡面的pandas庫差別就大了。

參考程式碼如下:

package com.gddx;

import java.io.File;
import java.io.IOException;

import net.sf.javaml.core.Dataset;
import net.sf.javaml.core.DefaultDataset;
import net.sf.javaml.core.DenseInstance;
import net.sf.javaml.core.Instance;
import net.sf.javaml.core.SparseInstance;
import net.sf.javaml.tools.InstanceTools;
import net.sf.javaml.tools.data.FileHandler;

public class TutorialDataset {

   public static void main(String[]args) throws IOException{
	    //dataset
	    //建立一個空的dataset,並隨機賦值
        Dataset data = new DefaultDataset();
        for (int i = 0; i < 5; i++) {
            Instance tmpInstance = InstanceTools.randomGaussianInstance(3);
            tmpInstance.setClassValue("標記");
            data.add(tmpInstance);
        }//建立一個5行3列的矩陣
        System.out.println(data.instance(0)); //列印dataset的第一行
        /*案例2*/
        //從檔案中匯入形成一個dataset,前4列是特徵值,最後1列是標記,列分隔符是逗號
        Dataset dataFile = FileHandler.loadDataset(new File("D:\\tmp\\iris.data"), 4, ",");
        for(Instance inst:dataFile){
        	System.out.println(inst.classValue());//顯示標記
        	System.out.println(inst.values());//顯示特徵值
        }
        //instance      
        double[] values = new double[] { 0.1, 2, 3 };/* values of the attributes. */
        Instance instance = new DenseInstance(values);
        System.out.println("Instance with only values set: ");
        System.out.println(instance);
        Instance instanceWithClassValue = new DenseInstance(values, 1);
        System.out.println("Instance with class value set to 1: ");
        System.out.println(instanceWithClassValue);
        /* Create instance with 10 attributes */
        Instance instancesparse = new SparseInstance();
        /* Set the values for particular attributes */
        instancesparse.put(1, 1.0);
        instancesparse.put(2, 2.0);
        instancesparse.put(3, 4.0);
        System.out.println(instancesparse.values());
   }	
}