Problematika Explore Database pada Matlab

Matlab terkini sudah memiliki fasilitas untuk mengeksplore suatu database. Hampir semua database dapat diakses dengan Matlab, khususnya yang berbasis Windows. Hanya saja ada sedikit permasalahan dengan kompatibilitas antara 64 bit dengan yang 32 bit. Berikut beberapa kemungkinan yang terjadi antara Windows, Matlab, dan Sistem database yang digunakan.

Baik Windows, Matlab dan Database 32 Bit atau 64 Bit

Untuk kasus ini tidak ada masalah yang berarti. Banyak tutorial yang membahas bagaimana mengkoneksikan database dengan Matlab dengan versi bit yang sama. Kebanyakan database dapat digunakan dengan menggunakan fasilitas Open Database Connectivity (ODBC) bawaan Windows. Link youtube ini cukup baik menjelaskan bagaimana mengkoneksikan database ke Matlab 64 bit.

Windows 64 Bit, tetapi Matlab dan Database 32 Bit

Untuk kasus ini ada sedikit masalah ketika mengeset ODBC karena driver yang tidak muncul. Untungnya Windows 64 bit masih memberikan fasilitas untuk mengelola ODBC versi sebelumnya (ODBC 32 bit). Cara mudahnya adalah dengan mengetik: odbcad32 di menu RUN. Letak file ‘odbcad32.exe’ ada di: C:\Windows\SysWOW64\odbcad32.exe.

Windows dan Matlab 64 Bit, tetapi database 32 Bit

Masalah ini banyak ditanyakan oleh pengguna di internet. Hampir semua jawaban tidak memuaskan, bahkan ketika ditanyakan ke pihak Microsoft. Kebanyakan kasusnya adalah user menginstall microsoft access 32 bit sebagai database tetapi memiliki Matlab versi 64 bit, misalnya Matlab 2013b.

Dikatakan bahwa DSN pada ODBC yang dibuat tidak matching antara arsitektur dengan driver aplikasi. Saran yang paling ampuh adalah menginstall ulang Microsoft Access dengan versi yang sama dengan Matlab tersebut (versi 64 bit). Matlab sendiri menganjurkan menggunakan 64 bit karena memiliki keunggulan tersendiri dalam penggunaan RAM maksimalnya (melebihi 3 Gb).

Menggunakan Database non Microsoft

Sebenarnya saya mencari driver yang bisa menambahkan driver access di kolom isian driver 64 bit. Ternyata selalu saja ada instruksi error bahwa access yang diinstall tidak 64 bit. Jika enggan menguninstall office 32 bit, ada alternatif database lain yang bisa digunakan yaitu MySQL. Ketika menginstall ODBC untuk MySQL maka di driver pada ODBC 64 bit muncul driver baru seperti di bawah ini.

Tampak MySQL ODBC 5.3 pada driver. MySQL sendiri dapat menggunakan aplikasi XAMM yang ringan karena Apache tidak selalu “ON” ketika tidak digunakan. Untuk menjalankannya tinggal men-doble klick XAMM start di explore.

Untuk mengujinya silahkan menggunakan fasilitas dexplore pada Matlab dengan mengetikannya di command window. Tekan “connect” yang terletak di kiri atas Matlab (atau otomatis akan meminta koneksi ke ODBC yang diinginkan). Pilih ODBC yang sudah dibentuk sebelumnya dengan pilihan driver MySQL.

Kemudian pastikan tampak fields yang ada di tabelnya. Silahkan yang suka “ngetik coding” di command window mengecek apakah koneksi sudah berjalan seperti berikut ini.

Pastikan isconnection bernilai “1” yang menandakan bahwa database telah berhasil terkoneksi ke Matlab anda. Selamat mencoba dan semoga bermanfaat.

NB: Silahkan beli buku yang disertai source code untuk melakukan komputasi dengan Matlab yang terintegrasi dengan database (access dan mysql), online maupun di toko buku Gramedia (semoga stok masih ada): https://www.gramedia.com/pemrograman-basis-data-di-matlab-cd.html.

Curve Fitting dengan Matlab

Curve fitting artinya membuat sebuah kurva dari rentetan titik. Kurva yang dihasilkan berupa persamaan linear ataupun non linear (matlab menyediakan quadratic hingga polinomial pangkat sembilan). Silahkan lihat post sebelumnya untuk membedakannya dengan interpolasi. Biasanya dijumpai ketika praktikum yang menguji satu variabel dengan perbedaan perlakuan tertentu. Saya sendiri menjumpai pertama kali kasus ini ketika praktikum fisika dasar di tingkat pertama kuliah. Hasilnya pun hanya dengan menarik garik lurus (linear) terhadap serangkaian titik hasil uji coba tersebut.

