Interpolasi dengan Matlab

Ketika mencoba melakukan peramalan dengan nonlinear autoregressive with external (NARX) lewat GUI (ntstool), ternyata data minimal untuk meramal adalah sepuluh titik, sementara data yang tersedia hanya lima buah. Sebenarnya bisa dengan NARX versi command window (lihat postingan yang lalu tentang peramalan), tetapi jika lebih suka dengan GUI apa boleh buat tambahkan data dengan interpolasi.

Interpolasi bermaksud membuat garis antara beberapa titik yang telah diketahui. Garis di sini bisa berupa garis lurus, bisa juga berupa garis lengkung (non-linear). Caranya adalah dengan menambah titik-titik baru di dekat titik-titik yang telah ada sebelumnya. Berikut ini contoh lima data yang akan digunakan untuk meramal data selanjutnya.

Data time series itu berjarak tiga tahun dari tahun 2003 hingga 2015. Kita akan menyisipkan data baru di antara tahun-tahun tersebut dengan cara interpolasi. Buka command window Matlab, masukan data tersebut:

  • >> data=[245 276 309 325 344]; %data utama
  • >> t=[2003:3:2015]; %waktu
  • >> new_t=[2004 2007 2008 2010 2014]; %data yg akan dicari interpolasinya
  • >> new_data=interp1(t,data,new_t) %interpolasi satu dimensi (default: linear)

new_data =

255.3333 287.0000 298.0000 314.3333 337.6667

Tampak lima data baru (di sini sengaja new_t saya tambah tahun 2008 supaya genap sepuluh data untuk peramalan). Script di atas untuk tipe interpolasi linear. Jika ingin interpolasinya nonlinear, tambahkan atribut ‘spline’ pada instruksi interp1.

  • >> new_data2=interp1(t,data,new_t,’spline’) %interpolasi nonlinear (spline)

new_data2 =

253.3364 288.1975 299.5525 315.8364 335.4969

Grafik di bawah ini menunjukkan data awal, perbandingan data awal dengan hasil interpolasi linear dan dengan hasil interpolasi nonlinear.

Bagaimana membuat grafik seperti di atas? Sepertinya harus dibuat postingan khusus tentang presentasi grafik dengan Matlab. Sampai jumpa lagi.

Nonlinear Autoregressive Network With External (NARXNET) dengan GUI di Matlab

Kemunculan regresi dengan NARX sangat menarik karena regresi dengan metode ini tidak hanya sekedar meramal berdasarkan data time series yang ada melainkan dengan menambahkan pula variabel lain yang dikenal dengan istilah exogenous. Variabel ini berfungsi untuk membantu mengarahkan peramalan agar sesuai dengan kondisi yang ada. Beberapa peneliti menyarankan untuk membatasi jumlah variabel eksogen tersebut karena jika terlalu dominan maka fungsi peramalan jadi berkurang. Berkurang di sini maksudnya bukan domain peramalan (forcasting) lagi melainkan prediksi seperti biasa. Buka GUI untuk proyeksi dengan mengetik ntstool di command window (jika tidak ada maka Matlab harus diupgrade ke yang lebih baru). Perhatikan penggunaan kurung kurawal, di sini digunakan format data cell.

  • >> X={100 90 80 70 60 50 40 30 20 10};
  • >> T={1 2 3 4 5 6 7 8 9 10};

Perhatikan dua data tersebut, yang atas data yang berkurang terus mengikuti waktu, sementara data yang bawah akan dijadikan data eksogen yang berkembang terus. Pilih problem yang paling atas di jendela ntstool yaitu NARX.

Perhatikan gambar di atas dimana di sini hasil keluaran yang ingin dicapai adalah y(t), sekaligus sebagai umpan balik untuk masukan. Sementara variabel exogenous adalah x(t). Jadi x(t) dan y(t) pada contoh kasus ini adalah berturut-turut X dan T. Masukan data input dan target tersebut ke jendela ntstool dan lanjutkan hingga proses pelatihan (train). Jangan lupa simpan hasil network-nya dengan menekan tombol Save Result. Untuk mengetahui kinerja hasil training, tekan tombol Test Network setelah memasukan X dan T. Kinerjanya dapat dilihat dengan menekan tombol Plot Response.

Karena d diisi dengan 2 maka dua data pertama dijadikan sebagai patokan untuk meramalkan data ke-3 sampai ke-10. Akibatnya pada grafik di atas data yang ditampilkan adalah delapan, karena yang dua pertama dijadikan sebagai patokan training.

Untuk memprediksi, seperti pada postingan yang terdahulu tentang narnet yang tanpa variabel eksogen, gunakan fungsi removedelay. Ys pada instruksi di bawah ini memunculkan data ke-11 hasil peramalannya.

  • >> nets = removedelay(net);
  • >> view(net)
  • >> [Xs,Xis,Ais,Ts] = preparets(nets,X,{},T);
  • >> Ys = nets(Xs,Xis,Ais);

Dari perhitungan di komputer saya menunjukan 10.993. Jika ingin mem-plot hasilnya jangan lupa dikonversi kembali data dengan format cell menjadi numerik dengan instruksi cell2mat.

  • Ys =
  • Columns 1 through 7
  • [3.0007] [4.0004] [5.0001] [6.0000] [7.0000] [7.9999] [8.9999]
  • Columns 8 through 9
  • [9.9906] [10.9330]

Bagaimana untuk data ke-12? Gunakan saja teknik yang sama untuk memperoleh data ke-11. Latih data ke-1 hingga ke-11 (data baru), untuk memprediksi data ke-12.

Prediksi Time Series dengan ntstool Matlab

Matlab memiliki fasilitas berbasis Graphic User Interface (GUI) untuk memprediksi data time series. Fasilitas Help yang tersedia di Matlab sepertinya terlalu rumit, terutama bagi pengguna baru. Seperti penerapan Matlab di bidang lainnya, anda harus memahami konsep dasar bidang yang akan diterapkan di Matlab karena seperti alat bantu (tools) lain pada umumnya, Matlab hanya berfungsi mempermudah proses pengolahan dan komputasi. Postingan sebelumnya sedikit banyak memberi gambaran bagaimana mengelola data time series.

