Anda di halaman 1dari 43

1

v:1.2

Tutorial
Machine Learning dengan WEKA

Yudi Wibisono ( ​yudi@upi.edu​)


Masayu L. Khodra ( ​masayu@informatika.org​ )
Versi BETA : (1.2) Oktober 2018

URL singkat dan QR code dokumen ini: ​http://bit.ly/modul_weka

Dokumen ini bebas digunakan, didistribusikan, dimodifikasi


dengan syarat nama pembuat dokumen ini dan lisensi tidak diubah
2
v:1.2

Daftar Isi

Daftar Isi 2

Pendahuluan 3

Praproses 4

Klasifikasi 12
Load Data 12
Pembuatan Model 14
Menyimpan Model 18
Prediksi 19
Optimasi Model 24

Regresi 30

Clustering 35

Association Rule 38

Evaluasi Atribut 40

Visualisasi Data 41
3
v:1.2

Pendahuluan
Catatan: diasumsikan pembaca telah mengerti dasar-dasar pembelajaran mesin (​machine
learning)​ seperti klasifikasi, clustering dan frequent itemset mining.

Weka (Waikato Environment for Knowledge Analysis) adalah tools yang free dan open source
(berlisensi GPL) yang berisi kumpulan algoritma ​machine learning dan praproses. Weka dapat
digunakan mulai dari tahap praproses, proses, evaluasi sampai dengan visualisasi. Berbagai
algoritma dapat dibandingkan untuk memilih yang terbaik untuk masalah yang akan
dipecahkan. Weka dibuat dengan Java sehingga dapat dijalankan di Windows, Linux dan Mac
juga dapat digunakan sebagai library dalam aplikasi Java.

Software WEKA dapat di-download di ​http://www.cs.waikato.ac.nz/ml/weka/​. Jika OS yang


digunakan adalah 64bit, gunakan versi Weka 64 bit juga karena dapat menggunakan memori
lebih besar sehingga dapat memproses lebih banyak data.

Sejak Weka versi 3.8, Weka juga dapat menangani data stream dan data yang besar dengan
menggunakan Hadoop dan Spark.

Weka menyediakan tiga interface untuk mengolah dataset.

1. Explorer​: Eksplorer digunakan untuk memvisualisasikan data dan mencari algoritma


yang paling tepat. Semua data di-load ke memori sehingga dapat cepat diproses, tapi
hanya dapat digunakan untuk data dengan jumlah terbatas. Explorer dapat digunakan
untuk praproses, association rule, klasifikasi, clustering, memilih atribut dan visualisasi
data.
2. Eksperimenter​: Digunakan untuk mencari parameter yang cocok. Mirip dengan explorer
tetapi prosesnya dapat diotomatisasi. Eksperimen berukuran besar (multi machine)
dapat dilakukan dengan interface ini.
3. KnowledgeFlow​: Digunakan untuk memproses data stream. Konfigurasi proses dapat
diatur dan dapat menangani data berukuran besar. Mendukung incremental learning.
4
v:1.2

4. Simple CLI (Command Line Interface). Command line untuk interface.

Dalam tutorial ini, kita akan mempelajari modul explorer terlebih dulu

Praproses
Praproses adalah langkah-langkah yang dilakukan sebelum data diolah. Praproses memiliki
peranan yang penting karena sebagus apapun teknik yang digunakan jika input data
mengandung kesalahan maka kesimpulan yang dihasilkan juga akan salah. Tahapan praproses
mencakup pembersihan data, integrasi, transformasi sampai pada pengurangan data. Tahapan
praproses juga akan membantu data analis memahami data. Semakin data dipahami akan
semakin baik model yang dihasilkan.

Kembali ke Weka, setelah memilih menu Explorer akan muncul tampilan sebagai berikut, ada
tab preprocess, classify, cluster, associate, select attributes dan visualize. Pilih tab preprocess.

Tab preprocess digunakan untuk melihat secara sekilas tentang informasi dataset seperti
jumlah instance, jenis atribut, isi atribut dan histogram. Untuk mencoba fitur ini, kita akan
mencoba meload contoh data yang sudah disediakan oleh Weka.

Weka menyediakan beberapa data yang dapat langsung digunakan (di Windows default
lokasinya adalah Program Files → Weka → Data ) . Pilih open file, lalu pilih lokasi tempat Weka
di-install dan masuk ke direktori data. Coba load data credit-g.arff yang berisi data customer
bank yang berkaitan dengan kredit.

Setelah di-load, di tab preprocess akan ditampilkan ringkasan tentang dataset ini. Informasi
penting adalah jumlah instances (1000 baris) dan jumlah atribut (21 kolom). Weka menyebut
5
v:1.2

dataset sebagai "relation". Pada dataset ini setiap instances memiliki bobot yang sama
sehingga "Sum of weight" sama dengan jumlah instances.

Di panel sebelah kiri ditampilkan nama-nama atribut yang dimiliki oleh dataset. Coba klik salah
satu nama atribut:

Setiap nama atribut di-klik, maka panel di sebelah kanan, "selected attribute" akan terupdate.
Sebagai contoh untuk atribut checking_status:

Atribut checking_status adalah nominal dengan empat jenis nilai: "<0", "0<=X<200", ">=200",
"no checking". Pada tabel di atas diperlihatkan count untuk setiap kategori. Bagian bawah panel
memperlihatkan informasi ini bentuk histogram (gambar bawah).
6
v:1.2

Warna menunjukkan kelas yang menjadi target (mengenai kelas akan dibahas di bagian
klasifikasi). Warna biru menyatakan kredit yang bagus ("Good") dan merah kredit yang buruk
("Bad")

Contoh di atas adalah tipe data nominal, untuk tipe data numerik, coba pilih atribut "durasi".
Panel "selected attribute" akan berisi minimum, maksimum, mean dan standar deviasi (gambar
bawah)

Selain nominal dan numeric, Weka memiliki beberapa tipe atribut yang lain yaitu string untuk
teks, date untuk tipe tanggal dan relation yang dapat berisi gabungan atribut.

Latihan 1:

Coba cek atribut yang lain, berdasarkan histogram mana yang paling menarik (dari sisi
penentuan kelas kredit). Misalnya ada atribut yang dari nilainya langsung dapat diketahui
kelas kreditnya akan jelek (warna merah).