Matlab menyediakan toolbox dengan nama “cftool” yang dapat diakses dengan mengetik fungsi tersebut di command window. Misalnya kita memiliki serangkaian data sebagai berikut:

  • data =
  • 19.8960
  • 16.9290
  • 15.6660
  • 19.8870
  • 17.9100
  • 18.4260
  • 18.9570
  • 18.7710
  • 15.4860
  • 17.1510
  • 15.3210
  • 18.2580
  • 17.8860
  • 13.7100
  • 17.6040
  • 16.7610
  • 15.8880
  • 16.6200

Langkah pertama adalah memasukan data tersebut ke dalam cftool. Tekan tombol “data” untuk memunculkan jendela data.

 

Karena data hanya satu seri, isi dengan data x atau data y. Saya coba keduanya ternyata hasilnya sama karena memang datanya hanya satu seri. Setelah menekan “create data set” maka toolbox akan terisi data tersebut. Kembali ke jendela “cftool” tekan “Fitting” untuk memulai proses curve fitting. Muncul jendala baru untuk mengisi parameter-parameter yang sesuai (linear / non linear).

Setelah memasukan jenis polinomialnya, lanjutkan dengan menekan “Apply“. Hasil polinomialnya tampak dalam kolom “Result” dan grafiknya dapat dilihat di jendela “Cftool“.

 

Hasil di kolom result dapat dilihat. Parameter yang dihasilkan adalah konstanta persamaan linear beserta parameter-parameter lainnya seperti Goodness of fit, SSE, R-square, dan lain-lain yang dapat dilihat dari pelajaran statistik. Silahkan coba untuk korelasi dua variabel.

  • Linear model Poly1:
  • f(x) = p1*x + p2
  • Coefficients (with 95% confidence bounds):
  • p1 = -0.1403 (-0.2877, 0.007083)
  • p2 = 18.62 (17.02, 20.21)
  • Goodness of fit:
  • SSE: 37.47
  • R-square: 0.2029
  • Adjusted R-square: 0.1531
  • RMSE: 1.53

Epoch, Iteration, dan Stop Condition

Perkembangan Soft-computing menciptakan istilah-istilah baru yang sebelumnya belum pernah ada. Hal ini terjadi karena soft computing mengadopsi istilah-istilah lain. Sebagai contoh dalam algoritma genetika, istilah-istilah mutasi, kromosom, dan istilah-istilah yang berasal dari teori genetik dan evolusi menjadi istilah dalam ilmu komputer. Bahkan algoritma yang sudah sejak lama digunakan sudah bergeser ke arah metode. Metode lebih general dibanding algoritma yang lebih spesifik dan penerapan khusus. Jika Anda perhatikan algoritma genetika, beberapa tulisan menulisnya dalam bahasa Inggris dengan Genetic Algorithms dengan tambahan “s” di belakang algoritma. Hal ini karena algoritma genetika melibatkan beberapa algoritma seperti roulette wheel, encoding ke bits string dan sebaliknya (decoding), dan lain-lain. Namun beberapa buku tidak menambahkan “s” di belakang algoritma (Genetic Algorithm) dengan anggapan bahwa algoritma genetika adalah satu metode.

Beberapa rekan menanyakan istilah terkenal dalam machine learning yaitu “Epoch”. Banyak yang mengartikannya dengan iterasi. Tetapi mengapa tidak mengambil istilah iterasi saja? Jawabannya berasal dari training artificial neural network. Salah satu metode training, yaitu propagasi balik (backpropagation), menggunakan istilah epoch karena ketika melakukan satu kali iterasi dilakukan dengan rambatan balik. Untuk gampangnya, misalnya satu iterasi melibatkan proses a-b-c-d, maka epoch dalam satu “iterasi”-nya (dengan istilah satu kali epoch) melibatkan a-b-c-d-c-b-a. Dua iterasi: a-b-c-d-a-b-c-d, sementara dua epoch: a-b-c-d-c-b-a-b-c-d-c-b-a. Atau gampangnya iterasi itu epoch tanpa rambatan balik (hanya maju saja).

Beberapa rekan juga menanyakan metode yang cocok untuk stop condition. Untuk iterasi, sejak dulu kita sudah mengenal dengan error atau delta error. Jika error antara satu iterasi dengan iterasi berikutnya cukup kecil maka proses perhitungan berhenti. Error yang saat ini sering digunakan adalah Mean Square Error. Silahkan gunakan metode lain, misalnya Gradient Descent dengan prinsip kemiringan. Kemiringan diambil dari posisi saat ini dibanding epoch maupun iterasi sebelumnya. Jika masih besar selisihnya berarti masih miring. Ibaratnya kendaraan beroda jika masih miring masih bergerak turun, sementara jika sudah tidak begitu miring jalanan-nya, kendaraan itu bergerak perlahan, dan walaupun belum berhenti, dalam komputasi sudah dihentikan demi efisiensi. Untuk prakteknya perhatikan grafik hasil pelatihan jaringan syaraf tiruan di akhir prosesnya. Teringat saya ketika presentasi hasil penelitian di kampus. Karena reviewer adalah doktor dari FAI mempertanyakan mengapa perlu “pelatihan” karena buang-buang waktu dan biaya (dikiranya pelatihan JST itu: pelatihan/kursus/workshop).

