Mengetahui RULE Hasil Training ANFIS.

Berbeda dengan JST yang hasil trainingnya mirip “black box” yang tidak diketahui logikanya, pada Adaptive Neuro-Fuzzy Inference System (ANFIS) hasil trainingnya memiliki logika. Logika ini dikenal dengan istilah RULE. Postingan ini bermaksud menunjukan bagaimana melihat RULE hasil training. Masukan data training, misalnya data yang mirip Logika XoR.

Buka ANFIS editor dengan mengetik “anfisedit” pada command window. Masukan data latih tersebut. Gunakan “From: worksp”.

Rancang FIS yang akan dilatih dengan menekan “Generate FIS” di editor ANFIS.

Di sini di isian “Number of MFs” berisi “3 3” yang artinya tiga kelas input1 dan input2, misal “baik”, “cukup”, “kurang”, bisa juga diganti “2 2” jika hanya dua kategori, misal “baik” dan “buruk” saja. Tentu saja makin banyak kategori biasanya hasil lebih baik, apalagi jika datanya sedikit seperti kasus di contoh ini. Lanjutkan dengan menekan “Train Now”. Jika sudah perhatikan RULE yang terbentuk dengan menekan “Edit” – “Rule”.

In1mf1, dan seterusnya bisa diedit dengan bahasa yang kita mengerti, dengan cara masuk ke menu “edit” – “FIS Proerties”. Mirip caranya dengan mengedit fuzzy inference system (FIS). Berbeda dengan Jaringan Syaraf Tiruan (JST), ANFIS memiliki keunggulan dimana hasil training memiliki logika tertentu. Selanjutnya, uji dengan data sesungguhnya yaitu Logika XoR. Sebelumnya simpan ke “Workspace” misalnya dengan nama “xor”.

Testing dengan data sesungguhnya, yaitu logika XoR.

Jalankan dengan fungsi “evalfis” untuk menguji data “xorlogic” tersebut (kolom 1 dan 2) apakah sama dengan targetnya (kolom 3), yaitu beruturut-turut 0, 1, 1, 0.

Perhatikan “result” dengan jawaban logika xor yang asli, jika result dibulatkan (ketik “round(ans)”) akan menghasilkan jawaban sesungguhnya, alias akurat 100%. Selamat mencoba.

 

 

Mempersiapkan Data dan Training Model ANFIS, JST dan SVM

Dalam machine learning dikenal beberapa jenis data antara lain: data training dan data testing. Terkadang data training dipisah menjadi data training dan target. Dalam prakteknya, data training menggunakan sebagaian prosentase dengan sisanya dijadikan data tasting untuk pengujian model.

Excel dapat digunakan untuk mempersiapkan data training walaupun memiliki beberapa keterbatasan dalam mengelola “big data”. Untuk data yang tidak terlalu besar, aplikasi bawaan ms office ini cukup dapat diandalkan.

Walaupun cross validation banyak diterapkan saat ini, tetapi dengan 80% data training dan sisanya untuk testing (20%) sudah cukup untuk mengukur akurasi model yang dirancang. Sebagai contoh data training berikut dapat digunakan, dengan data latihnya. Berikut langkah proses mempersiapkan data training dan data testing.

1. ANFIS

Untuk ANFIS data training dan target digabung menjadi satu. Formatnya karena sudah sesuai dengan format pentabelan di Excel maka cukup menyiapkan data training saja. Gunakan dua kode ini untuk mengimport data dengan Matlab.

  • load(‘data.dat’);
  • load(‘testing.dat’);

Untuk ANFIS, fungsi “anfisedit” disediakan Matlab untuk melatih ANFIS lewat data yang ada. Karena isian sudah dalam bentuk DAT maka sebenarnya dua kode di atas hanya digunakan nanti untuk testing dan training lewat model lainnya seperti JST, SVM, dll.

Pastikan training data muncul dengan tiga kelas sesuai dengan data (kelas 1, 2 dan 3). Berikutnya “Generate FIS” diklik untuk meramu FIS yang masih kosong.

Angka 3 di atas berarti ada 3 komponen MF di tiap input. Jumlah angka yang muncul menandakan jumlah masukan, di sini ada empat input yang merupakan variabel penentu output. Tipe MF ada banyak, di sini akan digunakan “trimf” yang paling sederhana (linear). Gunakan saja defaultnya (3 komponen di tiap inputan), yang merepresentasikan kondisi “low”, “medium”, dan “high”. Output gunakan saja konstan. ANFIS hanya tersedia di jenis fuzzy “Sugeno”. Tekan “Struktur” di sisi kanan untuk melihat sekilas Network yang siap dilatih.

Berikutnya masuk ke panel “Train FIS” untuk melatih Network. Ada dua pilihan pembelajaran: hybrid dan backpropagation. Gunakan saja “hybrid”. Berikut merupakan hasil training dengan 3 epoch (mirip iterasi).

Error tampak di layar utama (sekitar 0.1445). Simpan hasil pelatihan lewat “File” – “Export” – Pilih file.