Beberapa praproses yang dapat dilakukan adalah


1. Menambah atau menghilangkan atribut.
2. Diskritisasi.
3. Penanganan nilai kosong (missing value).
4. Sampling.
5. Normalisasi.

Misalnya kita akan menghapus atribut, pilih satu atau beberapa atribut dan klik tombol
"Remove" (jangan khawatir hilang, nanti bisa di-undo)
7
v:1.2

Untuk membatalkan penghapusan atribut, tekan tombol "Undo", tetapi jika ingin menyimpan
hasil modifikasi, tekan "Save".

Untuk praproses yang lain dilakukan melalui filter. Pilih Choose.

Tersedia banyak filter. Filter dibagi menjadi dua kategori, supervised dan unsupervised.
Supervised memerlukan atribut kelas akan dibahas dalam bagian klasifikasi. Filter juga berlaku
di tingkat instance (baris) dan atribut (kolom).

Diskritisasi
Kita akan mencoba salah satu filter. Misalnya kita akan mengubah data diskrit dari atribut
numerik "Age". Coba lihat kembali atribut "Age" (gambar bawah).

Nilai minimum atribut age adalah 19 dan maksimum 75. Kita akan jadikan diskrit ke dalam 5
kelompok. Di bagian filter, pilih Choose → Filters → Unsupervised → Attribute → Discretize
maka isian Filter akan seperti gambar di bawah.

Angka setelah kata “Discretize” adalah parameter filter default. Misalnya -B 10 artinya nilai
akan dikelompokkan sejumlah “bin” sebanyak 10. Secara default Discretize akan dilakukan
untuk semua atribut (first-last). Oleh karena kita hanya menginginkan atribut “Age” yang
di-discretize, maka nilai default perlu diubah. Klik tulisan “Discretize”
8
v:1.2

Akan muncul rincian parameter (gambar di bawah). Edit bagian atributIndices dengan 13
karena nomor urut Age adalah 13 (hanya atribut age yang akan ditransformasikan),
RangePrecision dengan 0 (bilangan bulat) dan ganti nilai bins menjadi 3 (umur dibagi menjadi
3 kelompok). Tekan OK

Dapat dilihat parameter Discretize berubah (gambar bawah). Klik ​Apply​ untuk mengeksekusi
filter.

Cek lagi atribut "Age", maka telah berubah menjadi 3 kategori (<38), (38-56) dan (>56).

Diskretisasi berguna untuk mengurangi jumlah data sehingga mempercepat proses pembuatan
model (bayangkan reduksi yang didapat jika diterapkan pada jutaan baris bilangan numeric).
Tetapi diskretisasi juga menyebabkan ada informasi yang hilang, sebagai contoh orang yang
berumur 42 dan 51 sama-sama akan masuk ke kategori umur 38-56.
9
v:1.2

Latihan 2:

Coba diskritisasi untuk atribut credit_amount, berapa jumlah bin yang ideal?

Missing Value
Sekarang kita akan coba menangani data yang hilang (missing value). Data kosong bisa
disebabkan oleh banyak hal seperti kesalahan operator, kesalahan sensor, atau memang
datanya tidak ada. Ini perlu ditangani karena beberapa teknik machine learning tidak mau
memproses data kosong atau dapat menyebabkan model yang dihasilkan tidak akurat.

Data credit-g kebetulan tidak memiliki data yang kosong sehingga kita perlu menggunakan
dataset yang lain. Buka file soybean.arff di direktori [weka]/data. Dataset ini berisi data tentang
tanaman kedelai yang terkena penyakit. Ada 683 instance (baris) dan 36

Coba pilih atribut date, di-panel “selected attribute” ditampilkan jumlah data yang hilang untuk
atribut tersebut (gambar bawah).

Untuk attribut date satu baris yang hilang, coba lihat atribut yang lain, ada atribut yang memiliki
missing value mencapai 16%.

Salah satu cara menangani data yang hilang adalah dengan menghapus baris, ini dapat
dilakukan jika jumlahnya tidak terlalu banyak. Di bagian filter, klik Choose dan filter Filters →
Unsupervised → ​Instance → RemoveWithValues. Filter ini ada di bagian instance bukan atribut
karena hanya dapat memproses satu atribut.

Klik nama filter untuk konfigurasi filter. Yang perlu diubah adalah attributeindex menjadi 1
(attribute date), matchMissingValues = True dan invertSelection=True.
10
v:1.2

Klik apply, maka jumlah instance berkurang satu dan jumlah missing value untuk atribut date
akan menjadi 0. Filter ini juga dapat digunakan untuk membuang instance yang memiliki nilai
tertentu. Misalnya dapat digunakan untuk membuang atribut tinggi badan nilainya melebihi 250
cm.

Latihan 3

Buang instance untuk data kosong (missing value) pada atribut crop_hist

Alternatif lain adalah dengan mengganti missing value dengan nilai modus atau median. Ini
berguna misalnya untuk atribut tinggi badan, jika atribut tinggi badan kosong maka dapat diisi
dengan median tinggi badan di dataset tersebut. Untuk melakukan hal ini pilih filters →
unsupervised → ​attribute → ReplaceMisssingValues. Filter akan mengganti semua missing
value dengan median untuk atribut bertipe numerik dan modus untuk atribut bertipe nominal.
Apply filter ini dan jika semua atribut diperiksa, sudah tidak ada lagi missing value. Tentu tidak
semua atribut dapat diproses seperti ini, perlu pengetahuan tentang dataset untuk menentukan
penanganan missing value yang tepat.

Jika kita menginginkan untuk mengganti missing value dengan nilai tertentu, dapat digunakan
filter filters → unsupervised → attribute → ReplaceMissingWithUserConstant. Sebagai contoh
kita ingin mengganti nilai kosong pada atribut "plant-stand". Atribut plant-stand adalah atribut
nominal yang berisi dua nilai (gambar bawah) yaitu normal dan lt-normal. Terdapat 36 intance
missing value.
11
v:1.2

Kita akan ganti nilai missing dengan nilai baru yaitu "not-available". Pilih filter
ReplaceMissingWithUserConstant, set parameternya sebagai berikut. Attributes=2;
NominalStringReplacementValue = "not-available" (gambar bawah)

Apply dan hasilnya akan seperti ini (gambar bawah) Tidak ada lagi missing value dan ada
tambahan nilai baru yaitu not-available sebanyak 36.
12
v:1.2

