JST, FIS, atau ANFIS?

Berikut kritik dan saran dari pembaca buku data mining dengan matlab, terutama di bab 3 (halaman 49) dan bab 4 (halaman 74) yang membahas mengenai Adaptive Neuro-Fuzzy Inference System (ANFIS) dan Jaringan Syaraf Tiruan (JST). Sebenarnya buku ini kelanjutan dari buku sebelumnya tentang soft computing, jadi beberapa bagian memang ada yang sama, terutama JST dan ANFIS yang berbasis machine learning. Maksudnya dimodif sedikit supaya beda sama yang dulu malah ada yang lupa diganti.

Di kode di atas halaman 49, harusnya tm bukan keuangan. Variabel tm sendiri maksudnya singkatan dari tingkat kemiskinan agar makin besar nilai variabel ini tm makin besar pula, maksudnya makin miskin agar untuk menjumlahkan nanti jadi besar (IPK besar TM juga besar) yang berpeluang mendapat beasiswa. Walaupun bisa saja dirancang dengan tk, tingkat kekayaan, makin besar makin kaya, tetapi walaupun bisa berjalan, bagi programmer yang ingin “testing”, logic error sedikit ribet. O iya, logic error berbeda dengan syntax error (akan diberitahu bahwa baris sekian ada kesalahan) karena sistem berjalan tetapi tidak sesuai dengan kenyataan, lebih berbahaya.

Berikutnya juga di halaman 74 ada beberapa bagian yang tidak saya tulis kodenya karena GUI bisa menggunakan GUI yang lain (FIS atau ANFIS). Memang harusnya buku itu disertai CD untuk kode program agar tidak perlu “latihan mengetik sepuluh jari” :D. Tetapi saya berikan di sini kode sumber untuk satu GUI yang berisi Decision Support System dengan tiga metode tersebut. Download dulu kodenya.

Ekstrak di satu folder, kemudian Matlab arahkan current directory-nya ke folder tersebut lalu jalankan dengan mengetik nama folder yang berekstensi .m di command window. Untuk melihat kodenya ketik edit disertai nama file berekstensi .m tersebut. Oiya, sesuaikan huruf besar dan huruf kecilnya karena Matlab case sensitive.

Tentu saja kalau data mining jumlah datanya ya tidak hanya segelintir seperti contoh (dengan excel), apalagi big data trend-nya sudah mulai, excel tentu saja tidak sanggup mengolah data hingga jutaan record. Buku berikutnya sudah sampai ke penerbit tentang data mining tetapi fokus ke penanganan Matlab untuk sistem basis data (database management system – DBMS) dengan Microsoft Access (sebagai perwakilan desktop DBMS) dan MySQL (perwakilan web-based) dengan bantuan ODBC.

Mengidentifikasi Pola Citra dengan Jaringan Syaraf Tiruan

Sebelum membahas identifikasi perlu diketahui ada dua jenis pengecekan suatu citra yaitu identitikasi (identification) dan pencocokan (verification). Pada sistem pencocokan prinsipnya sama dengan mengecek password, misalnya mengecek tanda tangan, sistem akan membandingkan identitas orang yang malakukan tanda tangan dengan citra tanda tangannya. Mirip ketika mau log-in, kita memasukan user id dan kemudian password, tetapi di sini passwordnya diganti dengan sidik jari, tanda tangan, retina, dll. Tetapi sistem identifikasi sedikit lebih rumit karena sistem tidak diberitahu identitas yang melakukan biometrik. Sistem harus mengetahui siapa pemilik citra yang ditangkap sistem. Jadi ketika kita ingin memasuki gedung yang diberi pengaman sistem identifikasi, pengguna hanya memberikan sidik jari, retina, tanda tangan, dan biometrik lainnya yang biasanya non-destruktif (kalo kesetrum mungkin sedang sial aja .. he he).

Untuk identifikasi tanda tangan dibutuhkan pengolahan citra sebelum masuk ke sistem identifikasi. Untuk belajar sebaiknya kita coba sistem yang sederhana misalnya membedakan angka 1,2, dan 3 saja dan tanpa pengolahan citra, alias kita beri tahu langsung vektornya. Gambar berikut ini menunjukan angka 1, 2, dan 3 di pixel berukuran 5×3.

Angka satu di sini menunjukan adanya pola sementara nol tidak. Data tersebut data utama yang akan ditraining dengan Jaringan Syaraf Tiruan (JST). Tentu saja jika hanya data itu yang diberikan, hasilnya kurang bagus karena sistem membutuhkan data lain untuk menjaga masukan yang agak menyimpang misalnya gambar di bawah untuk angka 1.

Untuk angka-angka yang lain, coba buat sendiri deviasinya. Kalo tanda tangan, untuk training user diminta melakukan beberapa tanda tangan, karena kebetulan hampir tidak mungkin melakukan tanda tangan beberapa kali hasilnya sama persis.