a. Mempersiapkan Jaringan Syaraf Tiruan untuk Proyeksi

Buka jendela ntstool dengan mengetik ntstool di command window matlab.

Untuk mudahnya kita buat dengan data sederhana agar terlihat akurasinya dengan jelas. Misalnya data sebanyak sepuluh buah yang runtun membesar dari satu hingga sepuluh (jika diteruskan kira-kira 11, 12, 13, dst). Di sini data yang kita gunakan berstruktur cell sehingga menggunakan kurung kurawal di antaranya.

  • data={1 2 3 4 5 6 7 8 9 10};

Karena tidak ada intervention variable atau di Matlab disebut dengan istilah external (exogenous) maka kita memilih yang tengah.

Di sini variabel d berfungsi sebagai masukan terhadap nntool yang sudah dilatih untuk memprediksi keluaran. D sering disebut juga dengan jendela. Jika kita memberikan nilai 3 pada jendela (defaultnya 2) maka nntool akan memprediksi data ke-4 dan seterusnya. Untuk mudahnya kita ambil harga d=2 saja. Ambil data yang akan dilatih:

Defaultnya adalah data berbentuk sequence yang menggunakan fungsi con2seq terhadap data yang akan diliatih jika ingin menggunakan format Cell column. Klik next terus hingga bagian arsitektur nntool. Isi d dengan angka 3 yang artinya dua data akan digunakan sebagai masukan.

Lanjutkan dengan tekan tombol train yang bersimbol petir . Tunggu beberapa saat hingga Matlab berhasil melakukan proses pembelajaran (training). Selamat, Anda telah berhasil membuat jaringan syaraf tiruan (JST) untuk memprediksi. Tetapi sampai di sini kita baru sampai memprediksi data ke-3,4, …, 10 saja, dengan hasil akurasi dapat dilihat dengan cara menguji JST itu. Isi kolom target dengan data yang digunakan untuk learning.

Setelah menekan tombol Test Network, lanjutkan dengan menekan tombol Plot Response untuk mengetahui akurasi learning.

Grafik di atas bermaksud menguji kemampuan data ke-1 dan ke-2 dalam memprediksi data ke-3 hingga ke-10 (total ada delapan data yang diprediksi). Hasil pembelajaran lumayan bagus dimana prediksi dengan data sebenarnya tidak jauh berbeda. Jika kurang puas dapat anda ulangi proses pelatihannya dengan menekan tombol retrain. Jika sudah dirasa cukup akurat, lanjutkan dengan menekan next hingga dijumpai jendela Save Result. Jangan lupa menekan tombol ini supaya hasil training tersimpan di workspace.

Tekan tombol FINISH untuk mengakhiri proses learning. Berikutnya kita masuk ke bagian yang lebih rumit yakni memprediksi data di masa yang akan datang.

b. Proyeksi Data

Untuk memproyeksi satu data tambahan, yaitu data ke-11, Matlab menyediakan fungsi removedelay. Pada command window ketik fungsi itu untuk membuat satu network baru, misal beri nama “nets”.

  • nets=removedelay(net);
  • [xs,xis,ais,ts] = preparets(nets,{},{},data);
  • ys = nets(xs,xis,ais)

Perhatikan ada satu fungsi tambahan yang berfungsi mempersiapkan data untuk mensimulasikan JST baru yaitu preparets. Hal ini perlu karena JST untuk time series berbeda dengan JST untuk data biasa. Variabel yc akan memberikan hasil time series dengan satu data tambahan yang merupakan ramalan ke depan.

Perhatikan data baru hasil prediksi yaitu, 11.4630. Jika kita lihat deret di atas (secara logika sederhana), seharusnya hasil peramalan adalah 11.0000 tetapi walaupun demikian, dirasa sudah cukup akurat. Ys merupakan data prediksi date ke-3 hingga ke-11. Jika ingin diperoleh data totalnya dapat dengan menyipsikan data pertama dan kedua yang dijadikan sebagai variabel d (dua data pertama sebagai dasar prediksi, 1:2). Lanjut ke NARX dengan variabel exogenous.

  • ytotal=[data(:,1:2) ys];
  • plot(cell2mat(ytotal))

Peramalan dengan Jaringan Syaraf Tiruan – Matlab

Kita mengenal peramalan berdasarkan time series data dengan menggunakan regresi saat di bangku sekolah dahulu. Ternyata peramalan bisa juga dengan menggunakan Jaringan Syaraf Tiruan (JST). Peramalan dengan JST memiliki keunggulan karena kemampuan JST yang sangat baik dalam menangani data non-linear. Ditambah lagi, JST mampu disisipkan dengan data pendamping selain data time series yang dikenal dengan istilah intervening indicator atau exogenous input. Jika pada postingan sebelumnya menggunakan referensi dari situs ini, maka kali ini kita coba dengan menggunakan fungsi bawaan Matlab yang dikenal dengan istilah Time Series NARX Feedback Neural Network. NARX itu sendiri singkatan dari Nonlinear Autoregressive Network wit eXogenous input. Kita akan mencoba meramalkan data penurunan jumlah taman seperti tabel di bawah ini (mengisi kolom yang ditunjukan dengan tanda tanya).

Data exogenous adalah populasi yang merupakan hasil dari proyeksi yang menunjukan trend bertambah, sementara park menunjukan trend menurun. Apakah JST sanggup memprediksi berapa penurunan jumlah taman sebagai akibat dari kenaikan populasi? Buka command window Matlab.

Masukkan data populasi X. Cara mudahnya tinggal anda copy-paste dari excel:

  • X=[1845005    1873470    1882869    2334142    2733030]
  • X=con2seq(X)

Di sini fungsi con2seq bermaksud mengkonversi data continyu menjadi sequensial yang jika dilihat di workspace window berupa tipe data “cell”. Sementara itu untuk data populasi untuk meramalkan adalah lima yang terakhir:

  • X2=[2334142    2733030    2943860    3155340    3369800]
  • X2=con2seq(X2)