Setelah nama fuzzy diisi (berekstensi *.fis) maka model siap diuji dengan data testing yang sudah ada. Misalnya diberi nama “anfisiris.fis”. Untuk testing gunakan kode berikut ini:

  • anfisiris=readfis(‘anfisiris.fis’);
  • prediksi=evalfis(testing(:,1:4);
  • tes=testing(:,1:4)
  • hasil=evalfis(tes,anfisiris)

Terakhir adalah menghitung akurasi dengan cara prosentase MAPE (Mean Average Percentage Error)-nya:

Jika dibandingkan maka akan tampak beberapa yang error, misalnya di sini ada satu yang error, jadi nilai MAPE-nya= 1/39 *100 = 2,56 %. Atau akurasinya = 100-2,56 = 97,44%. Sedangkan jika ingin mengetahui prediksi mana saja yang tidak akurat dapat menggunakan matriks confusion.

  • target=testing(:,5);
  • target=transpose(target);
  • prediksi=transpose(round(hasil));
  • c=confusionmat(target,prediksi)
  • c =
  • 13 0 0
  • 0 13 0
  • 0 1 12

Cara membaca matriks confusion adalah sebagai berikut. Kolom merupakan prediksi sementara baris adalah aktualnya (dalam hal ini sama dengan target (testing di kolom kelima). Fungsi “round” ditambahkan pada hasil untuk mencari kelas prediksi terdekat, misalnya 2.7 dikategorikan kelas “3”. Diagonal pada matriks confusion menyatakan akurasi. Perhatikan di baris kedua kolom ketiga, di sini harusnya 13 tetapi berisi 12 karena ada satu prediksi 3 (baris ketiga) tetapi kenyataannya 2 (kolom kedua).

2. Neural Networks (Jaringan Syaraf Tiruan)

JST perlu memisahkan data training dengan target (labelnya). Selain itu, formatnya juga berbeda dengan data pada ANFIS, dimana variabel berdasarkan baris. Untuk itu perlu modifikasi data yang ada berdasarkan “data.dat” dan “testing.dat”. Berikut ini kode untuk data training dan targetnya.

  • load(‘data.dat’);
  • load(‘testing.dat’);
  • datalatih=data(:,1:4);
  • datalatih=transpose(datalatih);
  • target=data(:,5);
  • target=transpose(target);

Coba cek dengan fungsi “size”, pastikan jumlah baris merepresentasikan jumlah variabel, sementara jumlah kolom merepresentasikan jumlah data. Berikutnya buat JST kosong dan latih.

  • network=newff(datalatih,target,[81 81]);
  • network=train(network,datalatih,target);

Perlu disiapkan data untuk testing.

  • tesdata=testing(:,1:4);
  • tesdata=transpose(tesdata);
  • targettes=testing(:,5);
  • targettes=transpose(targettes);

Selanjutnya menggunakan fungsi “sim” untuk memprediksi.

  • hasil=sim(network,tesdata);
  • aktual=targettes;
  • prediksi=round(hasil);
  • c=confusionmat(aktual,prediksi);
  • c =
  • 13 0 0 0
  • 0 11 2 0
  • 0 4 6 3
  • 0 0 0 0

Dari matriks confusion di atas dapat diketahui precision-nya (atau dikenal juga dengan nama MAPE). Caranya adalah membandingkan total yang benar (angka di sisi diagonal) dengan total data testing.

  • 13+11+6
  • ans =
  • 30
  • ans/39
  • ans =
  • 0.7692

Akurasi yang dihasilkan (MAPE) adalah 76.92%.

3. Support Vector Machine (SVM)

SVM hanya memisahkan dua kelas yang berbeda. Jika ada lebih dari dua kelas, maka perlu modifikasi dengan menggunakan lebih dari satu garis pemisah. Salah satu tekniknya adalah membuat pohon keputusan. Misalnya ada tiga kelas (kelas 1, kelas 2 dan kelas 3) maka perlu dibuat tiga garis pemisah, misalnya kita beri nama svm1, svm2 dan svm3.

  • svm1, pemisah antara kelas 1 dan kelas 2
  • svm 2, pemisah antara kelas 1 dan kelas 3, dan
  • svm 3, pemisah antara kelas 2 dan kelas 3

 

(source: link)

Selanjutnya, dibuat logika if-else untuk mengarahkan garis pemisah yang sesuai (atau dengan teknik lain yang sesuai). Berikut ini salah satu contohnya:

  • test1=svmclassify(svm1,datatesting)
  • if test1==1
  • test2=svmclassify(svm2,datatesting)
  • if test2==1
  • class=’1′
  • else
  • class=’3′
  • end
  • else
  • test3=svmclassify(svm3,datatesting)
  • if test3==2
  • class=’2′
  • else
  • class=’3′
  • end
  • end

Untuk membuat garis pemisah, Matlab menyediakan fungsi “svmtrain”. Jika ingin membuat garis pemisah antara kelas 1 dan kelas 2 (svm1) diperlukan data latih yang memiliki kelas 1 dan kelas 2 (tanpa menyertakan kelas 3) disertai dengan group-nya (dalam JST dikenal dengan istilah target).

  • svm1=svmtrain(train,group)

Di sini “train” merupakan data gabungan kelas 1 dan kelas 2, begitu pula “group” merupakan kelas yang sesuai dengan “train”. Gunakan excel untuk memilah-milah antara kelas 1 dengan kelas lainnya untuk membuat svm2, dan svm3.

 

Competitive Network dan Contoh Implementasinya

Tipe network ini menghasilkan keluaran yang terbesar sebagai pemenang. Misal ada tiga input sebesar 1,2, dan 3, maka pemenangnya adalah input ketiga (sebesar 3). Berikut notasi standar competitive network.

Fungsi competitive network pada matlab adalah “compet”. Buka command window pada Matlab dan coba fungsi “compet”. Untuk lebih jelasnya silahkan buka help dengan mengetik “help compet” di command window.

  • a=[1;2;3];
  • compet(a)
  • ans =
  • 0
  • 0
  • 1
  • compet(-a)
  • ans =
  • 1
  • 0
  • 0

Perhatikan kode di atas. Jika ingin menemukan nilai tertinggi gunakan fungsi compet(a) sementara jika ingin mencari terendah, gunakan compet(-a). Biasanya mencari nilai terendah digunakan dalam menentukan mana yang paling mirip (similar) antara beberapa hasil output. Tentu saja ada sedikit modifikasi kode untuk memberitahu hasil minimum suatu inputan.

Misal kita beri nama tiga input tersebut berturut-turut “nilai A”, “nilai B” dan “nilai C”. Maka sistem diminta menampilkan nilai mana yang terkecil? Lanjutkan dengan kode berikut ini.

  • input1=[“nilai A”;”nilai B”;”nilai C”];
  • hasil=compet(-a);
  • [ind,result]=find(hasil);
  • minimum=input1(ind)
  • minimum =
  • “nilai A”

Lebih simple dibandingkan dengan menggunakan “if-else” berikut ini yang jauh lebih panjang jumlah baris programnya, apalagi yang akan dibandingkan sangat banyak.

  • if (a(1)<a(2)) && (a(1)<a(3))
  • minimum=’Nilai A’
  • else
  • if a(2)<a(3)
  • minimum=’Nilai B’
  • else
  • minimum=’Nilai C’
  • end
  • end
  • minimum =
  • ‘Nilai A’

Membuat Mask (Bingkai) Pada Citra & Manfaatnya

Postingan ini bermaksud menginformasikan problem ketika pencocokan pola citra kurang berhasil akibat pola yang tidak memiliki bingkai. Ketika dengan Autoassociative Memory diminta memprediksi angka satu berikut (lihat yang berwarna putih).

Prediksi di sebelah kanan memang tepat angka satu, tetapi terpotong di bagian atas dan bawahnya. Kita coba untuk menambahkan bingkai pada citra yang akan dilatih dan diterka.

Menambahkan Nol di Sekitar Matriks

Misal angka nol di bawah akan dibuatkan bingkainya. Langkah pertama adalah mengetahui ukuran matriks angka nol tersebut.

Gunakan fungsi size di Matlab. Setelah itu dengan fungsi “zeros” buat matriks berukuran dua digit lebih banyak dari ukuran sebelumnya. Misalnya matriks di atas memiliki ukuran baris x kolom sebesar 5 x 3 maka buatlah matriks nol dengan ukuran 7 x 5.

  • imshow(nol,’InitialMagnification’,’fit’)
  • nolmask=zeros(7,5);
  • nolmask(2:6,2:4)=nol;
  • imshow(nolmask,’InitialMagnification’,’fit’)

Perhatikan angka nol (yang berwarna putih) telah memiliki bingkai (warna hitam di sekelilingnya). Berikutnya kita coba melatih jaringan syaraf tiruan (JST) yang sebelumnya tanpa bingkai. Diuji dengan angka satu udah ok: hasil: “satu” (sebelah kiri) dan yang sebelah kanan nol dengan sedikit error berhasil mendeteksi (hasil deteksi: “nol”).

Instal Matlab Mobile (Android)

Matlab pertama kali diciptakan untuk memanipulasi matriks dengan cepat dan praktis. Oleh karena itu diberi nama “Matlab” singkatan dari Matrix Laboratory. Kemampuan yang sesederhana kalkulator diimbangi dengan pemrograman yang berat membuat aplikasi ini banyak disukai oleh peneliti-peneliti yang bermain dengan komputasi. Tidak lengkap sepertinya saat ini jika ada aplikasi yang tidak ada versi androidnya. Matlab pun menyediakan aplikasi versi android yang dapat digunakan oleh peneliti dan mahasiswa dimanapun berada. Postingan ini sekedar membagikan info bagaimana instal aplikasi Matlab via android ini.

1. Mengunduh Aplikasi

Berhubung smartphone saya menggunakan sistem operasi android maka mau tidak mau menggunakan playstore untuk mengunduhnya.

Tekan tombol Install untuk memulai instal aplikasi Matlab android ini. Sepertinya tidak perlu dijelaskan lebih jauh, butuh beberapa menit untuk menginstalnya. Pastikan Matlab siap digunakan.

2. Sign Up

Langkah berikutnya adalah mendaftar akun di www.mathworks.com. Tahap ini didahului oleh instal upgrade aplikasi. Sangat dianjurkan jika Anda punya lisensi Matlab, tetapi jika tidak tentu saja tidak perlu upgrade.

Satu hal penting untuk dapat mendaftar akun di Matlab adalah email resmi, bukan gmail, yahoo, dan sejenisnya. Setelah memasuki regional, lanjutkan dengan aktivasi dengan cara mengklik link yang dikirimkan via email resmi tersebut.

3. Testing

Selamat, Anda telah berhasil menginstal Matlab mobile. Berikut ini saya coba memanipulasi matriks, menampilkan citra dan menjalankan salah satu fungsi, yaitu normalisasi Euclidean. Beberapa juga sudah saya coba membuat plot/grafik, dapat dilaksanakan juga. Selamat mencoba, semoga bermanfaat.

Associative Memory Jaringan Syaraf Tiruan dengan Matlab

Jaringan Syaraf Tiruan (JST) ditemukan oleh ilmuawan ilmu komputer dengan maksud menciptakan sistem yang menyerupai otak manusia. Salah satu kemampuan otak manusia adalah mengingat sesuatu. Perhatikan piramida taksonomi bloom di bawah ini.

Tingkat paling rendah dari otak kita adalah mengingat, dilanjutkan pemahaman, dan seterusnya hingga membuat (creating). Postingan berikut ini memperlihatkan kemampuan JST dalam mengingat suatu citra, misalnya huruf dan angka.

Kasus. Berikut ini contoh kasus untuk membuat JST yang mampu mengingat dan memahami. Jika diberikan masukan angka 7 maka JST diharapkan mengeluarkan huruf “t”. Dengan kata lain JST selain mengingat juga memahami prinsip asosiasi, jika “7” maka “t”.

Anda diminta untuk:

  • 1. Membuat JST
  • 2. Menentukan parameter-parameter JST
  • 3. Menguji JST

Penyelesaian. Untuk mudahnya, gunakan Matlab dalam perhitungannya. Masuk ke jendela command window.

1. Model JST yang tepat untuk menyelesaikan masalah ini adalah “Symmetric Hard Limit Associator” dengan metode pembelajaran Hebbian.

Di sini P merupakan input yang akan dilatih (angka “7”) sementara A merupakan keluarannya. Untuk melatihnya di sini angka “t” merupakan target pelatihannya. Pertama-tama siapkan dua matriks baris P dan T yang masing-masing menunjukan angka “7” dan huruf “t”.

  • >> P=[1 1 1 1;0 0 0 1;0 0 1 0;0 1 0 0]
  • P =
  • 1 1 1 1
  • 0 0 0 1
  • 0 0 1 0
  • 0 1 0 0

Pastikan P menunjukan angka “7”. Selanjutnya mengubah 0 menjadi -1. Sebenarnya bisa saja langsung dari pembuatan matris P di atas, tetapi mengetik -1 membutuhkan dua proses, lebih lama dari mengetik angka 0. Jadi dengan instruksi berikut Matriks P menjadi -1 seluruh angka nol-nya.

  • >> P=P*2-1
  • P =
  • 1 1 1 1
  • -1 -1 -1 1
  • -1 -1 1 -1
  • -1 1 -1 -1

Selanjutkan jadikan matriks P ini menjadi matriks kolom dengan memanfaatkan fungsi “reshape” Matlab.

  • >> P=reshape(transpose(P),[16,1])

Matriks P menjadi matriks kolom yang berukuran 16×1. Lakukan hal yang sama untuk matriks target nya (huruf “t”).

  • >> T=[0 1 0 0;1 1 1 1;0 1 0 0;0 1 1 1];
  • >> T=T*2-1;

T=reshape(transpose(T),[16,1])

2. Parameter-parameter JST antara lain bobot yang dihitung dengan persamaan: W = TPT dengan superscript T artinya “transpose”.

  • >> W=T*transpose(P)
  • >> size(W)

Perhatikan bobot W yang berisi matriks W yang berukuran 16×16.

3. Untuk mengujinya, masukan saja matriks P dan kalikan dengan W. Pastikan hasilnya adalah matriks T.

  • >> A = hardlims(W*P);
  • >> matriksA=reshape(A,[4 4])
  • >> matriksA=transpose(matriksA)
  • matriksA =
  • -1 1 -1 -1
  • 1 1 1 1
  • -1 1 -1 -1
  • -1 1 1 1

Gunakan fungsi “imshow” untuk melihat matriksA apakah sama dengan target T.

  • >> imshow(matriksA,’InitialMagnification’,’fit’)

Tampak huruf t yang diperoleh (di sini angka 1 ditunjukan dengan warna putih, sementara angka -1 dengan warna hitam). Selamat, Anda telah berhasil membuat JST yang bisa mengingat dan memahami suatu pola (huruf dan angka).

Melihat Network Hasil Training dengan NNTOOL

Secanggih apapun alat bantu tetap saja kita butuh pengetahuan akan prinsip-prinsip kerjanya. Begitu pula Matlab yang dalam meramu Jaringan Syaraf Tiruan (JST) menawarkan toolbox NNTOOL. Selain dengan toolbox berbasis Graphic User Interface (GUI), Matlab di versi awal hanya menyediakan toolbox berbentuk fungsi, yaitu newff.

Pelatihan/Training

Sebagai contoh kasus, misalnya kita diminta meramu JST untuk merubah masukan menjadi keluaran berdasarkan logika XOR. Perlu diketahui, riset JST sempat terhenti karena tidak sanggup menyelesaikan kasus sederhana tersebut. Barulah setelah multilayer JST baru dapat diselesaikan masalah tersebut. Pertama-tama kita siapkan dulu data trainingnya:

  • >> data=[1 1 0 0; 1 0 1 0];
  • >> target=[0 1 1 0];
  • >> net=newff(data,target,[2]);
  • >> net=train(net,data,target);

Berikutnya akan muncul jendela progress pelatihan. Karena hanya sederhana, prosesnya cepat.

Untuk menguji hasil training tes saja dengan mensimulasikan JST dengan input data. Pastikan outputnya sesuai dengan target.

  • >> sim(net,data)
  • ans =
  • 0.9980 0.9845 0.9612 0.5277

Perhatikan jawaban di atas, cukup banyak error-nya, harusnya [0 1 1 0]. Ok, anggap saja sudah akurat. Setelah disimpan dengan mengetik “save xor” di command window network tersimpan dalam bentuk file xor.mat yang siap digunakan nanti. Jika tidak disimpan maka ketika Matlab dimatikan maka hasil pembelajaran (training) tentu saja akan hilang.

Melihat Bobot dan Bias

Nah, untuk melihat bobot dan bias banyak yang tidak mengetahui. Padahal inti dari teori JST adalah bagaimana menemukan bobot dan bias yang tepat. Jalankan NNTOOL dengan mengetik nntool pada command window.

>>nntool

Jendela Network/Data Manager akan muncul. Tekan Import untuk melihat network hasil pembelajaran.

 

Berikutnya klik ganda net pada sisi Networks untuk melihat isi dari JST yang pernah kita latih dulu. Lihat sisi Weight/Bias. Bobot dan bias tampak di tiap sisi, baik masukan, hidden layer dan keluaran. Selamat mencoba.

 

Training, Validating, Testing dan Corpus

Empat kata di atas, terutama tiga pertama merupakan istilah yang banyak disebut dalam literatur machine learning. Sementara yang keempat, Corpus, muncul belakangan ketika banyaknya pihak-pihak yang berkontribusi dengan membagikan file big data yang dimilikinya. Postingan kali ini sedikit menambah penjelasan mengenai penggunaan istilah-istilah di atas.

Training

Istilah ini merupakan pengkhususan dari arti sebenarnya: pelatihan/pembelajaran. Teringat ketika presentasi hasil penelitian di kampus yang dihadiri oleh beragam bidang ilmu. Salah satu peserta dari fakultas agama Islam memprotes manfaat dari training yang katanya tidak perlu karena menghambur-hamburkan dana. Peserta dari fakultas teknik, terutama jurusan informatika, hanya bisa tersenyum karena maklum istilah training di penelitian itu adalah proses melatih model agar diperoleh parameter yang tepat, bukan pelatihan berupa kursus, workshop, dan sejenisnya. Diperlukan data yang disertai dengan label dalam proses training ini. Banyak metode yang digunakan, biasanya backpropagation dengan turunannya gradient descent atau levenberg marquardt (LM). Data training ini dikenal dengan istilah training set.

Validating

Jika training membutuhkan data beserta label agar diperoleh parameter yang tepat, misalnya untuk jaringan syaraf tiruan (JST) berupa bobot dan bias, validating berisi data beserta label pula yang dimaksudkan untuk menguji hasil training apakah sudah akurat atau belum. Jika beruntung, hasil validasi akurat, biasanya di atas 75%. Jika belum harus di-training ulang. Data untuk validasi biasanya sebagian data training. Istilah data untuk validasi adalah development set, held-out set, atau validation set. Terkadang sebagian data training dipakai untuk validasi, kemudian secara bergantian yang tadinya buat training menjadi testing, yang dikenal dengan istilah cross validation.

Testing

Data testing atau dikenal dengan istilah testing set wajib dijalankan setelah validasi. Fungsinya membuktikan apakah model sudah sesuai dalam artian akurat di validasi dan akurat juga di kenyataannya. Data yang digunakan untuk testing merupakan data real yang tidak digunakan untuk training. Tentu saja tidak “fair” menggunakan data training untuk testing, ibarat ujian, soal yang diujikan diberitahu terlebih dahulu.

Corpus

Corpus merupakan kumpulan data spesifik. Jamaknya dikenal dengan nama Corpora. Data ini biasanya digunakan untuk testing yang berasal dari lembaga yang bersedia men-share untuk pembelajaran bersama, misalnya data aeronatika, video, suara, gambar, dan lain-lain. Jika Anda menginstal Python, disertakan juga Corpora secara opsional, karena memang ukurannya yang besar. Tentu saja Corpus ini dipergunakan biasanya untuk pengujian metode/algoritma apakah akurat atau tidak. Sementara untuk data spesifik tertentu, misal pengambilan keputusan kredit bank, pemberian beasiswa, penyetujuan proposal, perlu mencari data real yang ada jika tidak ada yang men-share karena memang data tersebut khusus/spesifik dimana tiap institusi/lokasi/objek penelitian berbeda-beda karakteristiknya. Yuk, yang punya data, bagi-bagi, untuk membantu riset teknologi informasi, terutama yang punya data bidang kesehatan.

Tipe Machine Learning

Walaupun kecerdasan buatan (Artificial Intelligent), Machine Learning, dan Deep Learning berbeda tetapi satu sama lain berhubungan. Deep Learning, yang dimotori oleh Jaringan Syaraf Tiruan lapis banyak, adalah salah satu jenis Machine Learning. Machine Learning itu sendiri adalah salah satu jenis dari kecerdasan buatan.

Machine Learning yang merupakan proses induksi ada tiga jenis. Penerapannya beragam, dari pengenalan gambar, pengenalan suara, pengenalan bahasa, dan lain-lain. Berikut ini jenis-jenisnya:

1. Suppervised Learning

Kebanyakan Machine Learning diterapkan pada jenis ini. Alur prosesnya antara lain: 1) memilih basis pengetahuan untuk menyelesaikan problem. Bandingkan jawaban dengan hasil sesungguhnya, 2) jika jawaban salah, modifikasi basis pengetahuan. Langkah 1) dan 2) diulangi terus hingga jawaban mirip dengan hasil sesungguhnya. Basis pengetahuan itu sendiri diistilahkan dengan Model. Jika disimpulkan suppervised learning memiliki pola:

{ input, correct output }

Dua tipa aplikasi terkenal dari machine learning jenis ini adalah klasifikasi dan regresi. Jika klasifikasi membagi dalam kelas-kelas yang diskrit, regresi bukan dalam kelas melainkan harga tertentu. Masalah yang sering dijumpai adalah Overfitting, yaitu adanya anomali dimana akurasi training yang bagus ketika diaplikasikan dalam kondisi real jatuh. Hal ini terjadi karena proses training tidak mampu menghasilkan generalisasi dari data dalam artian terlalu kaku mengikuti data training.

Namun terkadang klasifikasi dan regresi bekerja sama membentuk sistem seperti support vector regressin, juga neural network regression. Biasanya mengklasifikasi dulu baru meregresi hasil pastinya.

2. Unsuppervised Learning

Berbeda dengan suppervised learning, pada unsuppervised learning tidak diperlukan hasil sesungguhnya (correct output). Pada mulanya hal ini sulit dimengerti, tetapi dapat diterapkan untuk kasus yang memang tidak ada hasil sesungguhnya. Polanya adalah sebagai berikut:

{ input }

Salah satu representasi dari aplikasi unsuppervised learning adalah pengklusteran (clustering) dimana data training diinvestigasi karakteristiknya sebelum dikategorisasi.

