JAVA-ML(機器學習第一天)[Dataset 和 Instance]

Java機器學習庫ML官網:http://java-ml.sourceforge.net/
對於一個機器學習庫來說,最基礎就是數據處理能力,ml庫給了dataset和instance兩個類,dataset是矩陣,instance是行(可以理解是一個list,或一個double數組)。Dataset是JAVA-ML數據集合,所有的算法都是基於這個數據集,所以很基礎也很重要,我覺得使用JAVA的好處就在於數據格式的規範化,以及它的靈活性,和可擴展性。
本文給出最基本的Dataset和Instance操作,可以完成對一個矩陣的遍歷,定位到每一行裏的每一個列,可惜的是dataset本身好像不具備行列切片,這個和python裏面的pandas庫差別就大了。但是對於熟悉JAVA的人來說,遍歷DataSet還是不成問題的。
參考代碼如下:

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);  
        }//創建一個53列的矩陣  
        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());  
   }      
}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章