Java機器學習庫ML之一Dataset和Instance
阿新 • • 發佈:2019-02-03
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()); } }