3. Reinforcement Learning

Machine learning ini memasukan aspek optimasi dalam pembelajarannya. Jadi selain input, beberapa output dengan grade/kualitasnya digunakan untuk training. Biasanya diterapkan dalam bidang kontrol dan game plays.

{ input, some output, grade for this output }

Clustering dan Classification

Dua aplikasi tersebut serupa tapi tak sama. Untuk jelasnya kita ambil kasus pembagian kelas siswa menjadi IPA dan IPS. Jika kita memiliki data dengan label (output) IPA jika nilai IPA lebih besar dari IPS dan begitu pula sebaliknya kelas IPS jika nilai IPS lebih besar dari IPA, maka karena proses learningnya memiliki target/label/output, maka masuk kategori suppervised learning dan otomatis masuk domain klasifikasi. Namun jika kebanyakan guru IPA-nya “killer”, maka dikhawatirkan seluruh siswa masuk kelas IPS. Disinilah peran pengklusteran. Di awal kita tidak memiliki output tertentu, biarlah data yang membagi menjadi dua, baru diselidiki mana kelompok kelas IPA mana IPS. Tetapi waspadalah, jangan sampai kita membagi dua kategori (cluster) yang salah, bukannya IPA dan IPS malah kelas IPA dan IPS yang bagus dan kelas IPA dan IPS yang jelek, alias membagi siswa menjadi dua kategori siswa pintar dan siswa yang perlu lebih giat belajar (kata Kho Ping Hoo tidak ada orang pintar dan bodoh, tetapi tahu dan tidak tahu). Semoga bermanfaat.