Perhatikan untuk X2 sebagai prediksi di sini ada “shift” (untuk prediksi berikutnya ada data yang terkesan diulangi, lihat yang berwarna merah) dengan X sebelumnya. Lihat kembali prinsip-prinsip dasar windowing pada tulisan terdahulu. Untuk data park yang akan diramalkan, gunakan variabel T

  • T=[1904    1904    1887    1858    1772]
  • T=con2seq(T)

Intruksi berikut ini adalah untuk merakit NARX close dan open loupe, dilanjutkan dengan prediksi lima terakhir.

  • net = narxnet(1:2,1:2,10); %membuat NARX dgn riwayat 2 data sebelumnya (1:2)
  • [x,xi,ai,t] = preparets(net,X,{},T); %menyiapkan data training dan target “preparets=prepare time series”
  • net = train(net,x,t,xi,ai); %training NARX dengan data dari preparets
  • y = net(x,xi,ai); %memunculkan data hasil training untuk patokan validasi
  • netc = closeloop(net); %membuat NARX menjadi lingkar tertutup (serial-paralel)
  • view(netc); %melihat network lingkar tertutup NARX
  • [x,xi,ai,t] = preparets(netc,X,{},T); %persiapan data untuk memprediksi data 3,4,dan 5
  • yc = netc(x,xi,ai); %simulasi data 3,4,5 (cek errornya .. bandingkan dengan T)

Perintah view bermaksud melihat struktur NARX yang baru saja dirakit seperti gambar di bawah ini:

Gunakan fungsi “preparets” untuk populasi lima tahun terakhir sehingga dihasilkan network (netc) untuk memprediksi park berdasarkan data exogenous populasi.

  • [x2,xi,ai,t] = preparets(netc,X2,{},T); %persiapan simulasi data yang akan datang
  • yc2 = netc(x2,xi,ai) %simulasikan data yang akan datang 6,7,8,9,10

Untuk membuat plot prediksinya, konversi kembali data sequensial menjadi desimal dengan fungsi “cell2mat” seperti berikut ini:

  • plot([cell2mat(T) cell2mat(yc2)])

Apakah hasil itu sudah fix? Ternyata belum. Coba saja running ulang, akan menghasilkan prediksi tiga tahun kedepan yang berbeda. Berikut ini running kedua saya:

Sepertinya cara ini kurang baik, bisa gunakan cara yang mudah dengan GUI di postingan tentang NARNET dan NARX

Semoga bisa menjadi inspirasi.

Konversi Mat-File ke Shapefile

Kalau di postingan sebelumnya shapefile yang berisi data spasial dari GIS tools (ArcGIS, ArcView, dll) sudah berhasil diolah clustering-nya, kemudian kita akan membuat pusat cluster di GIS, mau tidak mau kita membutuhkan sarana konversi dari Matlab ke GIS tool, di sini akan dicontohkan menggunakan ArcGIS. Buka lagi Matlab yang lalu. Fungsi Matlab yang diperlukan untuk menyimpan mat menjadi shapefile adalah “shapewrite”. Di sini agak sulit dibanding “shaperead” karena kita diminta menyiapkan wadah sebagai format untuk data spasialnya, termasuk proyeksi-proyeksi yang diperlukan agar bisa terbuka dengan baik di ArcGIS. Cara termudah membuat wadah adalah lewat ArcGIS.

Di sini kita siapkan shapefile untuk tempat mat yang akan diekspor. Jangan lupa gunakan proyeksi koordinat, lihat postingan sebelumnya tentang problematikan projection. Jika sudah kita kembali ke Command Window Matlab dan bersiap melakukan konversi dari Matlab ke ArcGIS. Sebelumnya panggil dulu center yang akan dipindahkan ke ArcGIS.

Perhatikan dua koordinat center yang berasal dari file “comm_center.dat” hasil clustering. Kemudian kita siapkan variabel wadah dari ArcGIS yang baru saja kita buat shapefilenya. Saya memberinya nama “center_commercial.shp”.

revisi_blog

Di sini shaperead memanggil wadah tempat menyimpan yang bernama “center_commercial.shp”. Dilanjutkan dengan men-transpose agar berformat baris. Jumlah titik bermaksud untuk persiapan looping memasukan data dari mat ke tiap-tiap koordinat.

revisi_blog2

Pastikan tidak ada pesan kesalahan yang terjadi. Fungsi shapewrite membutuhkan wadah, dalam hal ini variabel bernama “data” yang sudah terisi data baru, serta nama shapefile yang sama dengan wadahnya. Kembali kita ke ArcGIS untuk melihat center yang sudah dalam format shapefile bernama “center_commercial.shp” itu.

Perhatikan dua titik center itu sudah muncul di peta bekasi, dan karena proyeksi mengikuti wadahnya, maka tepat berada di lokasi yang di tuju di dalam wilayah bekasi. Kalo pengen membuat jangakauannya, bisa dengan teknik euclidean distance seperti postingan sebelumnya. Keren ya, Matlab bisa ke mana aja penggunaannya.

 Update: 25 Desember 2017

Jika ingin menampilkan koordinat dengan Google Map API bisa lihat post berikutnya.

Membuat Fungsi Alih Motor Listrik

Perkenalan saya dengan Matlab pertama kali adalah lewat bidang sistem kontrol/kendali. Waktu itu saya diminta dosen pembimbing untuk mensimulasikan sistem suspensi ketika ada beberapa respon masukan (impulse, step, dan sinusoidal) mengenainya. Kembali saya membuka buku catatan mata kuliah getaran dan teknik pengaturan. Untuk mensimulasikan sesuatu kita harus mampu membuat model matematis dari sistem yang akan kita simulasikan. Model matematis itu kemudian disimulasikan di Matlab untuk melihat respon dan kinerja dari model tersebut. Asalkan sudah dalam bentuk model matematis, Matlab mampu mensimulasikan tanpa memandang domain ilmu dari model tersebut, apakah kimia, elektro, ekonomi, biologi, dan lain-lain. Misalnya kasus motor listrik (atau bisa juga generator).