Langkah pertama adalah membuat vektor tanda tangan, caranya adalah mengkonversi matriks tanda tangan menjadi vektor dengan fungsi reshape di Matlab. Buka command window, kita coba untuk angka satu terlebih dahulu.

  • >> satu=[0 1 0;0 1 0;0 1 0;0 1 0;0 1 0]
  • satu =
  • 0 1 0
  • 0 1 0
  • 0 1 0
  • 0 1 0
  • 0 1 0
  • >> satu=reshape(satu,1,15)
  • satu =
  • Columns 1 through 12
  • 0 0 0 0 0 1 1 1 1 1 0 0
  • Columns 13 through 15
  • 0 0 0

Perhatikan fungsi reshape di atas, matriks 5×3 diubah menjadi 1×15 dimana 15 dari perkalian 3×5 (masukan angka 3, kali dan angka 5 di calculator iphone 6 Anda, nanti keluar deh angka 15 .. he he). Lakukan untuk tiga deviasi dari angka satu di gambar atas. Lakukan juga hal yang sama untuk angka 2 dan angka 3. Bagaimana jika tanpa deviasi? Ya bisa saja, tapi yang namanya belajar/training membedakan monyet dengan bukan monyet aja ga bisa kan trainingnya dengan gambar monyet saja, harus dengan gambar yang lain, bisa dengan foto teman anda, atau foto anda juga boleh. Ok, kita beri label saja monyet, eh angka satu, dua, dan tiga berturut-turut 1,2,3 walau boleh saja 0, 10, 20. Tetapi supaya gampang mengenali yang pertama saja. Supaya cepat, ok 2 dan 3 untuk training tidak perlu deviasi. Angka satu dengan tiga deviasi. Secara prinsipnya adalah gambar berikut:

Kolom terakhir merupakan label/target, sementara vector1 sampai 3 berukuran 1×15. Buka lagi command window, lakukan cara yang sama dengan variabel satu di atas, beri nama saja berikutnya dengan satua, satub, satuc, dua, dan tiga.

  • >> satua=reshape(satua,1,15);
  • >> satub=reshape(satub,1,15);
  • >> satuc=[0 0 1;0 0 1;0 1 0;0 1 0;0 1 0];
  • >> dua=[1 1 1;0 0 1;1 1 1;1 0 0;1 1 1];
  • >> tiga=[1 1 1;0 0 1;0 1 1;0 0 1;1 1 1];
  • >> satua=reshape(satua,1,15);
  • >> satub=reshape(satub,1,15);
  • >> satuc=reshape(satuc,1,15);
  • >> dua=reshape(dua,1,15);
  • >> tiga=reshape(tiga,1,15);
  • >> datalatih=[satu;satua;satub;satuc;dua;tiga];
  • >> target=[1;1;1;1;2;3];

Latih dengan toolbox JST di Matlab dimana data pelatihannya datalatih dan targetnya target. Format di nntool sedikit berbeda dengan data di atas dimana kolom jadi baris dan baris jadi kolom. Gunakan newdatalatih dan newtarget di toolboxnya.

  • >> newdatalatih=transpose(datalatih);
  • >> newtarget=transpose(target);

Oke, kita cek hasilnya yuukk. O iya, kalo masih bingung utak-atik toolbox JST (nntool) bisa dibuka di link sebelumnya, gampang kok. Kita uji dengan angka satu, dua dan tiga.

  • >> tessatu=transpose(satu);
  • >> sim(network1,tessatu)
  • ans =
  • 1.0000
  • >> tesdua=transpose(dua);
  • >> sim(network1,tesdua)
  • ans =
  • 2.0000
  • >> testiga=transpose(tiga);
  • >> sim(network1,testiga)
  • ans =
  • 1.5786
  • >> tessatua=transpose(satua);
  • >> sim(network1,tessatua)
  • ans =
  • 1.0000

Gimana .. ada yang ngaco ga? … ternyata, A D A. Angka tiga dites kok keluarnya 1,58 (saya beri warna merah). Makanya ngajarin bedain monyet atau bukan jangan hanya data monyet saja yang dilatih. Ok, selamat berpusing-pusing ria yang dapat skripsi atau tesis tentang identifikasi tanda tangan ya (jadi inget kerjaan saya dulu) ..

Jika Anda bisa membuat pengolahan citra di bawah ini berarti sudah siap nih untuk sistem identifikasi pola .. Gambar di bawah ini hasil keluaran angka dua (lihat bagian putihnya, karena angka 1 berwarna putih dan angka nol berwarna hitam).

Oiya, kalo bisa gunakan Matlab 7 sepertinya lebih ampuh. Bukan Cuma tanda tangan, bisa juga mengenali grafik lho, lihat di sini.

Peramalan dengan Jaringan Syaraf Tiruan

Jaringan syaraf tiruan (jst) sering juga dijadikan sarana untuk meramalan. Berbeda dengan fitting yang mengandalkan variabel-variabel input, peramalan hanya mengandalkan data berdasarkan deretan waktu (time series). Dan seperti time series lainnya, jumlah data sangat menentukan kualitas peramalannya, walaupun dua data bisa meramalkan data ketiga tetapi tentu saja kalah akurat dibanding meramalkan data ke 1001 dari 1000 data.