Melihat Data Network Hasil Training JST – Versi GUI

Pada postingan yang lalu telah dibahas cara mengetahui hasil training Jaringan Syaraf Tiruan (JST) dengan command window. Begitu juga bagaimana mengupdate salah satu parameternya, misalnya bias dan bias, sudah dibahas. Tetapi beberapa pembaca sepertinya agak kesulitan dengan instruksi-instruksi lewat command window. Oleh karena itu di sini akan dibahas cara yang jauh lebih mudah yaitu dengan “nntool”, salah satu GUI bawaan Matlab untuk merakit JST.

Sebenarnya masalah ini muncul ketika saya mencari kembali hasil training JST untuk peramalan (lihat post peramalan dengan JST di sini). Masalah yang sering dijumpai adalah “lupa”, karena banyaknya yang harus dikerjakan terkadang membuat seseorang lupa. Untungnya saya aktif menulis, tinggal masukan kata kunci di kolom “search” blog, catatan terdahulu yang dicari langsung ketemu. Jadi blog itu seperti catatan yang disimpan di “awan (cloud)” yang bisa diakses di mana saja dan kapan saja. Buka Matlab dan ketik nntool di command window.

Sebelumnya load terlebih dahulu Mat-file hasil training yang berisi variabel-variabel network. Di sini saya ada 7 variabel network yang saya sendiri lupa konfigurasinya. Setelah menekan “Import” di nntool maka muncul pilihan variabel yang akan dilihat. Ambil salah satu variabel hasil loading yang ada di workspace Matlab, dilanjutkan dengan kembali menekan Import setelah memilihnya.

Tekan Ok ketika ada informasi bahwa netwok telah berhasil diimpor. Tutup lagi sementara jendela Import to network/Data Manger. Perhatikan nntool kini telah muncul Network1 hasil impor. Untuk melihat isi dari variabel itu dobel klik saja di variabel tersebut.

Sebenarnya gambar di atas sudah cukup untuk mengetahui struktur JST yang telah dilatih dahulu. Misalnya input yang berjumlah 4 variabel dengan 1 keluaran. Hidden layer yang terletak di tengah tampak berjumlah sembilan. Gambar di atas khusus untuk Matlab versi 2013 ke atas, sementara Matlab versi yang terdahulu tidak memunculkan informasi tentang neuron-neuronnya. Silahkan tekan View/Edit Weights jika ingin melihat konfigurasi bobot-bobotnya. Kebetulan saya memiliki 4 variabel data yang akan dicoba prediksi dengan JST tersebut. Atau jika tidak ada, buat saja sendiri di command window. Tambahkan data input di nntool.

Tekan tombol Simulate pada network untuk memprediksi. Cara ini bisa juga dengan command window lewat instruksi sim.

Ada pesan untuk melihat nntool karena hasilnya dikirim ke sana. Jika sudah kembali ke nntool, tekan dua kali Output. Tampak hasilnya.

Sepertinya dengan nntool tidak banyak mengetik, alias tinggal klak-klik mouse saja. Jadi dengan empat masukan pada data akan menghasilkan satu keluaran (0.48). Di sini sebaiknya kita menggunakan normalisasi data, kalau bisa normal Euclidean, karena matrix yang dibuat dengan normal euclidean ortogonal yang disukai JST.

Cluster Data dari ArcGIS ke Matlab

Postingan kali ini bermaksud mencoba membuat video tutorial bagaimana mengkluster data dari arcgis dengan software matlab. Iseng-iseng dengan pengisi suara dari translate google, ternyata oke juga. Hasilnya pun lumayan jelas dibanding saya yang ngomong .. haha.

Ada dua kandidat software perekam yang digunakan yaitu ‘screen-o-matic’ dan ‘microsoft expression’ yang keduanya gratis untuk menggunakannya. Hanya saja microsoft expression kali ini unggul karena bisa merekam suara dari ‘translate google’ dan saya belum berhasil dengan ‘screen-o-matic’ yang unggul jika ingin ada cam-nya. Silahkan lihat videonya.

Ups .. ternyata terpotong karena lebih 10 menit. Hasilnya adalah berikut ini.

Grafik Curve Fitting pada Matlab

Banyak tools untuk membuat grafik, salah satunya adalah Microsoft Excel. Berikut ini contoh bagaimana suatu data dikonversi menjadi grafik berbentuk interpolasi. Cara mudahnya sebagai berikut: setelah men-sort data isian, pilih insert dan pilih grafik yang sesuai, dalam hal ini scatter dengan line.