Menormalkan Data Untuk Range Sempit

Beberapa literatur, seperti (Hagan, M. T., Demuth, H. B., & Beale 1997) merekomendasikan penggunakan normal Euclidis (Euclidean) untuk menormalkan data agar hanya berada pada rang [0,1]. Alasannya adalah keortogonalan matriks konversi yang mempermudah Jaringan Syaraf Tiruan (JST) dalam proses pelatihan (Training). Postingan kali ini memperkenalkan teknik yang sering digunakan pada proses peramalan (Forecasting) dengan rentang data tertentu yang sempit, misalnya range [0.2,0.9]. Caranya adalah dengan menggunakan rumusan di bawah ini (Siang 2009):

dengan b dan a adalah data maksimum dan minimum. x’ adalah hasil konversi dari harga awal x. Perhatikan ketika x adalah data maksimum maka x’ akan berharga 0.7+0.2 sementara jika sebaliknya, x data minimum, maka 0 + 0.2 yang cocok dengan range dari 0.2 hingga 0.9. Tetapi ketika ingin dipresentasikan kembali hasil peramalan ke nilai real-nya perlu konversi kembali dengan formula:

Entah mengapa saya cenderung menggunakan normal Euclidis (fungsi normalize atau dengan memanfaatkan norm jika tidak ada fungsi normalize). Untuk versi 2013 sepertinya sudah ada fungsi normalize. Berikut tampilan Matlab jika ada fungsi yang bersangkutan. Semoga bermanfaat.

  • >> help normalize
  • — help for dfilt.normalize —
  • normalize Normalize coefficients between -1 and 1.
  • G = normalize(Hd) normalizes the feed-forward coefficients between -1
  • and 1 and returns the gain G due to normalization. Subsequent calls to
  • normalize will not change the feed-forward coefficients and G will
  • always return the gain used in the first normalization.

 

  • See also dfilt.denormalize.
  • Copyright 1988-2004 The MathWorks, Inc.

