Arsip Kategori: Artificial Neural Network

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.

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.

Proyeksi beberapa Time-series Secara Bersamaan

Postingan terdahulu membahas proyeksi data time-series yang berjumlah hanya satu. Jika data time-series tersebut banyak, apakah satu narxnet mampu menangani data yang lebih dari satu? Berikut ini akan kita coba. Buka Matlab dan tambahkan dua data serial yang mudah saja (minimal sepuluh buah). Data eksogennya adalah variable X, dari 11 sampai 20.

  • T=[1:10];
  • t=T*3; %contoh time-series kedua (kelipatan 3 dari T)
  • T=[T;t];
  • T=con2seq(T);
  • X=[11:20]; %variabel eksogen
  • X=con2seq(X); %variabel eksogen

Ada dua time-series satu hingga 10 sedangkan yang kedua kelipatan tiganya. Kita coba buat JST untuk dua data tersebut. T adalah gabungan dua time-series. Gunakan script berikut untuk merakit narxnet.

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

Tunggu sesaat hingga narxnet selesai melakukan pelatihan (training). Lanjutkan dengan kode berikut jika sudah selesai.

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

ans =

  • 3.0000 4.0000 5.0977 6.0064 7.0000 8.0000 9.0000 10.0000 11.1804
  • 9.0000 12.0000 15.7688 18.9107 21.0000 24.0000 27.0000 30.0000 32.6386

Jika dilihat hasilnya yang berwarna merah, tampak mendekati seharusnya yaitu 11 dan 33. Tigapuluh tiga di sini dari perkalian 3×11. Untuk multistep beberapa data ke depan sudah dibahas pada postingan sebelumnya. Apakah dengan GUI juga bisa? Kita coba, masuk ke ntstool.

Teruskan hingga selesai, dan jangan lupa menyimpan network yang dihasilkan, misalnya net1 (karena net sudah dibuat ketika mentraining non-GUI sebelumnya. Pastikan training berjalan dengan baik dan akurat.

Masukan kode berikut, seperti kode sebelumnya hanya saja “net” diganti dengan “net1” yang baru saja dibuat dengan GUI.

  • nets = removedelay(net1);
  • [xs,xis,ais,ts] = preparets(nets,X,{},T);
  • ys = nets(xs,xis,ais);
  • cell2mat(ys)

ans =

  • 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0002 10.0000 10.9972
  • 9.0000 12.0000 15.0000 18.0002 21.0000 24.0000 27.0008 30.0000 32.9884

Hasilnya adalah yang berwarna merah dan sepertinya tidak jauh berbeda dengan sebelumnya. selamat mencoba.

Peramalan Beberapa Data ke Depan dengan Multistep NARNET

Nonlinear Autoregressive Network (NARNET) merupakan metode peramalan dengan jaringan syaraf tiruan (JST). Untuk perakitannya Matlab menyediakan GUI melalui fungsi ntstool. Data minimal yang diperbolehkan untuk memprediksi sebanyak 10 buah. Untuk gampangnnya sebagai contoh data 1 sampai 10 seperti contoh-contoh sebelumnya. Lihat postingan tentang NARNET sebelumnya. Tanya-jawab seputar narnet masih hangat berlangsung di situs resmi Matlab ini.

>> T=1:10;

>> T=con2seq(T);

Gunakan tipe data sequence dengan fungsi con2seq. Latih dengan GUI hingga diperoleh performance yang bagus dengan seminim mungkin error (MSE) yang dihasilkan training. Contoh performa training dapat dilihat berikut:

Teruskan hingga diakhiri dengan menyimpan JST yang sudah dilatih dengan nama “net“. Buka editor, dan isi kode berikut ini dengan fungsi removedelay yang sudah dibahas pada postingan yg lalu, tetapi disini menggunakan kalang for-end untuk beberapa prediksi ke depan.

  • Told=T;
  • nets = removedelay(net);
  • result=[]
  • for i=1:10
  • [xs,xis,ais,ts] = preparets(nets,{},{},T);
  • ys = nets(xs,xis,ais);
  • T(1,end+1) = ys(1,end);
  • size(T)
  • T=T(2:end)
  • result=[result;ys(1,end)]
  • end
  • result=cell2mat(result)
  • figure
  • t=cell2mat(Told)
  • plot([t transpose(result)])

Namun hasilnya tampak kurang baik untuk data yang melebihi time series ke 12:

Sepertinya hanya dua prediksi ke depan yang akurat; memang time-series untuk peramalan membutuhkan data yang besar, sepuluh sepertinya tidak bisa diandalkan, apalagi hingga meramalkan seri ke-20. Mungkin men-training network dengan tambahan satu atau dua data baru hasil peramalan sebelumnya bisa jadi pilihan. Network tersebut kemudian digunakan untuk memprediksi satu atau dua data berikutnya. Kecuali mungkin untuk tipe narxnet dengan data exogenous mampu memprediksi lebih jauh ke depan.

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.

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.

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.

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?