Grafik itu menurut saya sudah baik, akan tetapi untuk dipublikasi dalam suatu jurnal ada baiknya membuat dengan format lain, salah satunya adalah Matlab. Fungsi yang digunakan adalah fungsi fit dilanjutkan dengan plot (lihat subplot untuk membuat lebih dari satu grafik pada postingan yang lalu). Buka matlab dan pindahkan tahun dan nilai ke workspace. Metode interpolasi yang cocok seperti di excel ternyata ‘pchipinterp’.

  • >> tahun=[2000;2010;2015;2017];
  • >> nilai=[2;5;9;4];
  • >> curvefit=fit(tahun,nilai,’pchipinterp’)
  • curvefit =
  • Shape-preserving (pchip) interpolant:
  • curvefit(x) = piecewise polynomial computed from p
  • Coefficients:
  • p = coefficient structure

Pastikan curvefit (bisa dengan nama lain) berhasil dibentuk. Lanjutkan dengan plotting dengan fungsi plot (lihat help untuk lebih jelasnya bagaimana menggunakan fungsi ini):

  • >> plot(tahun,nilai,’*’);
  • >> hold
  • Current plot held
  • >> plot(curvefit)

Hasilnya dapat dilihat pada gambar berikut.

Oiya, jangan printscreen gambar di atas untuk jurnal, lebih baik gunakan versi printing supaya hasilnya standar seperti di bawah ini (tekan simbol printer di menu). Semoga bermanfaat.

Membersihkan Layar dan Variabel Pada Command Window Matlab

Command window pada Matlab adalah jendela utama. Jendela ini sudah ada sejak kemunculan Matlab pertama kali di tahun 80-an.

(Dari berbagai sumber)

Ketika sampai bawah dan tulisan yang di atasnya mengganggu, untuk kenyamanan dapat dibersihkan dengan instruksi tertentu. Dua instruksi yang penting tapi terkadang belum diketahui oleh pengguna awal Matlab antara lain adalah clc dan clear.

1. CLC

Perintah/instruksi ini untuk membersihkan layar, mirip dengan cls pada comman prompt window (cmd). Variabel yang ada di workspace tidak ikut ‘bersih’ dengan instruksi ini.

2. CLEAR

Perintah/instruksi ini bermaksud membersihkan variabel yang ada diworkspace. Untuk menguji silahkan masukan satu variabel di matlab, misal >>a=2. Tampak di workspace muncul variabel ‘a’ dengan informasi jenis datanya di kolom berikutnya. Ketika ditulis clear pada command window maka variabel ‘a’ tidak ada lagi di workspace. Selain dengan clear workspace juga bersih ketika Matlab dimatikan (off) baik sengaja maupun karena kegagalan sistem (error).

Postingan ini sederhana tetapi uniknya saya mengerti instruksi “clc” ketika kuliah AI-Neuro Fuzzy. Rekan kuliah dari Thailand memberitahu instruksi tersebut, padahal saya belajar Matlab otodidak sejak 1999 setelah belajar Fortran (artinya 14 tahun .. he he). Beruntunglah rekan-rekan yang saat ini sudah ada google, youtube, blog, dan sumber-sumber informasi lainnya.

Matrix Manipulation Using Matlab Looping Function

Matrix manipulation is the power of Matlab. That’s why Matlab stands for Matrix Laboratory (not Mathematics laboratory). This software easily calculates many Matrix operation that difficult for other languages (c++, java, etc.). In addition, Matlab not only operates through its function but also uses looping tools similar to other language, i.e. ‘for-next’, ‘while-do’, etc. One of my best friends studying in Australia discussed about how to manipulate Matrix efficiently weeks ago. For example we have a matrix:

And we have another matrix, B=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15];

The question is how to create matrix C which contains column elements in B for every even number of column in A. Of course we can create manually based on the B value, but the problem is when the number of Matrix A and B are thousands, e.g. coordinates. In Matlab we are allowed to use “for-next” instruction to manipulate a matrix.

  • >> C=A;
  • for i=1:10
  • [rows cols]=size(B);
  • if cols>=i
  • C(:,2*i)=B(:,i);
  • end
  • end

The script will give the result:

Use function “size” to know maximum column of A and B. Of course you can try to create the other algorithms for this purpose. Tq

Mengekspor Bobot dan Bias ke Network JST

Cukup lama juga tulisan saya tentang “Seputar Jaringan Syaraf Tiruan” yaitu enam tahun yang lalu. Salah satu komentar yang cukup menarik adalah tentang bagaimana komponen JST yang berfungsi training mengirimkan hasil trainingnya (bobot dan bias) ke network JST agar bisa dipergunakan oleh aplikasi web-based yang memiliki JST di dalamnya. Sedikit berbeda dengan publikasi saya tentang Web-GIS yang baik training maupun simulating berada di desktop-GIS (Fig.1).