Referensi

Hagan, M. T., Demuth, H. B., & Beale, M., 1997. Neural Network Design, Boston: PWS Publishing Co.

Siang, J.J., 2009. Jaringan Syaraf Tiruan dan Pemrogramannya Menggunakan Matlab, Yogyakarta: Penerbit Andi.

 

Sanggupkah ANFIS Mengenali Pola Gambar?

[m.kul/ruang/dosen:pengenalan-pola/software/rahmadya]    

Adaptive Neuro-Fuzzy Inference System (ANFIS) merupakan gabungan Jaringan Syaraf Tiruan (JST) dengan Fuzzy Inference System (FIS). Cara kerja neuron pada JST (lihat JST sederhana) lebih sederhana dibanding dengan ANFIS (lihat post dasar2 ANFIS). Pada ANFIS jumlah neuron harus mengikuti jumlah masukan dan fungsi keanggotaan (membership function) tiap masukan. Selain itu tiap bilangan numerik (crisp) masukan harus dikonversi menjadi fuzzy sets. Akibatnya butuh proses komputasi dibanding JST yang langsung meneruskan masukan numerik ke pembobotan di neuron.

Kasus Citra Hitam-Putih

Citra hitam-putih (B/W) hanya mengenal dua angka yaitu 1 dan nol yang merepresentasikan citra (beberapa peneliti menganjurkan dengan 1 dan -1), sehingga tiap masukan hanya mengenal dua nilai itu. Secara intuitif JST lebih praktis dibanding ANFIS karena kemampuan fuzzy dari ANFIS tidak berfungsi jika hanya bernilai biner (1 dan 0). Tetapi jika kasusnya RGB atau CMYK dengan range bilangan yang cukup besar 0 hingga 255 maka peran fuzzy pada ANFIS jadi penting.

Masalah Jumlah Masukan pada ANFIS

Jika menggunakan data angka 1 sampai 5 yang direpresentasikan dengan matriks berukuran 5×3 maka kita memiliki vektor berukuran 1×15 untuk tiap-tiap angka. Jadi ada 15 input pada ANFIS-nya. Ketika dipraktekan di kelas, baik Matlab 2013 maupun 2014 dengan prosesor i5 dan RAM 4 Gb, anfisedit pada Matlab tidak sanggup.

Pesan kesalahan tersebut muncul di tahap Generate FIS yaitu setelah tombol OK ditekan. Matlab tidak sanggup meng-create ANFIS dengan masukan sebanyak 15. Berikut ini dicoba dengan mereduksi tiap angka menjadi 5 masukan.

Rule akan terbentuk sebanyak 32 buah kombinasi dari MFs (membership function) dengan satu masukan dengan masukan lainnya. Ketika di-training dengan hybrid method dihasilkan ANFIS yang siap dipakai.

Mereduksi Jumlah Masukan