Klasifikasi
Sekarang kita akan mencoba menggunakan Weka untuk task klasifikasi. Analogi dari proses
klasifikasi otomatis dalam machine learning adalah sebagai berikut: misalnya kita ingin
mengajarkan seorang anak balita membedakan motor dan mobil. Motor dan mobil adalah kelas
yang kita ingin prediksi dan prosesnya disebut klasifikasi. Salah satu cara yang dapat dilakukan
adalah menyiapkan banyak foto-foto mobil dan motor. Kita perlihatkan kepada anak tersebut:
“ini foto mobil”, “ini foto motor” dan seterusnya. Ini disebut proses training, dan datanya disebut
data training. Apa yang terjadi dalam proses training ini? Anak akan membuat model di otaknya
berdasarkan karakteristik setiap kelas (motor atau mobil). Misalnya jumlah roda, posisi
pengemudi, bentuk depan, bentuk belakang dan seterusnya. Karakteristik objek ini disebut fitur
atau atribut.

Setelah selesai proses training, tentu kita ingin tahu apakah anak sudah mengerti. Maka
siapkan gambar mobil dan motor yang ​belum pernah dilihat anak dan kita akan uji dia untuk
memprediksi. Tahapan ini disebut testing dan datanya disebut data tes. Misalnya ada 100
gambar uji, si anak menebak benar 85 gambar dan salah untuk 15 lainnya maka “akurasi” dari
model di otak anak ini adalah 0.85 atau 85%. JIka akurasi terlalu rendah, mungkin bisa kita
utak-atik teknik pembelajarannya atau data latihnya. Baru setelah kita puas dengan akurasinya,
maka kita bisa “melepas” si anak untuk melakukan klasifikasi untuk data yang sebenarnya.

Load Data
Weka sudah menyediakan beberapa dataset standar yang bisa digunakan sebagai latihan.
Sebagai kasus dalam tutorial ini, akan digunakan dataset weather.nominal.arff. Pada tab
Preprocess​, pilihlah tombol ​Open file ​dan arahkan ke folder data pada direktori weka (di
Windows defaultnya adalah Program Files → Weka → Data ) , lalu pilih weather.nominal.arff.
Dataset ini adalah dataset contoh, yang berisi kondisi cuaca yang terkait untuk bermain tenis
atau tidak.
13
v:1.2

Dataset weather.nominal.arff memiliki 4 atribut seperti yang ditunjukkan pada gambar di bawah
ini. Seperti yang telah dijelaskan pada bagian sebelumnya juga, kita bisa melihat nilai dari
setiap atribut.

Dataset ini memiliki 14 instances (atau baris atau contoh) yang berlabel Yes (9 instances), dan
No (5 instances). Setiap instance menyatakan kondisi cuaca satu hari, sedangkan label Yes
menunjukkan ​hari itu cocok untuk bermain tenis​, sedangkan label No menyatakan ​hari itu
tidak cocok bermain tenis​.

Supaya lebih jelas, klik tombol Edit (di sebelah Undo) untuk melihat dataset ini dalam bentuk
tabel (gambar di bawah).

Atribut yang menjadi kelas adalah "play". Dapat dibaca pada baris pertama jika outlook=sunny;
temperatur="hot"; humidity="high"; windy=FALSE maka hari itu tidak cocok untuk bermain
14
v:1.2

tenis. Kita akan membuat model yang dapat memprediksi apakah cocok bermain tenis
(play=Yes) atau tidak (play=No) berdasarkan cuaca.

Jika dipilih tombol Visualize All pada kanan bawah, akan muncul visualisasi proporsi kelas
untuk setiap nilai atribut. Dari gambar di bawah, yang menarik terlihat bahwa terdapat 4
instances dengan nilai outlook=overcast yang semuanya berlabel play=Yes.

Pembuatan Model
Setelah dataset sudah siap diproses, pilihlah tab ​Classify​. Pada bagian Classifier, terdapat
tombol ​Choose dan teks nama algoritma machine learning yang dilengkapi parameternya.
Pilihlah tombol Choose, akan keluar menu dropdown. Klik ​trees​, dan pilihlah ​J48​. Jika menu
dropdown tidak tertutup secara otomatis, pilihlah tombol Close. Pada teks, tertulis "J48 -C 0.25
-M 2". Jika diklik teksnya, akan keluar dialog parameternya yang bisa disesuaikan nilainya.
15
v:1.2

Sebelum memulai proses learning (atau pembelajaran) dengan menekan tombol Start, pastikan
atribut kelas sudah sesuai. Dalam dataset ini kita, atribut kelasnya adalah ​play​. Selain itu,
pilihlah test options yang sesuai. Berikut detail dari test options.
● Use training set: model dievaluasi seberapa baik memprediksi kelas dari instance semua
data. Ini agak berbahaya karena dapat menyebabkan akurasi akan tinggi secara semu.
● Supplied test set: model dievaluasi seberapa baik memprediksi kelas dari instance test data
yang di-load dari file terpisah. Data test ini berbentuk ARFF dan tentu harus sama atributnya
dengan data training.
● Cross validation: model dievaluasi dengan cross-validation, dengan jumlah fold sesuai
masukan pengguna (default: 10). Sebagai contoh jika data training ada 1000 baris dan folds
diset 10 (ten cross validation), maka untuk batch pertama, baris 1-100 digunakan untuk
testing dan baris 101-1000 digunakan untuk training. Untuk batch kedua 101-200 untuk
testing dan 1-100 ditambah 201-1000 untuk training. Demikian seterusnya secara bergiliran
sampai batch 10. Akurasi setiap batch dihitung dan akurasi model adalah rata-rata semua
batch. Cross validation ini lebih umum digunakan.
● Percentage split: model dievaluasi seberapa baik memprediksi kelas dari instance yang
merupakan % tertentu dari semua data (hold-out). Besar % sesuai masukan pengguna
(default: 66). Data training dipecah menjadi dua sesuai persentase, bagian pertama jadi
data testing, bagian kedua jadi data training

Pilih ​cross validation dengan Folds ​10​. Setelah semua setting sesuai, klik Start, dan lihat
hasilnya di ​Classifier output seperti berikut ini. Terdapat 5 bagian yang ditampilkan sebagai
output yaitu:

1. Run information: daftar informasi learning meliputi scheme (algoritma learning dan
parameternya), nama relasinya (didefinisikan di dalam file arff), jumlah instances, jumlah
dan daftar atributnya, serta test options.

=== Run information ===

Scheme: weka.classifiers.trees.J48 -C 0.25 -M 2


16
v:1.2

Relation: weather.symbolic
Instances: 14
Attributes: 5
outlook
temperature
humidity
windy
play
Test mode: 10-fold cross-validation

2. Classifier model (full training set): model learning yang dihasilkan dari semua training data
dalam representasi teks. Berikut ini model decision tree yang dituliskan dalam representasi
teks. catatan: apapun test options yang dipilih, model classifier yang menjadi output adalah
model yang dibangun dari semua training data (full training set).

J48 pruned tree


------------------

outlook = sunny
| humidity = high: no (3.0)
| humidity = normal: yes (2.0)
outlook = overcast: yes (4.0)
outlook = rainy
| windy = TRUE: no (2.0)
| windy = FALSE: yes (3.0)

Number of Leaves : 5
Size of the tree : 8

Untuk melihat visualisasi tree, klik kanan result list (gambar bawah) lalu pilih visualize tree.

Hasilnya
17
v:1.2

Berdasarkan decision tree ini dapat terlihat dengan jelas model yang dihasilkan. Jika ada
input Outlook:Sunny; Humidity:Normal, maka untuk memprediksinya telusuri pohon dari
atribut outlook, turun ke cabang humidity di kiri dan sampai ke ujung (daun) dengan label
“yes”.

3. Summary: list statistik kinerja yang menunjukkan seberapa akurat model classifier dapat
memprediksi kelas sebenarnya dari setiap instances sesuai test options. Untuk test options
10-fold cross validation yang dipilih, terdapat 14 instances yang di test dalam 10 iterasi.
Pada hasil yang ditunjukkan, terdapat 7 instances (50%) yang benar diprediksi kelasnya,
dan 7 instances lainnya (50%) salah prediksinya.

=== Summary ===

Correctly Classified Instances 7 50 %


Incorrectly Classified Instances 7 50 %
Kappa statistic -0.0426
Mean absolute error 0.4167
Root mean squared error 0.5984
Relative absolute error 87.5 %
Root relative squared error 121.2987 %
Total Number of Instances 14

Akurasi model ini masih buruk, 50% artinya akurasi model ini sama saja dengan melempar
koin. Memang dataset yang digunakan adalah masih dataset percobaan.

4. Detailed accuracy by class: ukuran kinerja yang lebih detail di level kelas.

=== Detailed Accuracy By Class ===

TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class
0.556 0.600 0.625 0.556 0.588 -0.043 0.633 0.758 yes
0.400 0.444 0.333 0.400 0.364 -0.043 0.633 0.457 no
Weighted Avg. 0.500 0.544 0.521 0.500 0.508 -0.043 0.633 0.650
18
v:1.2

5. Confusion matrix: matriks yang menunjukkan berapa banyak instances yang diprediksi ke
setiap kelas (per kolom) dan jumlah instances yang sesuai dengan label aktualnya (per
baris). Pada contoh ini terdapat 8 instances yang diprediksi atau diklasifikasikan Yes. Dari 8
instances tersebut, 5 instances memang berlabel Yes (disebut juga True Positive), dan 3
instances berlabel No (disebut juga False Positive). Nilai C ​ orrectly Classified
Instances​ di bagian Summary 7 (50%) merupakan nilai 5+2 dari confusion matrix ini.

=== Confusion Matrix ===

a b <-- classified as
5 4 | a = yes
3 2 | b = no

Menyimpan Model
Untuk menyimpan model, klik result list yang akan disimpan, lalu klik kanan dan “Save Model”

Dan setelah di-save, jika diperlukan kita bisa meloadnya (gambar bawah)

Di result list akan muncul seperti ini, artinya model berhasil di-load:
19
v:1.2

Prediksi
Tahapan yang kita buat sebelumnya adalah membuat model. Setelah akurasi kita anggap
cukup, kita ingin agar model ini digunakan untuk mengklasifikasikan data yang belum kita
ketahui kelasnya.

Siapkan data yang akan diprediksi kelasnya dengan format ARFF. ARFF adalah format file
Weka yang dapat dibuka dengan teks editor biasa. Weka juga menyediakan fasilitas konversi
dari file csv dan file excel. Data juga dapat diperoleh melalui URL atau database (melalui
JDBC).

Untuk lebih memahami bentuk ARFF, buka file sebelumnya weather.nominal.arff tetapi bukan
dengan Weka, gunakanlah text editor seperti Wordpad (jangan gunakan notepad), maka isinya
akan seperti ini

@relation weather.symbolic

@attribute outlook {sunny, overcast, rainy}


@attribute temperature {hot, mild, cool}
@attribute humidity {high, normal}
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}

@data
sunny,hot,high,FALSE,no
sunny,hot,high,TRUE,no

@RELATION berisi judul dataset, @ATTRIBUTE menyatakan nama atribut dan jenisnya. Dapat
dilihat bagaimana atribut bertipe nominal disimpan. @DATA menyatakan awal dari data. Nilai
yang hilang (missing value) dinyatakan dengan karakter ?

Catatan: Atribut yang didukung Weka adalah numerik, string, nominal dan tanggal. Contoh
penggunaan berbagai jenis atribut dalam file ARFF:

@ATTRIBUTE atr1 NUMERIC


@ATTRIBUTE atr2 STRING
@ATTRIBUTE atr3 {L,P}
@ATTRIBUTE atr4 DATE "yyyy-MM-dd HH:mm:ss"

@DATA
20
v:1.2

5.1,"satu",L,"2001-04-03 5:1:12"

File yang berisi data yang akan diprediksi harus memiliki struktur yang sama dengan data
training.

Data yang akan diprediksi dapat disiapkan dalam file Excel. Buka Excel dan isi dengan data
sebagai berikut. Pastikan kolom dan baris di luar data kosong (gunakan delete kolom dan
delete row untuk memastikan kosong).

Simpan sebagai csv.

Untuk menjadikannya data arff, buka di Weka file csv tersebut (gambar bawah)

Jika muncul hasil seperti ini, ini artinya Excel menyimpan bukan dengan koma, tetapi dengan
titik koma.