Dengan memanfaatkan fasilitas training JST Matlab, kita dapat mengetahui bobot dan bias hasil training yang telah dilakukan (lihat postingan sebelumnya mengenai cara membaca hasil pelatihan JST). Dengan memanfaatkan cara membaca bias dan bobot, kita dapat mengirimkannya ke JST yang telah dirakit terlebih dahulu. Postingan kali ini bermaksud sama-sama berdiskusi mengenai teknik untuk mengirimkan bias dan bobot hasil training ke JST yang ada.

A. Training JST dengan fungsi newff

Agar lebih gampang, contoh training dapat dilihat di help matlab (ketik saja help newff di command window Matlab). Atau copas script berikut ini:

  • load simplefit_dataset
  • net = newff(simplefitInputs,simplefitTargets,20);
  • net = train(net,simplefitInputs,simplefitTargets);
  • simplefitOutputs = sim(net,simplefitInputs);

Setelah enter ditekan, jendela pelatihan akan muncul seperti gambar di bawah ini. Tunggu sesaat hingga proses pelatihan selesai dijalankan.

B. Latihan Meng-update bobot JST Hasil Pelatihan

Untuk melihat variabel-variabel hasil pelatihan, kita dapat lakukan dengan menekan net di command window (jika variabel JST-nya “net” dan jika tidak, sesuai dengan namanya, biasanya network1 (default) jika dibuat di nntool).

  • sim(net,94)
  • ans =
  • 4.9494
  • Jawaban1=ans

Kode di atas adalah hasil awal JST ketika diberi masukan “94”, yaitu sebesar 4.9494. Berikutnya kita misalnya telah melakukan training lagi dengan data yang lebih baru dan akan meng-update dengan data baru. Sementara data yang lama adalah sebagai berikut:

  • >> net.IW
  • ans =
  • [20×1 double]
    • []
  • >> cell2mat(ans)
  • ans =
  • 28.3617
  • 27.9082
  • -27.8863
  • 26.6165
  • 23.2698
  • -15.0705
  • -20.3582
  • 22.0298
  • 28.3998
  • 28.0369
  • -27.9783
  • 27.8605
  • 27.8120
  • -27.7361
  • 28.0819
  • -28.8486
  • -29.2218
  • 26.3938
  • 26.8540
  • 28.1526
  • IWW=ans;

Di sini kita bisa mencoba melatih JST dengan data latih baru. Tetapi untuk gampangnya, sebagai perbandingan saja, misalnya IW di baris pertama misalnya “nol” (berwarna merah pada IW di atas). Insert dengan kode berikut:

  • IWW(1,1)=0

Sehingga baris pertama IW menjadi nol. Kembalikan variabel “mat” di atas menjadi “cell” mengingat bobot di Matlab adalah dalam bentuk cell.

  • IWWnew=mat2cell(IWW)
  • net.IW(1,1)=IWWnew

Di sini variabel baru IWWnew (konversi mat menjadi cell) disisipkan di net.IW yang merupakan bobot input JST.

  • >> sim(net,94)
  • ans =
  • 4.0079
  • Jawaban2=ans

Di sini kita uji dengan data test yang sama dengan sebelumnya (“94”), hasilnya ternyata berbeda dengan sebelumnya.

  • >> [jawaban1;jawaban2]
  • ans =
  • 4.9494
  • 4.0079

Perhatikan Jawaban1 dan Jawaban2 yang berbeda. Artinya JST sudah berubah karena update bobot di bagian input (net.IW). Untuk bias dan bobot sisi hidden layer dapat dilakukan dengan cara yang sama. Untuk mengirimkannya lewat mekanisme database, ada baiknya membaca buku yang telah kami tulis sebelumnya. Selamat mencoba.

Perbandingan NARXNET dengan NNTOOL untuk Peramalan Data Time-Series

Narnet merupakan penerapan neural network untuk prediksi data time series. Berbeda dengan prediksi data biasa yang mengandalkan atribut/variabel, prediksi data time series, atau dikenal dengan istilah proyeksi (projection), hanya mengandalkan riwayat data sebelumnya (historical data). Maka neural network untuk prediksi menjadikan data sebelumnya sebagai atribut yang digunakan saat pelatihan (training) maupun prediksi (simulating). Sementara itu, muncul Narxnet dengan istilah “x” yang berarti variabel eksternal (external). Variabel ini oleh matlab diberi istilah “external input” atau ada juga yang menyebut dengan istilah “intervention indicators” (lihat situs ini). Variabel ini tidak terlibat sebagai variabel yang berasal dari time series tetapi dijadikan variabel prediksi. Postingan yang lalu sepertinya cukup baik menjelaskan teknik ini.

Matlab telah memberikan layanan toolbox untuk penerapan Narxnet baik yang berbasis GUI maupun command. Yang berbasis command sepertinya lebih baik karena dapat digunakan untuk data berukuran kurang dari lima. Masalah yang sering muncul adalah akurasi hasil pelatihan ketika memprediksi data ke depan. Memang dapat dilakukan pelatihan ulang, tetapi tetap saja menjadi ragu-ragu untuk diterapkan, apalagi kesalahan yang terjadi bukan hanya dari sisi besaran melainkan arahnya (harusnya naik malah turun). Coba kita praktekan dengan data sederhana agar lebih mudah diketahui error-nya.

