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);
}//創建一個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());
}
}