Gambar di atas adalah motor DC yang saya ambil dari situs kampus UPI ini semoga masih ada. Fungsi alih sendiri (dalam istilah Inggris transfer function) dari arti katanya fungsi yang mengalihkan dari satu masukan ke keluaran tertentu. Jika masukannya tegangan dan keluarannya tegangan yang lebih besar, bisasanya disebut penguat, tetapi ada juga masukannya putaran, misal potensiometer, keluarannya arus/tegangan dan sering diistilahkan dengan transducer. Ada juga istilah lainnya yakni sensor, yang merubah masukan tertentu seperti suhu, level ketinggian air, dan lain-lain menjadi tegangan atau arus yang masuk ke dalam perangkat elektronika.

Untuk kasus motor DC di atas jika dilihat, masukannya adalah tegangan dari baterai arus searah dan keluaranya adalah puntiran di motor em. Variabel s adalah variabel Laplace. Apa itu? Yah .. mau nggak mau belajar dulu dasar-dasar sistem kontrol. Karena nanti setelah ada variabel laplace ada lagi variabel z kalau sudah masuk ke sistem digital yang melibatkan metode cuplik/sampling. Untuk orang elektro tidak ada masalah dengan besaran-besaran di atas beserta satuannya yang pasti. Situs dari malang ini lebih lengkap dengan besaran dan satuan juga teknik simulasinya.

Jika J= 10, D=5, km=2, dan Rα=0.5 maka diperoleh fungsi alih sebesar, pembilang=2/(0.5*5)=0.8 dan penyebut=s(s*(10/5)+1)=s(2s+1). Buka Matlab dan masuk ke command window. Masukan instruksi ini:

Lalu muncul plot setelah instruksi masukan impulse diterima fungsi alih, demikian pula setelah masukan tangga (step) diberikan.

Ntah bener atau salah, mohon koreksinya. Tapi setahu saya, motor DC itu harus diberi beban karena tanpa beban dia akan bertambah kencang bahkan bisa merusak motor itu sendiri.

Basis Data di Matlab

Tahun 2000 merupakan tahun perkenalan saya dengan Matlab. Dosen pengajar pengenalan pengaturan (dulu namanya mekanisme servo dan kontrol) rencananya akan memberikan seminar khusus di kampus. Sayangnya ternyata acara itu karena satu lain hal di-cancel. Rencananya saya akan menggunakan software itu untuk tugas akhir saya dalam mensimulasikan sistem suspensi. Apa boleh buat, terpaksa belajar sendiri.

Setelah membuka-buka Matlab ternyata banyak fasilitas-fasilitas menarik yang bisa diexplore, apalagi waktu itu Matlab 6 sudah muncul. Versi ini jauh lebih menarik dibanding Matlab 5, versi sebelumnya. Dari kedokteran, sains, bahkan ekonomi pun bisa memanfaatkan Matlab, walaupun orang informatika waktu itu kurang menyukai karena “terlalu mudah” atau “hanya mengandalkan toolbox” dibanding dengan bahasa c++, visual basic, pascal (sekarang Delphi) yang lebih laris dipasaran dan banyak dipakai pengembang. Efeknya, buku-buku terbitan Matlab waktu itu masih amat langka, ditambah lagi waktu itu internet masih barang mahal dibanding sekarang. Tapi bagi pengembang metode (bukan terapan) Matlab sangat menarik karena dengan cepat bisa mengeksekusi metode-metode rumit buatannya, karena kelamaan jika terlalu berfokus ke coding. Salah satu kelemahan Matlab sehingga dijauhi pengembang waktu itu adalah sulit diterapkan ke sistem basis data (DBMS). Sempat membuka sampel penggunaan basis data ternyata basis data yang digunakan tersimpan dalam format “mat” khusus Matlab, tidak dengan Access, MySql, dan sejenisnya. Untuk menghubungkannya harus mengkonversi dari DBMS tersebut ke Excel atau “dat” file agar bisa dimanipulasi Matlab.

Dengan Matlab saya banyak menerima dana hibah penelitian dari DIKTI untuk mengutak-atik Soft Computing dengan metode-metode terbarunya baik penerapan atau memodifikasi metode tersebut. Dari Jaringan Syaraf Tiruan hingga Algoritma genetika sudah saya gunakan, hingga akhirnya saya dipaksa melibatkan DBMS karena data yang besar (big data) dengan ukuran dua giga byte ke atas. Apalagi jika data yang akan dimanipulasi real time yang harus berubah-ubah terus. Untungnya Matlab 7 sudah memberikan fasilitas menghubungkan Matlab dengan basis data, waktu itu saya menggunakan ruby on rail sebagai interface yang menampilkan hasil manipulasi genetic algorithms ke web lewat PostgreSQL

Karena banyak yang menanyakan cara menghubungkan Matlab dengan DBMS, plus pemrograman visualnya (GUI) akhirnya saya tulis ke dalam buku yang baru terbit Februari 2016 kemarin.

Entah sudah tersedia di toko-toko buku terdekat atau belum saat ini. Kebanyakan pembeli menggunakan situs online dari penerbit informatika, link-nya berikut ini. Ada beberapa contoh kasus seperti enkripsi sederhana terhadap database, pengolahan citra digital (digital image processing) dan clustering dengan Fuzzy C-Mean. Kali ini saya menambahkan dengan CD. DBMS yang saya gunakan adalah Microsoft Access sebagai perwakilan aplikasi desktop dan MySQL sebagai perwakilan aplikasi berbasis Web dengan ODBC sebagai jembatan penghubung dari Matlab ke DBMS lewat windows.

Untuk membuat buku yang sempurna mungkin membutuhkan waktu yang cukup panjang, sementara para mahasiswa yang sedang menyelesaikan tugas akhir/skripsi/tesis dikejar waktu, ada baiknya buku yang ringkas dan sesuai kebutuhan tersedia di pasaran. Semoga bermanfaat, Amiin.

Algoritma Genetika dengan Toolbox Matlab