Untuk mengatasi hal ini, buka lagi file ini, dengan open file, ​tapi pastikan pilihan "invoke
options dialog" dicentang​. (gambar bawah)
21
v:1.2

Setelah muncul dialog, isi field separator dengan titik-koma ";" (gambar bawah)

Setelah itu save, pilih sebagai ARFF, ini membuat file CSV akan disimpan dalam format ARFF.

Buka dengan Wordpad file arff yang baru saja disimpan, dapat dilihat untuk atribut "outlook" dan
"temperature" dan "play" berbeda dengan data training.

@relation prediksi_weather

@attribute ​outlook {sunny,rainy}


@attribute ​temperature {cool,hot}
@attribute humidity {normal,high}
@attribute windy {FALSE,TRUE}
@attribute ​play string

@data
sunny,cool,normal,FALSE,?
rainy,hot,high,TRUE,?

Penting untuk memastikan bahwa data train dan tes memiliki struktur yang sama, ganti header
sesuai dengan data training (copy paste), sehingga file arff menjadi:

@relation prediksi_weather

​ utlook {sunny, overcast, rainy}


@attribute o
@attribute t​ emperature {hot, mild, cool}
22
v:1.2

@attribute humidity {high, normal}


@attribute windy {TRUE, FALSE}
@attribute ​play {yes, no}

@data
sunny,cool,normal,FALSE,?
rainy,hot,high,TRUE,?

Sekarang kita siap memprediksi dua instance ini. Buka kembali arff yang sudah diperbaiki.
Masuk ke tab classify, di bagian "Result list", klik kanan dan pilih load model. Load model yang
sudah disimpan sebelumnya.

Hasilnya

Buka file yang berisi arff yang belum diketahui ini ​sebagai supplied test set​. (gambar bawah).

Klik open file, pilih file arff yang sebelumnya sudah dibuat, lalu pilih atribut "Play" sebagai class
(gambar bawah)
23
v:1.2

Lalu pilih “More Options”

Check “Output Prediction” agar prediksi dimunculkan, pilih plain text (gambar bawah).

Setelah itu di result list, klik kanan dan pilih “Re-evaluate model on current test set”. ​Jangan ​klik
tombol start.

Hasilnya akan seperti gambar di bawah. Dapat dilihat instance 1 diprediksi "Yes" (bermain
tenis) dan instance 2 "Tidak" .
24
v:1.2

Latihan 4

Berdasarkan model yang disimpan sebelumnya, apa prediksi untuk data berikut?

(Edit file arff, lalu jalankan re-evaluate model, jangan klik start)

rainy,cool,normal,TRUE
sunny,mild,normal,FALSE

Optimasi Model
Pada bagian sebelumnya kita meload data, membuat model sampai prediksi untuk dasaset se .
Bagian ini lebih difokuskan pada penggunaan berbagai teknik untuk menghasilkan model
prediksi yang memiliki kinerja tinggi.

Load data credit-g.arff (versi asli, bukan yang sudah di-praproses). Dataset ini menyimpan
profil customer bank yang mengg-apply kredit dan yang menjadi kelas adalah atribut "class"
yang berisi dua nilai "Good" (kredit disetujui) dan "Bad" (kredit sebaiknya ditolak).

Cek atribut kelas, jumlah label Good jauh lebih banyak daripada label Bad (gambar bawah).

Kita akan mencoba beberapa algoritma klasifikasi. Pertama adalah Naive Bayes yang cepat
dan cocok untuk menjadi baseline

Buka tab Classify, pada bagian Classifier klik Choose (gambar bawah). PIlih classifiers →
Bayes → NaiveBayes
25
v:1.2

Pilih cross validation, pastikan atribut class yang dipilih adalah "class" dan klik start (gambar
bawah)

Hasilnya:
Correctly Classified Instances 754 75.4 %
Incorrectly Classified Instances 246 24.6 %

Tapi jika precision-recall untuk setiap kelas dilihat, kelas "Bad" precisionnya hanya 0.611
TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class
0,864 0,503 ​0,800​ ​0,864​ 0,831 0,385 0,787 0,891 good
0,497 0,136 ​0,611​ ​0,497​ 0,548 0,385 0,787 0,577 bad

Confusion matrix-nya, terlihat bahwa ada 151 kelas Bad yang salah diprediksi menjadi Good:
a b <-- classified as
605 95 | a = good
151 149 | b = bad

Catatan​: precision, recall dan F1 (F-Measure) adalah ukuran yang lebih tepat jika jumlah tiap
kelas tidak seimbang

Akurasi = (tp+tn)/N
Presisi = tp/p’
Recall = tp/p
F1 = 2*Presisi*Recall / (Presisi+Recall)

Sekarang kita akan mencoba teknik klasifikasi lain. Pada panel "classifier" klik Choose dan pilih
Classifiers → Trees → yang aJ48, klik start.
26
v:1.2

Hasilnya lebih jelek dibandingkan Naive Bayes, baik dari akurasi maupun precision kelas "Bad".

Correctly Classified Instances 705 70.5 %


Incorrectly Classified Instances 295 29.5 %

TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class
0,840 0,610 0,763 0,840 0,799 0,251 0,639 0,746 good
0,390 0,160 ​0,511​ 0,390 0,442 0,251 0,639 0,449 bad

Perhatikan dibagian result list (gambar bawah), pada bagian itu dapat dilihat sejarah eksekusi.
Jika kita ingin melihat hasil sebelumnya dengan Naive Bayes, klik baris pertama, ini
memudahkan dokumentasi eksperimen.

Sekarang coba teknik klasifikasi Random Forest Classifiers → Trees → RandomForest.


Hasilnya lebih baik dibandingkan Naive Bayes:

Correctly Classified Instances 764 76.4 %


Incorrectly Classified Instances 236 23.6 %

TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class
0,917 0,593 0,783 0,917 0,845 0,386 0,791 0,887 good
0,407 0,083 0,678 0,407 0,508 0,386 0,791 0,628 bad

Latihan 5:

Coba beberapa teknik algoritma lain seperti Logistic Regression (Functions→ Logistic ),
k-NN (Lazy → IBK) dan Support Vector Machine (Functions → SMO). Mana yang paling
baik?

Setelah mencoba beberapa classifier, kita akan mencoba berbagai parameter RandomForest.
Coba jalankan ulang RandomForest, lalu klik tulisan RandomForest pada panel classifier
27
v:1.2