Misal saya memiliki data tiga tahun, kemudian saya susun menjadi bentuk seperti ini dimana matriks berisi dua baris dengan baris pertama tahun pertama dan baris kedua tahun kedua. Sementara tahun ketiga saya jadikan target pelatihan.

Dengan membuka toolbox JST (ketik nntool di command window) kita rakit JST untuk dilatih dengan target pelatihan tahun ketiga:

Masukan variabel-variabel masukan dan target di jendela nntool. Buat JST dengan jumlah neuron sesuai keinginan, lakukan training.

Begitu pula JST-nya, buat saja dengan mengklik tombol ‘new’ di jendela network designer. Atau bisa juga menggunakan fungsi di command window tanpa toolbox (fungsi newff).

Jika sudah, dobel klik pada network1 untuk melakukan proses training. Pilih lagi input dan target datanya, lakukan simulasi, dan tunggu sesaat hingga proses pelatihan selesai.

Hasilnya jangan lupa disimpan untuk memprediksi tahun keempat. Bagaimana memprediksi tahun keempat? Gunakan saja tahun kedua dan tahun ketiga sebagai input, maka JST akan memprediksi tahun keempat berdasar pelatihan sebelumnya.

Kemudian lakukan simulasi dengan fungsi sim dari Matlab. Gunakan network1 yang telah di ekspor dari proses pelatihan sebelumnya. Gunakan kode berikut di command window, maka prediksi tahun keempat selesai, akurasi tentu saja bisa diuji jika Anda punya data tahun keempat yang sesungguhnya.

Tentu saja dua data untuk meramalkan data ketiga kurang baik, seperti halnya anda memprediksi kurs dollar terhadap rupiah hanya dengan dua data, karena belum tentu rupiah terus melemah, bisa saja menguat jika data pelatihannya banyak. Tetapi yang namanya ramalan ya belum tentu benar kan?

Memahami Function Matlab

Kalo kita searching internet, bidang informatika ternyata banyak cabangnya dari yang cenderung ke hardware hingga yang cenderung ke software. Jika kita menjumpai seseorang dengan gelar S.Kom kita tidak bisa memastikan yang bersangkutan bisa mengutak-atik jaringan, merancang software, atau bidang-bidang spesifik lainnya. Apalagi jika gelarnya M.Kom atau Ph.D lebih spesifik lagi bidangnya.

Beberapa peneliti ingin mengetahui atau membandingkan dua jenis metode, tentu saja dengan alat ukur yang adil, dimana tidak membandingkan dua metode dengan dua bahasa yang berbeda. Oiya, beberapa literatur membedakan metode dengan algoritma, walaupun ada juga yang menganggapnya sama. Untuk memperbaiki kinerja suatu metode, beberapa peneliti menggunakan bahasa yang mudah, yaitu Matlab. Bahasa ini sulit dibeli oleh individu, dan biasanya institusi yang membelinya karena mahal. Belum lagi kontroversi dari sisi pendidikan dimana Matlab dituduh tidak melatih siswa untuk sungguh-sungguh belajar programming. Banyak pertanyaan-pertanyaan muncul mengenai kode bahasa matlab yang kebanyakan dalam bentuk function dan toolbox.

Berbeda dengan toolbox lain seperti WEKA, SPSS, dan sejenisnya yang melakukan proses data mining dengan menyembunyikan source code, Matlab sebenarnya menunjukan kode yang digunakannya. Jadi jika kita diminta menelusuri algoritmnya, tinggal buka saja M-file yang digunakan. Misalnya kita akan mengkluster dengan Fuzzy C-Means (FCM), secara sederhana kita dapat mencari kluster secara langsung baik lewat GUI atau function. Coba buka kode yang ada dengan mengetik edit fcm di command window. Jika muncul pesan, klik saja Yes.

Untuk bisa membaca kode tersebut, sedikit diperlukan “usaha”. Apalagi jika belum pernah sekalipun belajar bahasa pemrograman. Jika tidak pernah, maka yang disalahkan adalah institusi tempat mahasiswa belajar informatika, karena salah satu dasar seluruh jenis kurikulum informatika (TI, SI, SK, ILKOM) pasti belajar dasar-dasar pemrograman. Di tulisan yang lalu, saya menyinggung fungsi objective FCM. Nah dimanakah letak fungsi objective itu di function matlab?

Jika Anda teliti ternyata fungsi fcm memanggil fungsi stepfcm, maka buka lagi fungsi tersebut dengan mengetik edit stepfcm. Di situ dengan jelas fungsi yang dalam bentuk matematisnya adalah sigma.

Ternyata ada juga fungsi distfcm, ok. Buka saja dan pelajari lagi. Dan untungnya kita tidak terlalu pusing-pusing menerjemahkan karena ada baris komentar yang diawali dengan simbol % yang fungsinya menjelaskan satu line code.

Jika Anda ingin membuat dalam bahasa pemrograman open source, bisa menerapkannya di octave, scilab, dan sejenisnya yang dapat diunduh gratis dari internet. Ok, semoga bermanfaat.