Genetic Algorithms (GAs) digunakan untuk mencari nilai optimal (maksimum atau minimum) suatu fungsi. Fungsi itu dikenal dengan istilah fitness function, atau ada juga yang menyebutnya fungsi objektif. Sebelumnya optimasi dilakukan dengan cara matematis, kalau kita inget-inget lagi pelajaran SMA dengan menurunkan suatu persamaan dan disamadengankan dengan nol. Tetapi masalah muncul jika persamaan itu memiliki banyak nilai optimal, karena nilai optimal akan terjebak dalam lokal optimum. Contohnya adalah fungsi rastrigin dari Matlab yang memiliki banyak jebakan local minimum dan hanya ada satu global optimum (kayak tempat telor ya).

Ok, kita coba mengoptimasikan satu fungsi objektif dari penanya: y = 2*x(1)+3*x(2)+4*x(3)+4*x(4). Dengan constraint: 10<x(1)<20, 30<x(2)<40, 50<x(3)<60, 70<x(4)<80. Kayaknya susah. Sebelumnya, buat terlebih dahulu fungsinya di m-file. Praktisnya ketik saja edit fungsi jika kita mau membuat fungsi objektif itu bernama fungsi. Tekan “yes” jika ada pesan bahwa tidak ada m-file bernama “fungsi”. Berarti fungsi bernama fungsi itu tidak dimiliki oleh bahasa built-in bawan Matlab. Ketik fungsi y di atas di m-file editor yang baru saja terbuka.

Kok Cuma gitu? Ya iyalah, coba tes dengan x1, x2, x3, dan x4 berturut-turut 1,2,3, dan 4 di command window dengan mengetik y=fungsi([1 2 3 4]). Jawabannya harus 36 dan tidak ada pesan error. Oiya, ini harus benar, karena jika sampai sini tidak berhasil mengikuti ya dijamin ga bakal bisa terus ke algoritma genetik, tapi kalo hanya ingin membaca saja ya rapopo.

Seperti biasa, cara termudah mengoperasikan Matlab adalah dengan menggunakan toolbox yang tersedia. Untuk GAs, karena masuk dalam kategori optimization toolbox, gunakan fungsi optimtool di command window.

Setelah memilih jenis optimasinya (GAs), isi nama fungsi didahului @, jumlah variabel (4 variabel) dan perhatikan teknik mengisi bound yang sesuai persoalan. Di bagian kanan masih ada sebenarnya, tapi ga wajib. Centang pada isian plotting pada best fitness dan best individual sehingga ketika tombol “Start” ditekan, proses optimasi akan disertai pergerakan grafik yang interaktif. Oiya, tolong dicek benar atau tidak kalau itu nilai minimum. He he .. kayaknya ga perlu pake GAs saya juga bisa nebak, ya pasti batas bawah lah jawabannya (10, 30, 50, dan 70) soalnya fungsi kuadrat (membesar terus). Coba ganti fungsi yang lain.

Mengetahui Data Network JST hasil Training

Postingan yang lalu sudah dibahas bagaimana mengelola Mat-file agar file hasil learning JST bisa dibuka kembali. Ketika dibuka dengan fungsi load pertama kali saya mencoba ternyata hanya variable hasil training yang muncul, misalnya variabel jst. Padahal kita ingin mengetahui bobot, bias, jumlah input, output dan neuronnya. Untuk mengetahui bagaimana melakukan training JST dapat Anda lihat postingan di menu JST. Sebenarnya kita sudah mengetahui jumlah neuron, bias dan bobot ketika kita melakukan proses pembelajaran, tetapi jika lupa mencatatnya maka kita dapat mengetahui paramater-parameter JST lewat langkah berikut ini.

Di sini kita mencoba menjawab pertanyaan berapa bobot, bias, dan jumlah neuron suatu JST? Seperti biasa buka Matlab dan masuk ke command window.

load training

Di sini saya memanggil file mat bernama “training” yang telah saya simpan sebelumnya dengan fungsi write. Perhatikan di jendela workspace, tampak muncul variabel baru bernama jst. Variabel itulah yang akan kita cari jawabannya. Caranya sederhana, ketik saja nama variabelnya

jst

Maka Anda akan disuguhkan oleh data-data yang tersimpan dalam variabel “jst”. Data-data itu tersusun dalam format bertitik. Perhatikan informasi bias dan bobot di bagian bawah.

  • >> bobot=jst.IW
  • bobot =
  • [9×4 double]

Maksud dari “jst.IW” adalah kita memanggil informasi bobot yang ada dalam variabel “jst” yang kemudian disimpan dalam variabel bernama “bobot”. Namun muncul masalah dimana bobot hanya menampilkan file bertipe structure. Tipe file ini sering digunakan oleh pengguna Matlab yang berkecimpung dengan database.

  • >> cell2mat(bobot)
  • ans =
  • 0.6300 0.9296 0.5837 -0.2078
  • 0.8001 -0.6945 0.9106 0.2863
  • -0.7114 0.9695 0.3352 -0.5743
  • 0.8743 0.9537 -0.8952 0.5222
  • 0.3212 0.0178 0.7384 -0.8089
  • -0.8575 0.5574 0.8318 -0.5720
  • -0.4038 -0.6834 0.3856 -0.8205
  • 0.1292 -0.1272 0.5403 -0.7231
  • 0.8403 0.7692 0.4331 0.4783

Sebenarnya jumlah bobot sudah terjawab, tetapi jika ingin mengetahui bobot tiap neuron berdasarkan masukan (ada 4 input) maka gunakan konversi dari cell ke mat (fungsi cell2mat). Begitu juga untuk biasnya:

  • >> bias=jst.b
  • bias =
  • [9×1 double]
  • [ -0.5114]
  • >> cell2mat(bias)
  • ans =
  • 0.3908
  • -0.3910
  • 0.9763
  • -0.8269
  • 0.0012
  • -0.3521
  • 0.6170
  • 0.6681
  • -0.7900
  • -0.5114

 

 

 

Mengelola Mat-File