Akan muncul berbagai parameter yang digunakan, edit numIterations dari 100 menjadi 400
(gambar bawah). numIterations adalah jumlah subtree yang akan dibangkitkan. Parameter ini
yang biasanya memiliki pengaruh paling besar dalam algoritma randomforest.

Jalankan ulang, klik "Start" maka hasilnya sebagai berikut, proses pembuatan model lebih lama
tetapi ada peningkatan kinerja:

Correctly Classified Instances 770 77 %


Incorrectly Classified Instances 230 23 %

TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class
0.916 0.570 0.789 0.916 0.848 0.405 0.793 0.890 good
0.430 0.084 0.686 0.430 0.529 0.405 0.793 0.630 bad

Jika komputer anda cukup powerfull, coba isi parameter numIterations menjadi 1000 (Jika
proses terlalu lama anda dapat mengklik “Stop” untuk berhenti ditengah proses). Apakah ada
peningkatan hasil?

Jangan lupa simpan model yang dibuat jika proses training memerlukan waktu lama.

Kita sudah mencoba berbagai algoritma, lalu kita juga sudah mencoba berbagai parameter
(walaupun baru parameter untuk RandomForest). Sekarang kita akan mencoba mengubah data
input.

Pada bagian pertama modul ini kita sudah menggunakan praproses yang umum seperti
pembersihan data dan diskritisasi. Pada kasus ini kita akan melakukan praproses khusus untuk
task klasifikasi.

Pilih tab preprocess, pada panel filter, klik Choose (gambar bawah) lalu pilih supervised →
attribute →AttributeSelection
28
v:1.2

Klik tulisan AttributeSelection pada panel untuk mengeluarkan parameter (gambar bawah).
Pada bagian evaluator, klik Choose dan pilih InfoGainAttributeEval, information gain adalah
teknik yang digunakan di decision tree untuk menentukan kemampuan attribute memisahkan
kelas. Lalu untuk “search” klik juga Choose dan pilih Ranker yang akan mengurutkan atribut
dari yang paling penting untuk menentukan kelas.

Klik apply dan perhatikan perubahan urutan atribut (jika tidak terlihat coba Undo lalu Apply
lagi). Gambar di bawah memperlihatkan sebelum dan sesudah filter ini di-apply

Sekarang kita coba buang atribut yang paling tidak penting (yang berada paling bawah). Pilih
atribut tersebut kemudian remove.

Jalankan ulang random forest dengan konfigurasi terakhir yang terbaik (numIterations 400).
Hasilnya adalah sebagai berikut, selain atribut berkurang (jumlah data berkurang proses
semakin cepat) kinerja juga meningkat

Correctly Classified Instances 772 77.2 %


29
v:1.2

Incorrectly Classified Instances 228 22.8 %

TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class
0.920 0.573 0.789 0.920 0.850 0.410 0.794 0.885 good
0.427 0.080 0.696 0.427 0.529 0.410 0.794 0.632 bad

Latihan 6​:

Load Dataset berikut: ​http://bit.ly/yw_dataset_olimpiade​ Dataset tersebut berisi data semua


atlet olimpiade. Analisis data lalu buat model untuk memprediksi medali yang akan diperoleh.
30
v:1.2

Regresi
Regresi memprediksi data numerik. Untuk mencoba regresi, buka cpu.arff di direktori data
tempat Weka diinstall. Contoh datanya adalah sebagai berikut. Semua atributnya bertipe
numeric:

Dapat dilihat bahwa atribut class bertipe numeric. Tujuan dari regresi adalah memprediksi
atribut class ini berdasarkan atribut yang lain.

Teknik pertama yang dapat digunakan adalah regresi linear. Teknik ini sebaiknya dicoba
sebelum mencoba teknik yang lebih rumit karena cepat dan jika datanya linear dapat
memberikan kinerja yang bagus. Buka tab classify, pilih Choose dan LinearRegresion yang
berada di bawah classifier → Linear Regression

Hasilnya adalah sebagai berikut, dapat dilihat persamaan untuk memperoleh nilai atribut class,
dengan nilai RMSE 69.56:

Linear Regression Model


class =
0.0491 * MYCT +
0.0152 * MMIN +
0.0056 * MMAX +
0.6298 * CACH +
1.4599 * CHMAX +
-56.075
31
v:1.2

=== Summary ===

Correlation coefficient 0.9012


Mean absolute error 41.0886
Root mean squared error 69.556
Relative absolute error 42.6943 %
Root relative squared error 43.2421 %
Total Number of Instances 209

Catatan: penjelasan singkat tentang output summary regresi Weka:

1. Correlation coefficient; menghitung apakah data secara signifikan terkait secara linear.
Semakin mendekati nilai 1.0 berarti semakin terkait sedangkan mendekati −1.0 berarti
terkait linear terbalik. Jika nilainya mendekati 0, artinya tidak ada kaitan.
2. Mean absolute error (MAE)​: MAE mengukur besaran rata-rata error tanpa
memperhitungkan arahnya. MAE adalah rata-rata dari perbedaan absolut antara
prediksi dan nilai sesungguhnya dan setiap instance memiliki bobot yang sama
3. Root mean squared error (RMSE)​: RMSE adalah pengukuran skor kuadratik. RMSE
adalah akar dari rata-rata kudarat perbedaan antara prediksi dan nilai sesungguhnya.
Sepertinya halnya MAE, RMSE tidak memperhitungkan arah, nilainya dapat
merentang dari 0 sampai ∞ dan semakin kecil berarti semakin baik. Perbedaanya
dengan MAE adalah RMSE memberikan bobot lebih banyak untuk error yang besar
karena selisih nilai prediksi dan nilai aktual dikuadratkan. Oleh karena itu RMSE cocok
digunakan dalam kasus yang mempertimbangkan error besar.
4. Relative absolute error (RAE)​. Selisih (error) dibagi dengan varian dari data nilai
sesungguhnya sehingga memiliki rentang antara 0 dan 1.
5. Root relative squared error (RRSE). ​Sama dengan RAE tetapi error dikuadratkan
dulu.

Teknik yang lain untuk regresi adalah SVR (Support Vector Regression) yang merupakan
adaptasi dari SVM (Support Vector Machine). Pilih Choose lalu function → “SMOreg”. Hasilnya
nilai RMSE lebih tinggi dibandingkan linear regression (lebih buruk).