Prediksi dengan Matlab

Prediksi adalah memperikiran hasil yang akan datang berdasarkan kondisi terkini. Biasanya dipergunakan untuk memperkirakan kejadian di waktu yang akan datang, misalnya harga saham, bencana, dan sebagainya. Terkadang kita memprediksi dari rentetan beberapa data seperti harga saham, komposisi kimia dan sebagainya. Untuk matlab terbaru sudah tersedia fasilitas GUI, tetapi versi yang lama dapat menggunakan toolbox neural network fitting tool.

Sebagai contoh time series dari 12 data, kita akan melatih NNs dengan data tersebit dimana dua kolom pertama sebagai data training dan satu kolom terakhir sebagai target (t+1). Buka GUI NNs Fitting Tool lewat jendela start atau dengan mengetik nftool di command window.

Sebelumnya masukan terlebih dahulu data dan targetnya di workspace karena akan kita gunakan nanti. Klik Next dilanjutkan dengan memasukan data dan target. Pastikan tombol Next muncul, jika tidak arahkan option button di rows.

Tambahkan Hidden Neuron seoptimal mungkin, di sini saya menggunakan nilai default yang tidak terlalu banyak, 20. Teruskan hingga proses pelatihan dan jangan lupa menyimpan hasilnya.

Terus saja menekan Next hingga proses pelatihan selesai. Jangan lupa menyimpan hasil pelatihan, misalnya net1. Setelah itu ujilah dengan menjalankan hasil pelatihan NNs tersebut. Untuk menguji hasil training, simulasikan saja net1 dengan data pelatihan.

Sepertinya ada empat data yang error dari 12 data yang dilatih. Perbaiki dengan menambah hidden neuron dan jumlah data untuk pelatihan. Untuk memprediksi, masukan dua data berurutan untuk mengetahui data prediksinya, misalnya [18980 18990] yang akan menghasilkan.

Cek, apakah benar perkiraan ketiga 19032? Waulahu a’lam, namanya saja prediksi.

Learning Vector Quantization (LVQ)

LVQ is another kind of competitive network that uses competitive and linear layer together (see past posting for competitive network). The winning neuron of the first stage is become a subclass. Then the second layer combines it into a single class. Many researcher use this kind network for signature identification.

The learning of LVQ is supervised learning. It needs a target as a basis of learning process. Use this script (LEARNING VECTOR QUANTIZATION) to practice your matlab skill in creating a LVQ network. Try to understand the syntax of lvq function by typing “help newlvq” on command window.

The above picture shows matlab respons to our train script function. You can see the IW and LW part of LVQ network using this script.

>> samplelvq.iw{1,1}

ans =

-0.1259 -0.0280

0.0862 0.1584

-0.0351 0.0306

>> samplelvq.lw{2,1}

ans =

1 1 0

0 0 1

Competitive Network

Competitive network uses Hamming Network which is contained feedforward and recurrent layer.

Open your Matlab and try this lab example. Just copy and paste to see how this kind of network worked. Newc is a function from matlab to create a competitive network. Use this Competitive Network file for practise.

Try to train a competitive network. After training the network, try to simulate the trained network to find the result from a sample input.

This is a result from simulation of samplec on Pc. Type on command window “help newc” to study the syntax of newc function from your Matlab.

>> Yc1 = sim(samplec, Pc)

Yc1 =

(2,1) 1

(2,2) 1

(2,3) 1

(1,4) 1

(1,5) 1

(1,6) 1

Training JST

Melakukan training dengan JST sedikit berbeda dengan ANFIS. Pada ANFIS, input dan target disatukan sementara untuk JST kita harus memisahkan menjadi dua matriks. Buka toolbox JST dengan mengetik pada command window.

>>nntool

Siapkan terlebih dulu data trainingnya yaitu data input dan data target. Misalnya kita sudah menulis data input dan data target dengan notepad berturut-turut dengan nama ‘input.dat’ dan ‘target.dat’, maka kita tinggam memanggil data tersebut untuk dikonversi menjadi variable ‘*.mat’ yang dikenali oleh toolbox nntool matlab.

Perhatikan, formatnya sedikit berbeda dengan ANFIS, pada JST masukan dinyatakan dengan baris, misalnya baris pertama itu input pertama, baris kedua input kedua, dan seterusnya. Sementara target mengikuti inputnya, jadi target kolom pertama input adalah kolom pertama pada vector target. Dari contoh data di atas, input 3.2760, 32.3, 7, dan 0.0020 memiliki target 34.5.

Kembali ke NNTOOL, klik import untuk memasukan data input dan target ke toolbox JST. Jangan lupa hubungkan input dengan input dan target dengan target seperti gambar berikut.

Lakukan hal yang sama juga dengan target, dilanjutkan dengan klik ‘import‘. Berikutnya meramu JST yang akan kita buat untuk mentraining data input dan target yang telah kita siapkan. Klik New untuk membuat JST yang akan di-training. Beri nama, input, dan outputnya sesuai dengan data yang kita import sebelumnya.