Salah satu ketangguhan Matlab adalah kemampuannya menangani vektor dan matriks. Matriks yang telah diolah oleh matlab disimpan sementara di workspace yang biasanya terletak di pojok kanan atas. Jika Matlab ditutup, maka data di workspace akan hilang. Agar tidak hilang, maka data tersebut harus disimpan dalam bentuk file di komputer kita, salah satu caranya adalah dengan instruksi save. Untuk yang sudah mahir mungkin menyimpan hasil dengan mengkoneksikan Matlab ke database dan mengirim atau menerima data secara langsung dari database itu.

Menyimpan Mat-File

Sebagai contoh di workspace saya terdapat lima variabel hasil utak-atik jaringan syaraf tiruan untuk memprediksi. Misalnya kita diminta menyimpan hasil training jst (saya beri nama jst) tersebut ke dalam suatu file. Pada command window dapat Anda ketik:

  • save (‘training.mat’,’jst’)

Di sini file yang akan dibentuk saya beri nama “training.mat”. di sebelah kananya variabel yang akan tersimpan dalam file training.mat tersebut. Sebenarnya bisa juga dengan mengetik save training yang fungsinya menyimpan juga tapi kelima variabel akant tersimpan juga.

Memanggil Mat-File

Apakah variabel jst dapat dipanggil lagi walaupun Matlab sudah ditutup? Tentu saja bisa. Untuk latihan coba hapus variabel workspace dengan instruksi clear. Arahkan current directory di lokasi file mat dan ketik:

  • load training

Maka di workspace akan muncul variabel baru bernama jst yang telah disimpan sebelumnya. Jadi variabel jst itu bersembunyi di dalam file training.mat yang akan muncul jika dipanggil lewat instruksi load. Selamat mencoba.

 

 

 

 

Prediksi dengan Jaringan Syaraf Tiruan (Intervention Indicators)

Postingan ini merupakan kelanjutan dari diskusi kita tentang prediksi dengan jaringan syaraf tiruan, dasar-dasar, dan latihan awal time series tanpa variabel intervention. Berikutnya mulai masuk ke latihan ke terapannya dengan data real, dalam hal ini penggunaan lahan (landuse). Mengingat banyak pertanyaan mengenai kenapa hasil proyeksi tidak bisa membesar dan diduga hanya berada di harga antara maximum dan minimum saat pembelajaran jaringan syaraf tiruan, atau banyak hasil proyeksi yang stagnan di harga tertentu dengan besar yang sama. Berikut ini adalah data landuse untuk latihan, dengan intervention indikatornya proyeksi populasi (lihat situs bekasi ini sebagai contoh proyeksi di chart bagian bawah situs).

Tugas kita adalah mengisi kolom tanda tanya “?” hingga tahun 2030 dengan data yang tersedia hanya dari tahun 2003. Berikut langkah-langkah yang harus dibuat.

Menyiapkan data training

Cara paling gampang adalah melakukan training tiap landuse type dilanjutkan dengan meramu JST yang akan dilatih. Di sini kita bisa menentukan dua atau tiga masukan JST, sebaiknya jumlah masukan dan jumlah data sebanyak mungkin. Perhatikan jika kita membuat jumlah masukan sebanyak empat (th 2003, 2006, 2009, dan 2012) dengan target pelatihan 2015 maka datanya tentu saja hanya satu. Tetapi jika menggunakan tiga masukan, datanya ada dua set, yaitu set pertama (data: 2003, 2006, dan 2009, target: 2012) dan set kedua (data: 2006, 2009, dan 2012, target: 2015). Anda juga bisa membuat tiga set data pelatihan untuk jumlah masukan dua, tetapi tentu saja time series lebih banyak series-nya lebih baik, maka kita pilih jumlah masukan tiga tahun dan ditambah satu masukan dari proyeksi ke tahun yang akan diramal. Jadi total masukannya empat, tiga time series dan satu variabel intervensi.

Jadi data untuk misalnya tipe lahan commercial ada dua data yang kemudian dilatih membentuk satu network, katakanlah network1. Tipe lahan kedua dengan data medical dilatih dan menghasilkan network2 dan seterusnya hingga network6. Keenam network itu kemudian digunakan untuk memprediksi jumlah lahan hingga tahun 2030. Berikutnya kita mulai membuat JST-nya.

Meramu JST

Toolbox Matlab yang tersedia adalah nntool dan nftool. Semuanya saya coba ada kelemahan dan kelebihannya. Nntool sepertinya lebih fleksibel karena dapat merubah jenis transfer function (logsig, tansig, dan purelin) sementara nftool hanya dibatasi hanya satu hidden layer dengan dua transfer function berturut-turut logsig dan purelin. Di sinilah masalah sering terjadi jika kita tidak melakukan setingan ini. Jika kita memilih transfer function logsig logsig, maka kita akan memperoleh harga hanya maximum satu.

Tentu saja jika meramal proyeksi ke depan yang membesar terus, akan mengalami kesulitan jika tidak disertai variabel intervention. Pemilihan transfer function juga bisa berdasarkan dengan trend dan bentuk data pelatihan, jika membesar terus atau mengecil terus sebaiknya menggunakan pureline, alias garis lurus. Di sini maksudnya bukan bentuk prediksinya garis lurus, tapi bentuk keluaran dari transfer function di tiap-tiap neuron.

Jika anda yang suka ngoding, ada baiknya membuat kode sendiri untuk pelatihan JST karena saya sendiri malas menggunakan nntool karena harus menggunakan mouse untuk input data dan target dilanjutkan dengan membuat network baru, training dan seterusnya. Tetapi dengan script kita bisa langsung memanggil data dan melakukan training secara otomatis tanpa memainkan mouse, alias sekali jalan.

Selanjutnya lakukan training network1 hingga network6 baik dengan script maupun dengan toolbox. Tentu saja jangan lupa lakukan testing dengan data pelatihan, pastikan akurat, karena jika testing dengan data pelatihan saja sudah salah maka tentu saja dengan data sesungguhnya jadi meragukan. Jika diminta menguji dengan cross validation, maka Anda harus membuat pengelompokan data2 dimana data yang digunakan untuk training tidak boleh digunakan untuk testing (supaya adil maksudnya).

Proyeksi (Simulation)