Cara mereduksi masukan adalah dengan menerapkan fungsi imresize pada Matlab. Fungsi ini akan menghasilkan citra yang lebih kecil ukurannya. Tapi tentu saja akan sedikit berbeda dengan citra sebelum direduksi. Selain itu citra yang tadinya berbentuk biner berubah menjadi real. Misal kita memiliki image angka dua dengan ukuran 5×3 (atau vektor sepanjang 15 kolom).

  • >> duaReal
  • duaReal =
  • 1 1 1
  • 0 0 1
  • 1 1 1
  • 1 0 0
  • 1 1 1

Jika diterapkan fungsi imshow akan diperoleh image angka 2 (lihat yang berwarna putihnya).

  • imshow(duaReal,’InitialMagnification’,5000)

Selanjutnya kita reduksi dengan fungsi imresize. Perhatikan di bagian akhir (0.75) menyatakan persentasi pengecilan dari ukuran sebenarnya.

  • >> duaCrop=imresize(duaReal,.75)
  • duaCrop =
  • 0.6902 0.8532 1.0162
  • 0.4380 0.7667 1.0654
  • 0.8851 0.2718 0.2707
  • 0.9837 0.9288 0.9316

Gambar berikut adalah pengecilan menjadi setengahnya (kiri) dan diperbesar 3 kali lipat (kanan). Sepertinya yang diperkecil tidak begitu jelas.

Jadi bagaimana, sanggupkah ANFIS mengenali pola citra? Sepertinya perlu membatasi jumlah masukan kira-kira 5 sampai 10 untuk laptop rata-rata. Selain itu perlu preprocessing untuk mereduksi pola. Jangan lupa, perhatikan batas pengecilan maksimal agar citra masih dikenali, dan terhindar dari false positive. Sekian, selamat mencoba.

Prinsip Kerja Adaptive Neuro Fuzzy Inference System (ANFIS)

Adaptive Neuro Fuzzy Inference System (ANFIS) menggabungkan prinsip kerja Jaringan Syaraf Tiruan (JST) dengan Fuzzy Inference System (FIS). Dengan menggabungkan ANFIS denang JST diharapkan dapat meminimalisir kelemahan masing-masing metode. Kedua metode tetap menggunakan prinsip machine learning.

Plus Minus ANFIS

FIS yang mengharuskan terlibatnya expert dalam menyusun rule, pada ANFIS tidak lagi diperlukan. ANFIS sendiri selain mampu mengolah angka numerik, juga pengetahuan berbasis bahasa (linguistic). Selain itu, ANFIS lebih transparan terhadap pengguna dibanding JST yang seperti kotak hitam (black box). Hal ini karena rule hasil olah ANFIS dapat diketahui oleh pengguna. Namun kebanyakan riset menunjukan bahwa JST lebih akurat dibanding ANFIS. Di antara dua jenis FIS (mamdani dan sugeno), untuk ANFIS sugeno lebih dianjurkan karena proses lebih cepat.

Bentuk ANFIS

Berikut diambil dari jurnal internasional yang membahas cara kerja ANFIS [1]. Mirip dengan JST, ada juga layer dalam ANFIS tetapi jumlahnya rata-rata lima lapis seperti gambar berikut:

Contoh di atas adalah ANFIS dengan dua masukan dan satu keluaran (f). Berikut keluaran (diberi simbol O besar) di tiap-tiap lapis.

Lapis Pertama

Lapis pertama berfungsi mengkonversi angka crisp menjadi bilangan fuzzy dengan menggunakan fuzzy sets. Keluarannya adalah:

Lapis Kedua

Jika pada lapis pertama hanya melibatkan tiap-tiap masukan, pada lapis kedua tiap masukan menuju lapis yang sama guna mengetahui kekuatan penyalaan (firing strength). Fuzzy Sets dikalikan antara satu masukan dengan masukan lainnya dengan hubungan sebagai berikut:

Lapis Ketiga

Pada lapis ketiga dilakukan perhitungan normalisasi sebelum diterapkan ke lapis keempat. Normalisasi adalah proses pembobotan ulang agar diperoleh total/max bernilai satu.

Lapis Keempat

Setelah pembobotan yang telah dinormalkan selesai, proses dilanjutkan dengan mengalikan dengan fungsi yang melibatkan masukan (x dan y) untuk menghasilkan keluaran yang sudah dalam bentuk CRISP.

Lapis Kelima

Langkah terakhir adalah dengan mengakumulasi hasil dari lapis keempat (untuk dua rule).

Sementara untuk metode learning, dua metode bisa digunakan antara lain: backpropagation dan hybrid. Prinsipnya adalah meminimalisir error yang terjadi. Ada dua metode penghitungan error: 1) Mean Absolute Percent Error (MAPE) dan 2) Mean Absolute Deviation.

Reference

[1]    M. Şahin and R. Erol, “A Comparative Study of Neural Networks and ANFIS for Forecasting Attendance Rate of Soccer Games,” Math. Comput. Appl., vol. 22, no. 4, p. 43, 2017.

 

Penjelasan Sederhana Jaringan Syaraf Tiruan – Kasus Logika OR

Dulu sempat ambil mata kuliah “Artificial Intelligent & Neuro-Fuzzy” dengan buku referensi yang digunakan adalah “Neural Network Design” karangan Hagan. Materinya cukup berat karena satu buku tersebut harus dikuasai dalam setengah semester (sampai UTS/Midterm Examination). Selain itu buku tersebut sepertinya ditujukan untuk level advance (lanjut). Postingan ini bermaksud menjelaskan secara sederhana prinsip kerja jaringan syaraf tiruan. Kasus yang dijadikan contoh adalah bagaimana jaringan syaraf tiruan (JST) sederhana mampu menjalankan Logika OR.

Gambar berikut adalah JST dengan jumlah neuron hanya satu buah. Neuron adalah sel di otak yang memiliki kemampuan menyimpan dan mentransfer informasi. Disimpan dalam bentuk bobot dan bias serta mentransfer dengan fungsi aktivasi.