Setelah di klik Create maka Anda telah berhasil membuat JST. Pastikan pada NNTOOL Anda terdapat data input, target, dan jst. Setelah itu kita siap melakukan training dengan mengklik ganda jst yang baru saja kita buat.

Pilih train dan masukan input dan target yang sesuai, lanjutkan dengan mengklik Train Network untuk memulai proses training. Tunggu beberapa saat karena Matlab sedang mentraining JST yang ada buat tersebut.

Berikutnya adalah kita coba mengecek apakah hasil training sudah sesuai atau tidak. Untuk mengetahui kualitas training, masukan aja data input ke jst yang telah Anda training, apakah sesuai dengan target atau tidak. Sebelumnya simpan terlebih dahulu jst yang telah Anda latih tersebut. Caranya dengan kembali ke jendela NNTOOL dengan mengklik Export dilanjutkan dengan memilih mana yang akan disimpan. Pastikan jst anda pilih.

Setelah mengklik Save maka Anda telah berhasil melatih jst Anda. Pastikan jst yang Anda save terletak pada directory kerja Anda. Berikut cara menguji hasil training Anda.

Perhatikan yang dilingkari adalah hasil training yang tidak cocok dengan target (ada error). JST bias memprediksi output jika input berbeda dengan data training, misalnya data berikut ini.

Algoritma Genetika di Matlab 2008 lebih baik dari Matlab 2013