Correlation coefficient 0.8892


Mean absolute error 34.8638
Root mean squared error 78.5746
Relative absolute error 36.2263 %
Root relative squared error 48.8488 %
32
v:1.2

Teknik lain yang dapat dicoba adalah neural network, yaitu multilayer perceptron (classifiers →
functions → MultiLayerPerceptron). Nilai RMSE lebih baik daripada linear regression.

Correlation coefficient 0.9202


Mean absolute error 41.5204
Root mean squared error 65.286
Relative absolute error 43.143 %
Root relative squared error 40.5874 %

Selanjutnya dapat dicoba algoritma k-nearest neighbors (KNN) . KNN menyimpan semua data
training dan mencari sejumlah k data yang paling mirip untuk melakukan prediksi. Tidak ada
model yang dibuat, semua proses dilakukan saat proses prediksi.

Pilih kategori lazy → IBk. Hasilnya lebih baik dibandingkan MultiLayerPerceptron:

Correlation coefficient 0.9257


Mean absolute error 32.2057
Root mean squared error 60.8106
Relative absolute error 33.4643 %
Root relative squared error 37.8052 %

Selain untuk klasifikasi, decision tree juga dapat digunakan untuk regresi. Jika menggunakan
random forest (trees → RandomForest), hasilnya lebih baik dibandingkan KNN:

Correlation coefficient 0.9532


Mean absolute error 25.6115
Root mean squared error 51.4883
Relative absolute error 26.6123 %
Root relative squared error 32.0096 %

Catatan​:
Perlu diperhatikan bahwa perbandingan antara teknik regresi pada contoh ini masih
menggunakan parameter default masing-masing teknik. Bisa dimungkinkan setelah
parameternya diubah, suatu teknik yang tadinya lebih rendah kinerjanya berubah jadi lebih
baik.

Menariknya jika parameter numIterations RandomForest ini diubah menjadi 400, kinerjanya
(RMSE) malah menurun.

Berikutnya akan kita akan coba memprediksi data yang belum diketahui. Jika pada task
klasifikasi sebelumnya data di-input dengan Excel, sekarang kita coba langsung menggunakan
Weka (cocok untuk data yang tidak terlalu banyak). Buka kembali tab preprocess, lalu save.
33
v:1.2

Save pada Weka berfungsi sebagai save-as. Save file sebagai cpu-backup.arff untuk
mencegah tertimpanya data asli.

Catatan​:
Dalam data mining, data adalah komponen yang paling berharga. Selalu backup data di
beberapa tempat (flashdisk dan cloud seperti Google Drive atau Dropbox)

Sekarang klik "Edit" (sebelah Undo). Pilih salah satu cell, tekan ctrl-A, klik kanan (gambar
bawah) lalu pilih "Delete ALL selected instances" untuk mengosongkan dataset.

Selanjutnya klik "Add instance". Isi dengan data berikut yang akan diprediksi nilai numeric
class-nya. Class tidak dapat diberi tanda tanya (?) karena langsung diganti dengan nilai 0 oleh
Weka.

Tekan OK dan Save sebagai cpu-prediksi.arff.

Selanjutnya load model atau jika lupa, buka lagi data training (cpu.arff) dan lakukan pembuatan
model dengan random forest.

Seperti halnya task klasifikasi, aktifkan tab “Classify”, klik "More Options", set output prediction
ke "Plain Text". Setelah itu ganti cross validation ke "Supplied Test Set", klik "Set", open file
yang akan kita prediksi nilainya yaitu "cpu-prediksi.arff". Klik kanan model di result list, pilih
"Re-evaluate model on current test set".

Hasilnya:

=== Predictions on user test set ===


inst# actual predicted error
1 0 ​170.903​ 170.903
34
v:1.2

Abaikan error karena memang nilai aktualnya tidak diketahui. Ini disebabkan editor data di
Weka tidak mengijinkan nilai class diisi "?". Jadi untuk instance 126,200,5000,200,10,50, model
akan memprediksi target kelasnya adalah 170.903.

Latihan 7​:
Buka cpu.with.vendor.arff, ini adalah data yang sama dengan cpu tetapi ditambah data
vendor yang bertipe ​nominal​. Coba dengan algoritma linear regression, KNN,
multilayerperceptron dan randomforest. Mana yang lebih baik?

Latihan 8​:

Pada dataset cpu.arff yang kita gunakan sebelumnya, walaupun kita dapat membuat model,
kita tidak memahami arti dari setiap atribut.

Coba download data housing.arff yang dapat diperoleh di:


http://tunedit.org/repo/UCI/numeric/housing.arff​ Dataset ini berisi 506 instance dengan class
target adalah median harga rumah di daerah Boston (dalam $1000) dan 12 atribut lainnya
seperti crime rate, jumlah proporsi industri dsb. Lakukan regresi, coba lakukan praproses
seperti membuang atribut yang sepertinya tidak penting, diskritisasi, apakah ada pengaruh
terhadap kinerja model?
35
v:1.2

Clustering
Pada task clustering, kita akan mencari kelompok-kelompok natural berdasarkan atributnya.
Buka kembali dataset credit-g.arff.

Pilih tab cluster, klik tombol choose dan pilih SimpleKMeans.

Klik tulisan simpleKmeans, maka akan ditampilkan parameter untuk KMeans. Bagian yang
paling penting adalah jumlah cluster (numCluster), coba isi dengan 4

Hasilnya dapat dilihat pada gambar berikut.


36
v:1.2

Kolom paling kiri adalah atribut, kolom kedua adalah cluster yang berisi semua data: “Full Data”.
Kolom berikutnya adalah cluster pertama dan seterusnya. Nilai atribut yang ditampilkan adalah
centroid (nilai tengah cluster). Ada tiga cluster dengan class "Good" dan satu cluster dengan
kelas "Bad". Bagian yang menarik dari keempat cluster ini adalah atribut personal_status.
Semua adalah male-single kecuali untuk cluster "Bad". Perbedaan yang lain adalah atribut
purpose, untuk kelas "Bad" atribut ini umumnya adalah "New Car".

Di output juga ditampilkan nilai SSE:


Within cluster sum of squared errors: 5226.216042637847