W1 dan W2 adalah bobot yang mengalikan tiap input yang akan diteruskan ke neuron lainnya. Sementara itu b adalah bias yang menjumlahkan total masukan yang telah dikalikan bobot. Pada gambar di atas fungsi aktivasi belum dilibatkan. Persamaan matematis gambar di atas adalah sebagai berikut:

Dengan cara training, misal backpropagation, W dan b dapat ditemukan. Tetapi sebenarnya dengan intuisi kita dapat menemukan bahwa W1 dan W2 berharga masing-masing “1” dan biasnya “nol”. Kita coba memasukan ke persamaan y di atas diperoleh akurasi yang baik hanya saja di bagian akhir, yaitu ketika masukan X1 dan X2 kedua-duanya “1” yang seharusnya keluaran y = 1 di sini berharga “2”. Oleh karena itu diperlukan fungsi aktivasi seperti gambar di bawah ini.

Di antara ketiga fungsi aktivasi, yaitu tangen sigmoid, tangga, dan purelin, yang cocok dengan kasus kita adalah tangen sigmoid. Di sini tangga bisa diterapkan, tetapi agak sulit jika digunakan untuk backpropagation yang membutuhkan diferensiasi. Tangen sigmoid (juga log sigmoid) jika diturunkan berharga -1, mudah untuk dikalkulasi saat proses pembobotan ulang (rambat balik dari target ke input). Sementara purelin tidak cocok karena jika input 2 keluarnya akan 2 juga (jika y=x persamaan purelin-nya). Dengan menambah fungsi aktivasi sebelum ke output, nilai 2 dengan fungsi tangen sigmoid bernilai 1 sehingga sesuai dengan table kebenaran logika OR. Gambar di atas sebenarnya cuplikan video yang saya upload di youtube berikut ini:

 

 

 

Merubah Format Image 1 dan 0 Menjadi 1 dan -1 Secara Cepat

Jaringan Syaraf Tiruan berfungsi menirukan fungsi otak manusia yang berisi neuron-neuron. Neuron ini ketika bekerja mengatur bobot dan bias sesuai dengan masukan dan targetnya. Ketika mengatur bobot dan bias terkadang diperlukan bilangan-bilangan yang mudah diolah. Biasanya lebih disukai yang sudah dinormalkan (normal Euclidean). Selain itu untuk kasus tertentu seperti data gambar, lebih disukai yang berbentuk 1 dan -1 dibanding dengan 1 dan 0 (lihat buku-buku tentang JST), untuk image black-white. Sementara bentuk 1 dan nol lebih mudah ketika mengetik/membuat matriks (karena tanpa mengetik minus “-“). Tentu saja repot jika mengubah manual nol menjadi -1, tetapi dengan cara berikut, hanya diperlukan satu langkah untuk merubah 1 dan nol menjadi 1 dan -1.

  • >> empat=[1 0 1;1 0 1;1 1 1;0 0 1;0 0 1]
  • empat =
  • 1 0 1
  • 1 0 1
  • 1 1 1
  • 0 0 1
  • 0 0 1

Logika sederhana adalah dengan mengurang 0 dengan 1 agar menjadi -1. Tetapi tentu saja yang 1 akan menjadi nol. Oleh karena itu kita kalikan dua agar 1 menjadi 2 dan jika dikurangkan 1 menjadi 1. Sementara nol dikalikan 2 tidak berubah.

  • >> empatb=empat*2
  • empatb =
  • 2 0 2
  • 2 0 2
  • 2 2 2
  • 0 0 2
  • 0 0 2

Setelah dikalikan dengan 2 kurangkan dengan satu seluruh matriks itu. Gunakan fungsi ones untuk membuat matriks berisi angka 1.

  • >> empatc=empatb-ones(5,3)
  • empatc =
  • 1 -1 1
  • 1 -1 1
  • 1 1 1
  • -1 -1 1
  • -1 -1 1

Tampak hasilnya sesuai dengan yang diinginkan. Coba lihat dengan fungsi imshow apakah hasilnya tampak sama dengan sebelumnya, yaitu angka “4”. Beberapa literatur menyarankan menggunakan versi -1 dibandingkan dengan nol ketika mengolah data dengan jaringan syaraf tiruan (neural networks).

imshow(empatc,’InitialMagnification’,5000)

Lihat yang berwarna putih menunjukan angka “4”. Jadi caranya mudah, kalikan dengan “2” dan kurangkan dengan matriks 1 (fungsi “ones”). Sekian, semoga bermanfaat.

Menampilkan Citra Kecil dengan Fungsi IMSHOW Matlab

Citra biasanya ditampilkan dari file gambar (jpg, bmp, tiff, dan sejenisnya). Tetapi di Matlab, citra bisa juga ditampilkan dari matriks. Berikut ini contoh matriks yang menampilkan angka 7 segment. Buka Matlab, arahkan Current Directory ke folder yang sudah kita persiapkan dan ketik matriks yang menyatakan angka “empat” berikut ini:

  • >> empat=[1 0 1;1 0 1;1 1 1;0 0 1;0 0 1]
  • empat =
  • 1 0 1
  • 1 0 1
  • 1 1 1
  • 0 0 1
  • 0 0 1

Perhatikan angka satu di matriks di atas menunjukan formasi angka 4. Untuk melihat bentuknya dengan jendela baru, gunakan fungsi imshow().

Namun masalahnya adalah bentuknya kecil sekali. Oleh karena itu perlu ditambahkan parameter InitialMagnification untuk memperbesar citra hasil fungsi tersebut. Berikut ini contohnya:

>> imshow(empat, ‘InitialMagnification’, 5000)

Perhatikan angka di atas, yang berwarna putih adalah angka “1” pada matriks empat yang telah dimasukan sebelumnya. Selamat mencoba, semoga bermanfaat.