Setelah pada tulisan yang lalu saya membuktikan Neural Network di Matlab 2007 lebih baik dari Matlab 2008 (https://rahmadya.com/2013/06/27/matlab-2007-lebih-baik-dari-pada-matlab-2008/), kini terjadi lagi di Matlab 2008 dengan Matlab 2013, dimana untuk algoritma genetika, hasil matlab versi lama lebih baik dari matlab versi baru. Saya masih bingung apa penyebabnya.

Kejadiannya waktu itu rekan saya mengajak diskusi tentang optimasi kontroller orde satu dan orde dua dengan menggunakan algoritma genetika. Fungsi tujuan sudah dibuat, dengan variabel yang dibentuk adalah variabel laplace s, yang merupakan hal baru selama saya menggunakan algoritma genetika. Biasanya saya menggunakan variabel biasa, seperti waktu, jarak, dan sejenisnya. Untuk contoh lain penerapan GA bisa dilihat kasus pada GIS seperti tulisan saya sebelumnya (https://rahmadya.com/2013/11/12/algoritma-genetik-dengan-toolbox-matlab/).

Saya coba menggunakan matlab versi 2013 dengan toolbox algoritma genetikanya. Dengan memasukkan fungsi tujuan, konstrain, serta variabel lainnya seperti maksimum generation = 100, stall generation = 100, mutation function = gaussian, initial population range = [0;100], cross over function, intermediate dengan ratio = 0.8, serta mencentang output berupa best fitness dan best individual.

Setelah memasukan nama fitness function, jumlah variabel, bound (batas atas dan batas bawah) saya mulai menjalankan dengan menekan tombol “start”. Diperoleh hasil fitness terbaik sebesar 1.942 dengan x1 = 109.6 dan x2 = 3.92, seperti tampak pada gambar di bawah ini.

Dari hasil riset terdahulu yang kami baca ternyata hasil terbaiknya 1.838, mengapa bisa memperoleh nilai lebih buruk? Padahal dugaan saya, riset dilakukan pada tahun 2008, kemungkinan besar dia menggunakan matlab 2008 juga. Akhirnya karena penasaran, kami menggunakan matlab 2008b sesuai dengan perkiraan saya bahwa dia menggunakan matlab 2008 saat melakukan benchmarking.

Dengan memasukan variabel, fungsi tujuan, konstrain, dan parameter-parameter lain yang sama dengan matlab versi 2013 dan merujuk penelitian tahun 2008 tersebut, secara mengejutkan diperoleh hasil yang lebih baik seperti tampak pada gambar di bawah ini.

Tampak diperoleh hasil fitness value yang lebih baik (lebih kecil/minimum) sebesar 1.837 dengan x1 = 135.07 dan x2 = 4.65 yang sedikit lebih baik dari hasil penelitian sebelumnya. Akhirnya kejadian seperti kasus neural network sebelumnya terulang kembali. Sebagai tambahan, toolbox GA bisa digenerate menjadi script dengan menekan menu FileGenerate M-File – dilanjutkan dengan memberi nama. Maka akan dihasilkan script sebagai berikut.

 

Membuat Program Sederhana Fuzzy

Sudah lama tidak menulis tentang soft computing, maklum kesibukan luar biasa karena kuliah. Kebetulan kali ini saya mengambil mata kuliah Artificial Intelligent and Neuro-Fuzzy. Materi ini membahas seluruh ilmu soft computing, dimulai dari syaraf tiruan, fuzzy, algoritma genetika, hingga turunannya seperti particle swarm, simulated annealing, dan lain-lain. Kali ini saya hanya akan meneruskan tulisan saya yang dulu dengan menambah satu contoh aplikasi, mengingat banyak yang membutuhkan.

Untuk menjalankan aplikasi ini, letakkan di folder kerja Anda (current directory) setelah diekstrak, kemudian jalankan dengan mengetik nama file *.m di command window. Untuk melihat dan mengutak-atik script dengan mengetik edit <nama file *.m> serta untuk melihat alur logika fuzzy dengan mengetik fuzzy <nama *.fis>. Selamat mencoba.

beasiswa

Awal yang Baru di Jurusan Information Management

Setelah kesulitan menghadapi perkuliahan ilmu komputer (computer science) semester yang lalu, dengan berat hati saya beralih ke manajemen informasi (information management) dengan materi kuliah seperti yang telah saya ambil ketika S2 yang lalu yaitu Information System Design and Management (ISDM) dan Decision Support Technology (DST) yang berturut-turut mirip System Analysis and Design dan Decision Support System (DSS). Sehingga saya tinggal memperdalam lagi karena tuntutan yang tinggi di Asian Institute of Technology (AIT) terutama untuk mahasiswa doktor harus minimal B+.

Satu lagi mata kuliah yang saya ambil adalah Artificial Intelligent and Neuro-Fuzzy, yang merupakan mata kuliah untuk jurusan Mechantronic di fakultas Industrial and Sistem Engineering (ISE). Walaupun saya sudah pernah belajar dan bahkan tesis saya dulu adalah tentang syaraf tiruan, tetapi materi yang diajarkan sangat matematis. Untungnya saya hanya tertinggal dua minggu, jadi dapat segera menyesuaikan diri dan ternyata isi dari kuliah adalah penjelasan matematis dari toolbox-toolbox yang saya sering gunakan di Matlab. Matematis yang terlibat hanya seputar aljabar dan matriks. Semoga saya bisa mengatasi mata kuliah ini karena mata kuliah ini andalan saya untuk disertasi nanti.

Dosen pengampunya adalah Dr. Manukid, alumni dari universitas tokyo Jepang. Teknik mengajarinya sangat sederhana dan cepat, jadi harus membaca terlebih dahulu sebelum mengikuti perkuliahannya.

Membuat GUI di Matlab dengan tombol Load *.MAT

File mat merupakan file hasil olah Matlab sebelumnya (image processing, jaringan syaraf tiruan, dan lain-lain). Biasanya hasil oleh ini disimpan dalam file dengan instruksi save <nama_file> dan diberikan ekstensi oleh matlan mat.

Pertama-tama persiapkan satu folder untuk program yang akan kita buat. File mat harus diletakkan pada folder kerja tersebut (pada matlab diberi istilah current directory). Buat suatu GUI baru dengan nama misalnya ambil_file.

guide

Anda akan melihat pilihan mau buat GUI kosong, GUI yg pernah dibuat, atau sudah bertemplate. Pilih saja yang Blank GUI (Default). Drug toolbox command button berlambang “OK” ke arah lembar kerja GUI. Secara default akan diberi nama Push Button.

Untuk mengedit Push Button, klik ganda tombol itu hingga memunculkan properties. Ganti Push Button dengan isian pada String: Ambil File. Dan nama variabel (pada Matlab diberi nama Tag) isi dengan nama ambil. Tag ini akan menampilkan fungsi ambil di file m matlab.

Simpan GUI anda dan beri nama, misalnya ambil. Matlab akan menciptakan dua file yaitu ambil.fig dan ambil.m fungsinya berturut-turut sebagai GUI dan sebagai script. Secara ajaib, Matlab akan memberikan kode yang siap kita isi di sana. Dengan cara yang sama, buat seperti di bawah ini:

Edit text di sebelah kanan biarkan saja, tidak perlu di utak-atik supaya cepat, dan nama Tag (variabel)-nya edit1. Maksudnya adalah menampilkan nama file yang diambil. Masukan listing seperti berikut ini:

  • [x,y] = uigetfile(‘*.mat’, ‘Mengambil Data’);
  • set(handles.edit1,‘String’,x);
  • y=load(x)
  • net=y.network1

Uigetfile akan mengambil jendela get file dengan ekstensi yang akan ditampilkan *.mat. Pada jendela akan muncul nama jendela ‘Mengambil Data‘. Saya mengambil data saya bernama jst.mat, hasil training JST yang lalu. Instruksi y=load(x) akan mengambil variabel x ke workspace dan net=y.network1 mengambil variabel di y yang isinya hanya jst saya (network1). Jika Anda lihat di command window akan muncul y dan net saya, tentu saja jika Anda tidak memiliki file jst.mat milik saya tidak akan muncul networknya (coba buat sendiri). Silahkan cek apakah file tersebut muncul di sebelah kanan tombol Ambil File (Edit Text).

Sekarang kita coba menyimpan data yang kita barusan ambil (atau mungkin data hasil oleh GUI jika ada). Misal kita akan merename. Isi pada fungsi simpan (awas jangan salah kamar) di m-file pada simpan_Callback.

  • y=load(‘jst.mat’)
  • [nm_file] = uiputfile(‘*.mat’,‘Menyimpan File’);
  • data_file = [nm_file];
  • save(data_file);

Jalankan, Anda akan menampilkan jendela simpan. Bisa Anda tambahkan message jika file telah tersimpan. Di sini kita coba menyimpan y hasil dari loading suatu file (‘jst.mat‘). Dan akan menyimpannya menjadi file lain, misalnya jst2.mat.

Contoh di atas hanya mencoba GUI saja, karena tidak ada yang diolah di sini. Anda bisa menyisipkan fungsi-fungsi ini pada sistem yang anda rancang. Dari pengolahan gambar hingga fungsi-fungsi berat seperti Algoritma Genetik yang saya buat untuk mencari lokasi SPBU yang optimal di Bekasi.

Matlab 2007 lebih baik dari pada Matlab 2008?

Tiap tahun biasanya Matlab menerbitkan versi terbarunya. Pertama kali saya menggunakan Matlab 6 tahun 2001 ketika menyelesaikan skripsi S1. Waktu itu Matlab mulai meluncurkan pemrograman Visualnya. Karena hanya sebagai alat bantu simulasi perhitungan getaran, saya tidak begitu mengeksplorasi fitur-fitur yang ada di Matlab 6. Baru ketika menyelesaikan Tesis tentang pencocokan pola dengan Jaringan Syaraf Tiruan, fitur-fitur yang ada banyak saya ketahui, dari SIMULINK, toolbox yang beraneka macam dan teknik kompilasi menjadi program executable sudah saya coba.

Berikut ini kita akan menguji kemampuan pembelajaran Jaringan Syaraf Tiruan (JST) antara Matlab 7 dengan Matlab 8. Untuk mudahnya, kita misalnya akan mengajari perkalian dua bilangan. Persiapkan datanya sebagai berikut pada command window.

Pada Matlab 2008 buka jendela toolbox JST dengan mengetik nntool. Masukan data-data tersebut di atas ke dalam toolbox tersebut.

Parameter-parameter yang digunakan antara lain fungsi pembelajaran lavenberg marquadt (TRAINLM), fungsi adaptasi gradien Minimum (LEARNGDM), fungsi performa Mean Square Error (MSE), jumlah lapis 2 (satu lapis tersembunyi), jumlah neuron 3 pada lapis tersembunyi itu. Fungsi transfer yang digunakan di lapis tersembunyi adalah tangen sigmoid (TANSIG) dan lapisan output linear (PURELIN). Lakukan proses training yang dilanjutkan dengan menguji hasil pembelajaran dan data lain di luar data pelatihan.

Masuk ke tab Train, lakukan proses training dan jangan lupa menyimpan Network1 ke workspace agar bisa digunakan untuk menguji data. Lakukan pengujian dengan fungsi SIM.

Perhatikan, hasil belajarnya cukup baik dimana errornya hampir tidak ada jika diuji dengan data pelatihan. Coba uji dengan data lain selain data pelatihan, apakah benar hasilnya masukan pertama dikali masukan kedua.

Perhatikan, ada error di kolom dua antara target dengan hasil simulasi JST. Berikutnya kita lakukan cara yang sama di Matlab 2007, apakah hasilnya lebih baik? Dengan parameter yang setara tentunya.

Perhatikan gambar di atas, tampak adanya perbedaan dengan Matlab 2008. Pada Matlab 2007, gambarnya masih kurang baik menurut saya. Salah satu perbedaan lainnya adalah saat training tidak dijumpai bentuk GUI penjelasan training, melainkan hanya grafik saja.

Uji terhadap data pelatihan cukup baik dan mendekatai Matlab 2008, hanya saja ada dua data yang harusnya 6 tetapi dijawab 5,9997. Tetapi tentu saja dianggap berharga 6. Sedangkan untuk data lain (data yang sama dengan uji pada Matlab 2008) dihasilkan:

Ternyata hasilnya pun tidak jauh berbeda dengan Matlab 2008, yaitu error di kolom 2 yang disebabkan keluaran yang bernilai 12, jauh dari nilai saat pelatihan. Lebih baik Matlab 2008? Tunggu dulu, coba data lain misalnya logika OR.

Jika menggunakan cara di atas, untuk Matlab 2007 menghasilkan keluaran:

Sedangkan untuk Matlab 2008 menghasilkan keluaran:

Hal ini saya temukan ketika mengajar data mining di kelas Sistem Informasi Darma Persada, lab yang terinstall Matlab 2007 menghasilkan keluaran yang baik dibanding laptop saya yang terinstall Matlab 2008. Kalau ingin membuktikannya coba sendiri di komputer Anda. Salah satu keunggulan versi 2008 adalah dari sisi kompilasi (Deployment Project) yang sudah lengkap.

Membuat Aplikasi Sederhana Berbasis Support Vector Machine (SVM)

Berikut ini kita akan mencoba membagi kelas IPA, IPS, dan Bahasa terhadap satu kelompok kelas. Istilah yang digunakan untuk lebih dari dua kelas adalah MULTICLASS. Untuk contoh kita buat data IPA, IPS, dan Bahasa dengan data sedikit saja:

Berikutnya kita membuat tiga garis pemisah y1, y2, dan y3 yang akan memisahkan data berdasarkan kriteria seperti gambar di bawah ini:

Pertama kita buat y1:

Berikutnya kita membuat pemisah IPA dan Bahasa, y2:

Terakhir kita membuat pemisah IPS dan Bahasa, y3:

Berikutnya persamaan garis y1, y2, dan y3 dijadikan dasar patokan menentukan jurusan seorang siswa, misalnya IPA= 75, IPS= 85, dan Bahasa= 90]. Kita gunakan y1 untuk menguji apakah IPA atau IPS. Simpan data persamaan garis dalam bentuk file, misalnya namanya y, ketik save y di Command Window.

Karena hasil pengujian tahap pertama masuk kategori IPS, maka pengujian berikutnya dengan y3 untuk menentukan apakah dia IPS atau Bahasa. Perhatikan gambar diagram pohon sebelumnya, dimana jika diperoleh uji pertama = 1, maka digunakan uji ketiga antara IPS dan Bahasa.

Dan hasil akhir diperoleh 2 yang artinya, siswa tesebut masuk kategori kelas bahasa berdasarkan enam data sebelumnya. Bagaimana membuat aplikasi terapannya? Rancang GUI seperti berikut ini:

Gunakan kode berikut ini:

  • load y
  • uji=[handles.ipa handles.ips handles.bahasa]
  • uji1=svmclassify(y1,uji(:,1:2))

 

  • if uji1==0
  • uji2=svmclassify(y2,[uji(:,1) uji(:,3)])
  • if uji2==0
    • msgbox(‘Kelas IPA’)
  • else
    • msgbox(‘Kelas IPS’)
  • end
  • else
  • uji3=svmclassify(y3,uji(:,2:3))
  • if uji3==1
    • msgbox(‘Kelas IPS’)
  • else
    • msgbox(‘Kelas Bahasa’)
  • end
  • end

Masukan data seperti data uji sebelumnya, hasilnya harus sama.

 

 

Membuat JST dengan Neural Network Fitting Tool (nftool)

Data Mining/06.05.2013/Sistem Informasi

Matlab menyediakan fasilitas JST yang lebih spesifik dari sebelumnya, yaitu fitting, clustering, dan Pattern recognition. Sekarang kita coba melatih data berikut ini dengan nftool. Buat dengan excel setelah itu pindahkan ke workspace dengan perintah xlsread. Misalnya, nama file excel-ya ‘input.xlsx’. Misalnya kolom A Indeks Prestasi Mahasiswa, Kolom B Tingkat Kemiskinan dan C mendapat beasiswa atau tidak (beasiswa = 1, Tidak Beasiswa = 0).

Berikutnya masuk ke Command Window, masukan beberapa langkah berikut ini untuk membuat data masukan dan target yang akan digunakan untuk pelatihan.

  • input=xlsread(‘input.xlsx’);
  • in=[input(:,1) input(:,2)];
  • out=input(:,3);

Berikutnya jika in dan out sudah ada di workspace kita, panggil nftool untuk membuat JST dan melakukan pelatihan. Ketik nftool di command window. Masukan input dan outputnya sesuai dengan variabel yang telah dibuat. Jangan lupa klik jumlah record berdasarkan baris atau kolom. Biasanya, jika belum dicentang, tombol next tidak bisa ditekan yang artinya antara input dan output masih ada kesalahan. Klik Next, hingga muncul tampilan sebagai berikut.

 

Berikutnya kita lakukan pelatihan (training) dengan metode Backpropagation. Klik tombol ‘Train’.

Setelah pelatihan selesai, jangan lupa menyimpan hasil pelatihan tersebut ke workspace dengan menekan tombol ‘Save Result‘.

Berikutnya uji dengan beberapa masukan, apakah hasilnya tepat? Untuk menguji hasil pelatihan dapat dilakukan dengan menguji input yang dilatih, apakah sesuai dengan target atau tidak? Gunakan kode berikut.

Perhatikan, hasil antara kolom kiri dan kanan harus sama. Perbedaan menandakan ada kesalahan pada hasil pelatihan. Tetapi jarang diperoleh hasil pelatihan yang memiliki akurasi 100%. Jika ingin melihat Surface, gunakan kode berikut di Command Window untuk melihat hasil surface beragam kemungkinan masukan.

  • plot3(1,1,1)
  • hold
  • Current plot held
  • >> grid
  • >> for i=1:40
  • for j=1:40
  • x=i/10;y=j/10;
  • k=sim(net,[x;y]);
  • if k>0.5
  • plot3(x,y,k,’r*’)
  • else
  • plot3(x,y,k,’b*’)
  • end
  • end
  • end

Wilayah berwarna merah berdasarkan kode di atas masuk dalam kategori memperoleh beasiswa “1” dan biru masuk kategori tidak mendapat beasiswa “0”.