Langkah terakhir adalah melakukan proyeksi, atau istilah JST – nya simulasi. Fungsi yang digunakan adalah fungsi “sim“. Proyeksi bisa dilakukan satu persatu, misal 2009, 2012,2015 kemudian menghasilkan ramalan di 2018, dilanjutkan dengan bergeser ke kanan satu-satu. Lihat situs ini jika ingin detilnya.

Istilahnya adalah “window” untuk tiap set training. Satu window itu untuk satu set data training yang ketika training digabung menjadi satu. Untuk testing juga dengan window, dimana hasil proyeksi digunakan lagi untuk proyeksi tahun-tahun berikutnya, atau Anda bisa menggunakan script untuk menggenerate tahun 2018 hingga 2030. Seperti ini kira-kira hasilnya. Oiya, perlu diketahui data ini adalah normal euclidean dari data sebenarnya. Untuk mengetahui data sebenarnya tinggal mengalikan data tersebut dengan normal euclidean data aslinya.

Tentu saja nomor 6 di tahun 2030 tidak bisa digunakan karena tidak ada lahan yang minus. Di sini nol mungkin wajar dimana sudah tidak ada lagi pemukiman padat. Benarkah?

 

 

 

 

 

Prediksi dengan Jaringan Syaraf Tiruan pada Matlab (Latihan Awal)

Ketika kita belajar statistik di bangku sekolah, pasti pernah diajarkan regresi, baik sederhana maupun yang agak lanjut misalnya regresi berganda (kecuali kalo jurusannya tata boga barangkali tidak diajarkan). Saat ini metode regresi banyak berkembang dengan menggabungkannya dengan metode soft computing. Jika dengan Support Vector Machine (SVM) namanya menjadi Support Vector Regression (SVR), kalau dengan Neural Network atau yang dalam bahasa Indonesianya jaringan syaraf tiruan menjadi Neural Network Regression. Di sini kita akan berlatih yang mudah dahulu yaitu neural network regression.

Seperti telah dibahas di postingan sebelumnya, pada prediksi dengan JST terkadang diperlukan data yang mempengaruhi pergerakan ramalan yang dikenal dengan istilah variabel intervention. Tapi tentu saja jangan sampai variabel ini sangat berpengaruh karena bisa berakibat bukan peramalan, melainkan prediksi seperti biasa. Langsung aja praktek, misalnya kita memiliki data temporal, misalnya 5 tahun dengan masing-masing 1,2,3,4, dan 5 (kan supaya gampang prakteknya). Variabel interventionnya misalnya berturut-turut 1000, 2000, 3000, 4000, 5000, 6000, 7000 dan seterusnya, biasanya kalo di realnya prediksi populasi penduduk, inflasi, dan sejenisnya yang ikut menentukan peramalan lima tahun itu. Siapkan datanya di Matlab. Untuk membersihkan layar ketik clc, dan untuk membersihkan variabel di workspace ketik clear (pasti ada yang belum tahu 🙂 ).

Saya lebih suka mengetiknya dengan gaya di atas, yaitu pada saat memasukan variabel pelatihan (data). Jadi JST akan kita beri dua data pelatihan (tentu saja untuk real Anda gunakan lebih dari dua data) yaitu 1,2,3 yang telah meramalkan 4 dan 2,3,4 yang telah meramalkan 5. Jadi jika kita ingin memprediksi tahun ke enam ya tinggal memasukan data 3,4,5 yang harapannya akan menghasilkan hasil ramalan, entah 5, 6 atau berapa, sesuai hasil training dua data sebelumnya. Anda bisa saja membuat tiga data pelatihan [1,2], [2,3],[3,4] tetapi ya kurang bagus kalo untuk peramalan Cuma dua series. Gimana intervention-nya? Intervention itu data input tambahan, jadi misalnya tadinya 1,2,3 karena ada data intervention menjadi 1,2,3, 4000 dan 2,3,4, 5000. Dari mana asal 4000 dan 5000, ya dari data untuk memprediksi berturut-turut tahun ke 4 dan ke-5 (mudah-mudahan nggak bingung). Ok, yg gampang dulu, ketik nntool dilanjutkan dengan mengimport variabel-variabel pelatihan ke toolbox tersebut. Ikutin prosedur-prosedur seperti postingan sebelumnya. Ketika memasukan dan mengeluarkan data sama dengan klasifikasi, tetapi untuk meramu JST, waspadalah .. waspadalah, sedikit berbeda.

Logis sedikit lah, kalo kita lihat trend datanya kan 1,2,3,4, dst, berarti linear kan? Pilihlah wakilmu yang dapat dipercaya, PURELIN alias si “pure linear”. Tapi kalau plot data yg akan diramal meliuk-liuk ya pilih tangen sigmoid aja (sorry kalo bikin pusing).

Lanjutkan dengan create hingga export hasil training (defaultnya bernama network1). Bereskah? Uji dahulu kalau begitu. Oiya ketika memprediksi data tahun ke 7, gunakan data hasil prediksi tahun ke 6, ya, di sini saya menggunakan 6.0000 karena kebetulan hasil prediksi data tahun ke 6 itu segitu, biasanya sih ga pas segitu, misal 5.889, gunakan angka itu untuk memprediksi tahun ke-7, bukannya 6.

Ok, selamat mencoba. Pencari ilmu itu harus haus, udah minum, pengen minum lagi, coba sendiri dengan menambahkan variabel intervention, dan juga data contoh yang tidak linear kayak di atas. Jika ingin pake bahasa vb, c#, java, silahkan buka m-file di matlab, pelajari dan coding ulang dengan bahasa yg menurut Anda the best, atau sesuaikan dengan permintaan jika ingin laku, informatics serves everything.

Parallel Processing dengan Matlab

Selain kelebihan Matlab dalam penanganan matriks dan vektor, Matlab juga dapat menangani pemrosesan paralel. Berikut ini contoh sederhana pemanggilan dan penutupan engine dalam Matlab. Salah satu aspek penting dalam proses ini adalah kemampuan kita membuat aplikasi dengan kohesi sebesar mungkin dan kopling sekecil mungkin atau tanpa kopling sama sekali (kaya motor matic aja 🙂 ). Buat matriks 4 baris misal seperti ini:

  • x =
  • 1 2 3 4
  • 5 6 7 8
  • 9 10 11 12