Data di atas merupakan data yang terdiri dari data time series dari satu sampai lima dan external input dari seribu hingga 1060. Kita diminta membuat Narxnet, melatihnya, dan memprediksi data setelah lima (tentu saja hasilnya dapat ditebak yaitu 6 dan 7). Listing berikut menggunakan toolbox Narxnet di Matlab. Atau buka panduannya dengan mengetik help narxnet di command window dan isi data time series dengan nama variabel t dan external input dengan nama variabel x. Jangan lupa tipe data yang digunakan adalah sequence.

  • t={1 2 3 4 5};
  • x={1000 1010 1020 1030 1040};
  • net = narxnet(1:2,1:2,10);
  • [X,Xi,Ai,T] = preparets(net,x,{},t);
  • net = train(net,X,T,Xi,Ai);
  • view(net)
  • Y = net(X,Xi,Ai)
  • perf = perform(net,Y,T)

Hasil training dapat dilihat pada gambar berikut (kiri) dan tampilan hasil Narxnet (kanan). Ada 7 plot yang tersedia untuk melihat kinerja pelatihan antara lain: performance, training state, error histogram, regression, time series response, error autocorrelation, dan input-error cross-correlation.

Step-Ahead Form

Step-Ahead form sering digunakan pada Nernet yang tanpa menggunakan External input. Perhatikan kode yang dicetak tebal di atas. Delay yang digunakan pada gambar di atas adalah 1 langkah. Fungsi yang diperlukan adalah fungsi Remove delay.

  • nets = removedelay(net);
  • view(net)
  • [Xs,Xis,Ais,Ts] = preparets(nets,x,{},t);
  • Ys = nets(Xs,Xis,Ais)
  • Ys =
  • [3.0000] [4.0000] [5.0000] [4.2465]

Hasilnya kurang menggembirakan, seharusnya 6.0000 tapi malah turun (4.2465). Salah satu cara untuk memperbaikinya adalah melakukan pelatihan ulang hingga diperoleh hasil yang memuaskan.

Multistep Prediction

Untuk Narxnet, ada pilihan lain yaitu Multistep prediction. Metode ini mengandalkan keunggulan dari external input. Makin banyak external input makin baik tetapi tentu saja persoalan berubah dari proyeksi menjadi prediksi biasa, dan data time series jadi tidak signifikan lagi manfaatnya.

Prinsip kerjanya adalah menggunakan lingkar terbuka (open loop) untuk merakit Narxnet dari data yang tersedia kemudian merubahnya menjadi lingkar tertutup (closed loop). Narxnet yang sudah dalam bentuk lingkar tertutup kemudian digunakan untuk memprediksi hanya berdasarkan data external input. Kembali ke kasus di atas, dengan Multistep prediction Narxnet dibagi menjadi dua segmen yaitu segmen dengan target/output yang diketahui dan yang hanya diketahui external input-nya saja (x). Di sini time stap yang tersedia hanya dua yaitu data keenam (1050) dan ketujuh (1060). Gunakan t yang sama dengan kasus sebelumnya, tetapi dengan x yang ditambah dengan dua data sebagai dasar patokan untuk memprediksi t.

  • x={1000 1010 1020 1030 1040 1050 1060};
  • numTimesteps = size(x,2);
  • knownOutputTimesteps = 1:(numTimesteps-5);
  • predictOutputTimesteps = (numTimesteps-4):numTimesteps;
  • x1 = x(1,knownOutputTimesteps);
  • t1 = t(1,knownOutputTimesteps);
  • x2 = x(1,predictOutputTimesteps);

Perhatikan penggunaan fungsi closeloop untuk membuat lingkar tertutup dari network yang telah dilatih sebelumnya.

  • [Xo,Xio,Aio,To] = preparets(net,x1,{},t1);
  • [Y1,Xfo,Afo] = net(Xo,Xio,Aio);
  • [netc,Xic,Aic] = closeloop(net,Xfo,Afo);
  • [Y2,Xfc,Afc] = netc(x2,Xic,Aic);

Hasilnya disimpan dalam variabel Y2 yakni [4.2465] dan [0.2789]. Sangat tidak akurat dan harus dilatih ulang. Untuk mengulangnya tinggal copy-paste lagi kode-kode di atas. Berikut untuk training kedua:

  • Y2 =
  • [3.0000] [4.0000] [5.0000] [7.2076] [8.8717]

Masih kurang akurat (terlalu besar). Berikut ini akan dicoba tidak dengan Narxnet melainkan NNTOOL seperti biasa apakah hasilnya lebih baik?

Prediksi Data Time Series dengan NNTOOL