Nilai ini memperlihatkan tingkat kemiripan instance di dalam suatu cluster. Jika setiap instance
di cluster identik maka nilainya akan 0. Tentu jika semakin besar jumlah cluster maka nilai SSE
akan semakin turun, tetapi cluster yang memiliki terlalu sedikit instance juga tidak terlalu
berguna untuk analisis.
Untuk melihat visualisasinya, pada bagian result list, klik kanan lalu pilih "Visualize cluster
assignment" (gambar bawah)

Pilih sumbu X dengan atribut class dan sumbu Y dengan housing

Perbesar nilai jitter, maka dapat dilihat visualisasi cluster sebagai berikut. Cluster 0 (biru gelap)
umumnya untuk kelas "Bad" sedangkan cluster 3 dan cluster 4 umumnya "Good". Menarik
bahwa cluster berwarna merah (cluster 1) kebanyakan untuk instance dengan atribut
housing=For Free. Coba ganti-ganti sumbu Y dengan atribut lain.
37
v:1.2

Latihan 9

Coba ganti numCluster menjadi 2, lalu 10 dan 20. Pola apa yang menarik? (khususnya
berkaitan dengan kelas "Bad"). Apakah atribut personal_status masih memiliki pola yang
sama?

Sekarang coba dengan teknik clustering lain, misal teknik Canopy yang tidak memerlukan input
jumlah cluster, maka menghasilkan 76 cluster. Teknik Canopy tidak akurat tapi cepat dan sering
digunakan sebelum K-Means digunakan untuk menentukan jumlah cluster. Berdasarkan ini,
lakukan kembali K-Means tetapi dengan 70 cluster, apakah ada hal yang menarik?

Latihan 10

Coba teknik cluster yang lain seperti EM, Farthest First, Filtered Clusters, MakeDensityBased
cluster (hanya dapat dilihat visualisasinya) .
38
v:1.2

Association Rule
Misalnya kita mempunyai data seperti ini, dan akan melakukan mining association rule untuk
mencari pola barang apa yang dibeli bersamaan.

ID Transaksi Barang yg Dibeli

10 A, C, D

20 B, C, E

30 A, B, C, E

40 B, E

Representasi file ARFF-nya adalah sebagai berikut, simpan dengan nama transaksi.arff:
@RELATION transaksi

@ATTRIBUTE transid NUMERIC


@ATTRIBUTE itemA {y,n}
@ATTRIBUTE itemB {y,n}
@ATTRIBUTE itemC {y,n}
@ATTRIBUTE itemD {y,n}
@ATTRIBUTE itemE {y,n}

@DATA
10,y,?,y,y,?
20,?,y,y,?,y
30,y,y,y,?,y
40,?,y,?,?,y

Klik open file, pilih transaksi.arff. Pertama kita harus menghapus atribut transid karena tidak
berkaitan dengan data (gambar bawah). Pilih atribut transid, lalu klik button “Remove”.
39
v:1.2

Selanjutnya pilih tab Associate (gambar bawah), secara default algoritma yang digunakan
adalah apriori. Tekan start.

Hasilnya akan seperti ini (dibagian output):

Output menampilkan parameter algoritma (support, confidence) dan rule terbaik berdasarkan
confidence. Rule nomor satu pada gambar di atas dapat dibaca jika user beli item E maka
dengan 100% confidence dia akan membeli item B.

Misalnya kita ingin mengganti agar minimum support menjadi 0.5 (2 instance). Klik tulisan
apriori (gambar bawah)
40
v:1.2

Kemudian ganti parameter lowerBoundMinSupport dengan 0.5

Tekan OK, lalu jalankan “Start” sekali lagi. Hasilnya akan seperti ini, jumlah rule berkurang
karena minimum support menjadi 2 instance. Minimum support digunakan menghilangkan pola
yang confidence-nya bisa saja tinggi tetapi hanya sedikit muncul di transaksi:

Tekan OK, lalu jalankan “Start” sekali lagi. Hasilnya akan seperti ini, jumlah rule berkurang
karena minimum support menjadi 2 instance :

Evaluasi Atribut
[todo, perlu dikaitkan dengan klasifikasi]
41
v:1.2

Visualisasi Data
[todo: integrasikan ke bagian klasifikasi?]
Weka menyediakan fasilitas untuk memvisualisasikan data yang membuat kita lebih
mudah memahami data, terutama untuk data berukuran besar. Untuk mencoba fitur ini,
download data arff berikut dan load ke Weka. Data ini dibuat Marko Bohanec, yang
berisi evaluasi mobil berdasarkan beberapa atribut.
https://drive.google.com/open?id=0B2y--TQz9k-PeGRXeTkwdkZMcE0

Setelah itu pilih tab visualize, akan ditampilkan keterkaitan antara atribut. Tentu yang
paling kita ingin tahu adalah kaitan antara atribut dengan kelas. Klik grafik antara kelas
dan safety (gambar bawah)

Akan ditampilkan grafik yang menghubungkan antara safety dan kelas. Supaya grafik
lebih jelas, naikan nilai jitter (gambar bawah)

Hasilnya dapat dilihat pada gambar dibawah. Atribut safety ada di sumbu x (low, med,
high), sedangkan kelas ada di sumbu y (vgood=very good, good, acc, unacc).
42
v:1.2

Dapat dilihat untuk safety yang low, evaluasi mobil seragam di uncacc (tidak di acc),
tetapi untuk kualitas safety medium, jumlah kelas relatif seimbang. Sedangkan untuk
kelas “vgood=verygood” hanya ada untuk atribut safety high. Dapat disimpulkan atribut
ini sangat penting untuk kelas unacc dan verygood. Kita dapat juga mengklik point,
terutama untuk outlier, sebagai contoh, untuk safety low ada nilai yang hampir
mendekati acc (gambar bawah)
43
v:1.2

Coba klik maka akan ditampilkan nilai semua atribut untuk titik tersebut (gambar
bawah), mungkin karena :

Sedangkan grafik di bagian kanan (gambar bawah) adalah shortcut untuk grafik.
Pertama perlu dilihat kode pewarnaan kelas (biru = unacc, merah=acc dst). Dari grafik
ini terlihat mayoritas kelas adalah unacc. Setiap baris menyatakan atribut (X), klik baris
untuk menampilkan grafik detailnya disebelah kiri.

Anda mungkin juga menyukai