Namanya latihan ya sederhana dulu saja, yang penting prinsipnya. Misal kita akan menjumlahkan tiap baris dan setelah itu dijumlahkan total hasil penjumlahan tiap baris itu. Tentu saja Anda dapat menggunakan satu mesin, dengan operasi matriks sederhana.

Anggaplah tiap menjumlahkan baris membutuhkan waktu satu jam, maka Anda sudah menghabiskan tiga jam sebelum ditotal. Tetapi jika tiap baris Anda jumlahkan dengan mesin terpisah, maka Anda akan menghemat dua jam jika menggunakan tiga mesin secara bersamaan ketika menghitung jumlah tiap barisnya. Sebenarnya saya juga masih “mencari” cara yang praktis untuk menghitung skor riset saya yang membutuhkan satu jam tiap tipe, padahal ada 10 tipe (waw). Simpan variabel x tersebut dengan instruksi save. Berikut fungsi untuk tiap engine (ganti angka 1 dengan 2 dan 3 untuk engine yang lain).

  • function y=rows1(x)
  • load x
  • x1=x(1,:);
  • y1=sum(x1)
  • save y1 ‘y1’
  • exit
  • end

Saya punya tiga m-file untuk menghitung jumlah tiap baris yaitu rows1, rows2 dan rows3 yang nanti dieksekusi oleh tiap engine. Perintah terakhir adalah mematikan engine jika sudah selesai (exit). Kemudian saya butuh satu m-file utama yang memanggil tiga engine dan menyuruhnya melakukan komputasi, diakhiri dengan mengumpulkan hasilnya lalu menjumlahkan totalnya.

  • load x
  • for i=1:3
  • i=num2str(i)
  • rows=[‘!matlab’ ‘ ‘ ‘-r’ ‘ ‘ ‘rows’ i ‘ ‘ ‘&’]
  • eval(rows)
  • end

Akan muncul tiga engine baru yang secara terpisah melakukan kalkulasi penjumlahan untuk masing-masing baris. Sementara perintah delete di akhir bermanfaat untuk menghapus file temporary tersebut. Lihat hasilnya:

  • load y1
  • load y2
  • load y3

Masih ada masalah berikutnya yaitu instruksi yang menandakan bahwa slave (rows1, rows2, dan rows3) sudah selesai. Sekali lagi tentu saja teknik ini digunakan jika menjumlahkan tiap baris membutuhkan waktu yang sangat lama jika perhitungan baris berikutnya dilakukan jika yang sebelumnya sudah selesai. Bagiku ini sungguh bermanfaat, lihat sumber ini. Pernah saya terapkan juga di pencarian beberapa nama yang sama di text mining pada data yang besar.

Prediksi dengan Jaringan Syaraf Tiruan (Dasar-dasar)

Jaringan Syaraf Tiruan (JST) merupakan metode komputasi yang meniru perilaku kerja otak makhluk hidup dalam merespon masukan. Dengan data berupa variabel-variabel masukan, JST memproses kemudian menghasilkan output tertentu sesuai dengan proses pembelajaran sebelumnya. JST telah banyak diterapkan di berbagai bidang antara lain:  kedokteran, keuangan, sistem kontrol, data mining, dan lain-lain. Lalu muncul pertanyaan, apakah bisa juga digunakan untuk prediksi?

Secara filosofis karena JST adalah usaha untuk meniru otak, maka tentu saja diharapkan dapat digunakan untuk prediksi karena otak kita juga bisa memprediksi sesuatu kan? Situs yang cukup baik menurut saya dalam menjelaskan peramalan dengan JST adalah berikut ini. Atau berikut penjelasannya bagi yang malas baca tulisan panjang ditambah bahasa Inggris pula.

Sebelumnya kita bahas terlebih dahulu JST yang tidak digunakan untuk meramal (forecast), misalnya penentuan harga baru berdasarkan jumlah penjualan dan pesanan. Jika penjualan meningkat dan pesanan meningkat sekian, maka harga baru naik sekian. Jika penjualan menurun dan pesanan menurun sekian maka harga baru turun sekian. Jadi JST akan menerima masukan jumlah penjualan periode tertentu dan berapa pesanan baru, maka JST akan menyarankan untuk menaikan atau menurunkan harga dengan prosentase tertentu berdasarkan informasi data yang lalu. Jadi jika perusahaan tersebut ditinggal oleh manajer pemasaran karena gaji kecil, ga dapet THR, ga dihargai, dll, manajer baru tinggal memakai data lama untuk mengambil keputusan ke depan.

Sementara itu peramalan menggunakan data lama sebagai variabel masukan, biasanya periodik, perbulan atau pertahun, yang tentu saja banyak (tidak hanya satu tahun/bulan). Untuk kasus penentuan harga barang, JST bisa digunakan untuk meramalkan kenaikan harga di masa yang akan datang. Termasuk variabel-variabel yang sebelumnya jadi masukan juga bisa diramal untuk ikut andil memprediksi yang dikenal dengan istilah variabel intervensi (intervening). Berikut satu ilustrasi yang cukup baik dari referensi yang disebutkan di awal.

Jika diperhatikan ada lima input untuk memprediksi satu keluaran. Tentu saja jumlah input harus tetap, jika ketika pelatihan ada lima tahun sebelumnya untuk memprediksi, maka JST akan error jika hanya empat atau tiga masukan yang tersedia. Salah satu kehebatan JST dibanding regressi yang lain adalah dengan mudah dapat ditambah variabel intervensi seperti gambar berikut. Kalau di kasus contoh sebelumnya misalnya jumlah penjualan dan pesanan baru yang masuk.

Disebutkan bahwa jumlah variabel intervensi (intervention indicator) jangan terlalu banyak karena akan mengganggu masukan yang lain yang utama (data history periode yang lampau). Untuk penerepannya dapat Anda lihat di postingan saya yang lain. Untuk yang lagi skripsi atau tesis tentang peramalan, tetap semangat !!!

Referensi:

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.