Seperti dibahas di awal, data deret waktu yang lampau dijadikan variabel untuk memprediksi data berikutnya. Variabel external input ditambahkan sebagai data eksternal. Gunakan data berikut ini untuk training. Terus terang saya agak kagok dengan format kolom nntool, saya lebih suka format baris seperti tabel biasa, jadi saya menggunakan transpose setelah memasukan data dengan format baris agar berganti kolom yang sesuai dengan nntool.

  • data=[1 2 1020; 2 3 1030; 3 4 1040];
  • data=transpose(data);
  • target=[3;4;5];
  • target=transpose(target);

Panggil fungsi nntool untuk membuka GUI perancangan neural network (lebih jelasnya lihat postingan JST). Perhatikan penggunaan fungsi PURELIN agar neural network mampu memprediksi nilai yang diluar rentang data pelatihan.

Hasil pelatihan disimpan dengan nama network1 yang akan digunakan untuk memprediksi data yang akan datang. Dengan menggeser (shifting window) satu persatu, diperoleh data keenam dan ketujuh sebagai berikut.

  • dataenam=[4 5 1050];
  • dataenam=transpose(dataenam);
  • proj6=sim(network1,dataenam)
  • proj6 =
  • 6.0000
  • datatujuh=[5 6.0000 1060];
  • datatujuh=transpose(datatujuh);
  • proj7=sim(network1,datatujuh)
  • proj7 =
  • 7.0000

Perhatikan, hasilnya sangat akurat yaitu data keenam dan ketujuh berturut-turut 6.0000 dan 7.0000 hanya dengan sekali proses pelatihan. Itulah mengapa saya lebih suka menggunakan NNTOOL untuk meramalkan data baik dengan maupun yang tanpa external input. Problem ini sudah saya coba baik dengan Matlab 2008b maupun Matlab 2013. Mohon masukan dari pembaca.

NARXNET Untuk Data Kecil

Seperti sudah ditulis postingan sebelumnya bahwa narxnet dengan GUI tidak bisa untuk data deret waktu yang berjumlah kurang dari sepuluh. Memang masuk akal karena proyeksi sebaiknya menggunakan data sebanyak mungkin agar dihasilkan akurasi yang tinggi. Bagaimana jika datanya hanya sedikit, misalnya lima seperti berikut ini, untuk mengisi tanda tanya tersebut?

Untungnya narxnet dengan GUI bisa digunakan untuk data yang kurang dari sepuluh. Atau gunakan teknik lain yaitu dengan menyisipkan data di sela-sela data yang sedikit tersebut dengan metode interpolasi (lihat postingan sebelumnya untuk membedakan proyeksi, prediksi, dan interpolasi).

NARNET Untuk Data Kecil (Non-GUI)

Untuk data yang besar, GUI pada NARNET, lihat tulisan sebelumnya, dapat dijadikan andalah untuk peramalan data deret waktu (time series). Tetapi jika data kurang dari sepuluh, GUI menolak untuk memprosesnya. Untungnya NARNET dengan command window masih dapat dilakukan meskipun datanya berukuran kecil. Siapkan data berikut ini:

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

Data yang digunakan berjumlah lima buah. Data ini kemudian dikonversi menjadi data sequence dengan instruksi con2seq. Siapkan network dengan nama misalnya, “net” dengan fungsi narnet. Jumlah neuron yang digunakan misalnya 10 dan delay 2. Fungsi preparets dan train berturut-turut berfungsi untuk menyiapkan parameter-parameter pelatihan dan melatih network yang sudah disiapkan sebelumnya.

  • net=narnet(1:2,10);
  • [x,xi,ai,t] = preparets(net,{},{},T);
  • net = train(net,x,t,xi,ai);

Latih ulang jika hasil pelatihan di atas dirasa kurang memuaskan. Selain melihat performance sebaiknya lihat grafiknya dengan menekan tab performance dan juga regression. Contohnya adalah hasil regresi pada grafik berikut ini menunjukan data yang “fit” dengan persamaan regresi bentukan NARNET.

Berikutnya adalah memprediksi data keenam dan seterusnya. Fungsi yang digunakan adalah removedelay sebagai berikut:

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

    [2140750.10017932] [2174736.34212479] [2732810.26058797] [2846162.67542468]

Variabel ys memunculkan empat data dimana data yang terakhir adalah data prediksi. Format longg sengaja digunakan agar format angkanya tidak berpangkat. Bila ragu dengan hasil peramalan, latih dan prediksi lagi saja. Berikutnya untuk memperoleh data ketujuh, libatkan data keenam pada pelatihan NARNET. Selamat mencoba.

Membuat Multi Grafik dengan Matlab

