Written by Jefri Pakpahan /

Posted with : ARFF, Java, Machine Learning, Weka


weka

Akhir-akhir ini saya sedang bermain-main dengan Weka, baik versi GUI ataupun library untuk menggunakan fungsi-fungsi Weka (Instances, Filter, Classification, Clustering, dll). Supaya tidak lupa saya akan menuliskan satu persatu penggunaan library Weka (weka-3.7.3.jar) yang sudah pernah saya lakukan.

Weka dalam penggunaannya menggunakan file ARFF (Attribute-Relation File Format) adalah file yang digunakan Weka yang berisi 1 atau lebih instances dari atribut. Dalam file ARFF biasanya terdapat @RELATION namarelasi untuk menamakan relasi sebuah file ARFF, @ATTRIBUTE untuk penamaan setiap atribut baik numeric, nominal, string dan date. sedangkan @DATA pada setiap line untuk merepresentasikan sebuah instances. (Penjelasan lengkapnya ada disini).

Langkah pertama yang terpenting dalam Weka adalah membaca file ARFF / membuat instances sebelum akan diproses klasifikasi, kluster atau hal lainnya.

Membaca File ARFF

1
2
3
4
5
6
7
8
9
10
11
12
13
import weka.core.Instances;
import java.io.BufferedReader;
import java.io.FileReader;

// Membaca file iris.arff menggunakan BufferedReader
BufferedReader reader = new BufferedReader(new FileReader("/data/iris.arff"));

// Membuat Instances dengan data dari file iris.arff
Instances data = new Instances(reader);
reader.close();

// Set Class Index untuk memberitahu kelas dari target, yang akan digunakan klasifikasi. kelas target berada pada atribut terakhir.
data.setClassIndex(data.numAttributes() - 1);

File iris.arff dapat ditemukan pada folder Weka\data.

Membuat Instances format ARFF

Sedangkan untuk membuat sebuah instances berikut contoh untuk dataset iris :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public void makeInstance() {
// Membuat Attribute List
ArrayList<Attribute> attributeList = new ArrayList<Attribute>(5);

// Membuat 4 Attribute
Attribute sepallength= new Attribute("sepallength");
Attribute sepalwidth= new Attribute("sepalwidth");
Attribute petallength= new Attribute("petallength");
Attribute petalwidth= new Attribute("petalwidth");

// Membuat attribute kelas target
ArrayList<String> classVal = new ArrayList<String>(2);
classVal.add("Iris-setosa");
classVal.add("Iris-versicolor");
classVal.add("Iris-virginica");

// Memasukkan Attribute ke Attribute List
attributeList.add(sepallength);
attributeList.add(sepalwidth);
attributeList.add(petallength);
attributeList.add(petalwidth);
attributeList.add(new Attribute("class", classVal));

// Instances baru dengan nama relasi "iris" dengan atributList dan index 0
Instances instances = new Instances("iris", attributeList, 0);

// Set Class Index untuk memberitahu kelas dari target, yang akan digunakan klasifikasi. kelas target berada pada atribut terakhir.
instances.setClassIndex(instances.numAttributes() - 1);

// Membuat dan tambah kan Attribute ke instance
Instance inst_co = new DenseInstance(instances.numAttributes());

// Men set nilai dari Attribute:
inst_co.setValue(sepallength, 6.9);
inst_co.setValue(sepalwidth, 3.1);
inst_co.setValue(petallength, 5.1);
inst_co.setValue(petalwidth, 2.3);

//menambahkan instances dari instance inst_co
instances.add(inst_co);

System.out.println("===== Instance dataset =====");
System.out.println(instances);
}

Hasil dari instances yang dibuat manual :

1
2
3
4
5
6
7
8
9
10
@relation iris
@attribute sepallength numeric
@attribute sepalwidth numeric
@attribute petallength numeric
@attribute petalwidth numeric
@attribute class {Iris-setosa,Iris-versicolor,Iris-virginica}

@data

6.9,3.1,5.1,2.3,?

Menyimpan instance ke file arff

Anda dapat menyimpan instances yang sudah di buat ke file arff dengan menggunakan fungsi BufferedWriter di java.

1
2
3
4
BufferedWriter writer = new BufferedWriter(new FileWriter("data/iris_create.arff"));
writer.write(instances.toString());
writer.flush();
writer.close();

Sekarang cukup mudah bukan membuat sebuah instances baru melalui java. thx weka wikispaces :D

Berikut file source code dan library sudah saya upload ke github.

References :

- http://weka.wikispaces.com/ARFF+%28stable+version%29

- http://weka.wikispaces.com/Use+WEKA+in+your+Java+code#Instances-ARFF%20File

- http://weka.wikispaces.com/Programmatic+Use

- http://weka.wikispaces.com/Save+Instances+to+an+ARFF+File



blog comments powered by Disqus