Maksud dari multi grafik (multiplot) di sini adalah satu gambar (figure) menampilkan lebih dari satu grafik. Matlab memiliki fasilitas untuk menangani multi grafik yaitu dengan fungsi subplot. Untuk memudahkan prakteknya, kita gunakan data seperti postingan sebelumnya.

  • Data=[0.1372 0.5860 0.1428; 0.1394 0.5811 0.1434; 0.1333 0.5906 0.1460];
  • X=Data(:,1);Y=Data(:,2);Z=Data(:,3);

Format dari subplot adalah jumlah baris, jumlah kolom, dan nomor subplot. Di sini nomor subplot dimulai dari kiri atas kekanan dan ke bawah. Misalnya kita akan merencanakan grafik dengan dua baris, tiga kolom, dan grafik pertama (nomor satu).

  • subplot(2,3,1)
  • subplot(2,3,2)
  • subplot(2,3,3)
  • subplot(2,3,4)
  • subplot(2,3,5)
  • subplot(2,3,6)

Secara sederhana, instruksi di atas adalah membuat enam grafik kosong seperti gambar di bawah ini. Untuk menambah deskripsi judul grafik, sumbu koordinta, dapat dilihat pada postingan yang lalu.

Misalnya kita akan mengisi subplot pertama yang terletak di kiri atas dengan grafik 3D dan subplot tengah bawah dengan grafik 2D yang berisi x, dan y saja.

  • subplot(2,3,1)
  • plot3(X,Y,Z)
  • grid
  • title ‘grafik 3D’
  • subplot(2,3,5)
  • plot(X,Y,’*’)
  • grid
  • title ‘contoh grafik 2D’

Hasilnya dapat dilihat di bawah ini. Silahkan isi grafik-grafik lainnya. Semoga dapat sedikit membantu, selamat mencoba.

Membuat Grafik 3D dengan Matlab

Grafik 3D sangat penting untuk menggambarkan bidang atau sekedar menampilkan titik yang terdiri dari tiga koordinat. Postingan kali ini bermaksud membuat grafik/plot 3D dengan menggunakan software Matlab. Buka Matlab dan masuk ke command window. Data yang digunakan untuk contoh adalah data berikut ini:

Data=[ 0.1372 0.5860 0.1428; 0.1394 0.5811 0.1434; 0.1333 0.5906 0.1460];

Dengan data tersebut kita coba untuk membuat grafik 3D-nya. Grafik 3D pada matlab dapat dibuat dengan menggunakan fungsi plot3. Tiga sumbu X, Y, dan Z pada di atas adalah berturut-turut kolom pertama, kedua, dan ketiga. Untuk itu perlu terlebih dahulu direpresentasikan dalam command window.

  • X=Data(:,1);Y=Data(:,2);Z=Data(:,3);
  • plot3(X,Y,Z)

Muncul grafik 3D yang masih sederhana. Anda dapat menggeser-geser ke atas, bawah, dan merotasi.

Untuk menambahkan atribut lainnya dapat dibuat dengan fungsi-fungsi tambahan antara lain: 1) xlabel, 2) ylabel, 3) zlabel, dan 4) title. Serta tambahan untuk membuat garis bantu grid.

  • title ‘contoh grafik 3D’;
  • xlabel ‘data X’;
  • ylabel ‘data Y’;
  • zlabel ‘data Z’;
  • grid

Sangat mudah untuk diterapkan. Jika ingin dijadikan sumber grafik di jurnal, ada baiknya tidak menggunakan print screen dari gambar di atas yang memang tidak dirancang untuk tampilan cetak. Tekan simbol printer di bagian menu jika ingin menampilkan presentasi hasil hanya berupa grafik 3D tanpa simbol-simbol dan menu. Cetak menjadi pdf atau jpg dengan bantuan software yang banyak beredar di pasaran. Tampilan hasilnya dapat dilihat pada gambar di bawah ini, selamat mencoba.

Display Format for Numeric Value in Matlab

I have just interpolated a time-series data to fill the missing values in Matlab. The function interp1 did that task well, but I did not like the number format which was not in ordinary form. (See how to interpolate in Matlab)

Since I wanted to copy the result to Excel worksheet, the result format was difficult to capture. But Matlab provides the format function for converting a number format into another (see Matlab official site). To see the available format, come into Matlab help by typing help format in command window. Here is the format with the result samples:

1. Format SHORT (Scaled fixed point format with 5 digits)

2. Format LONG (Scaled fixed point format with 15 digits for double and 7 digits for single)


3. Format SHORTE (Floating point format with 5 digits)


4. Format LONGE (Floating point format with 15 digits for double and 7 digits for single)


5. Format SHORTG (Best of fixed or floating point format with 5 digits)


6. Format LONGG (Best of fixed or floating point format with 15 digits for double and 7 digits for single)


7. Format SHORTENG (Engineering format that has at least 5 digits and a power that is a multiple of three)


8. Format LONGENG (Engineering format that has exactly 16 significant digits and a power that is a multiple of three)


Hmm, I prefer to use no. 6, FORMAT LONGG, because it is easy to understand. However, the other might be better, it depends on your computation problem.