Menormalkan Data Untuk Range Sempit

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

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

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

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

 

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

Referensi

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

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

 

Iklan

Simulasi Membutuhkan Bilangan Random

Simulasi mencoba menjalankan suatu model seolah-olah mengikuti kenyataan yang ada. Simulasi banyak diterapkan dalam permainan. Misalnya pemain bola, C. Ronaldo, dalam game memiliki akurasi tinggi dalam mencetak gol, tetapi tentu saja tidak selalu tendangannya akurat, seperti kenyataan di lapangan sesungguhnya. Jadi ketika pemain tersebut mengeksekusi, program harus membangkitkan suatu bilangan acak dalam rentang akurasinya sehingga bisa saja tendangannya (misal pinalti) tidak berhasil.

Fungsi “rand” di Matlab

Salah satu fungsi di Matlab yang membangkitkan bilangan random adalah fungsi rand. Fungsi ini membangkitkan bilangan acak dari nol hingga satu dalam pecahan. Ketik saja “rand” pada command window maka akan dimunculkan bilangan pecahan yang dimaksud.

Silahkan ketik help rand di command window maka akan muncul tata cara penggunaannya. Bahkan ada varian lagi dari fungsi tersebut di bagian akhir help (suggestion). Untuk membuat bilangan random yang dalam rentang tertentu, misal 9 hingga 10 butuh trik kusus, misalnya rand*10 atau 9+rand.

Contoh Kasus

Program berikut mensimulasian fungsi tangga dari suatu rangkaian masa dan suspensi. Disimulasikan beberapa komposisi pegas dan peredam yang menghasilkan beberapa kemungkinan. Perlu pengetahuan fungsi alih (transfer function) dan juga penggunaan fungsi plot pada Matlab. Buku command window.

  • figure
  • hold

Dua instruksi di atas akan menyiapkan satu gambar yang akan digunakan untuk menangkap output tiap-tiap komposisi pegas peredam. Fungsi hold membuat grafik menangkap lebih dari satu komposisi.

  • m=100;
  • for i=1:4
  • c=rand*10;
  • k=rand*10;
  • model=tf([1],[m c k])
  • step(model)
  • end

Kemudian Matlab mengeksekusi kode di atas dengan jumlah loop sebanyak empat kali. Tiap loop mencetak (fungsi step) model yang dalam bentuk fungsi alih tersebut. Massa diset 100 karena memang tidak terlalu berubah (massa motor, mobil, dan sebagainya cenderung tetap). Di sini nilai hanya sebagai contoh saja (tanpa satuan, dan standar yang telah ditentukan dalam perancangan elemen mesin). Selamat mencoba.

Variabel Dinamis pada Fungsi Alih Simulink Matlab

[m.kul,ruang,dosen,jur:t-pemodelan-simulasi,software,rahmadya-phd,t-kom-d3]

Berbicara mengenai fungsi alih, mau tidak mau harus sedikit kilas balik ke materi pengenalan pengaturan (tek. Kendali). Untuk mudahnya ambil kasus sederhana suspensi kendaraan (post terdahulu). Fungsi alih suatu sistem suspensi adalah:

Fungsi Alih = 1/(ms^2+cs+k)

m, c dan k berturut-turut massa (Kg), peredam (N.s/m), dan konstanta pegas (N/m). Kemudian untuk memasukan variabel dinamis fungsi alih, buka simulink dengan mengetik simulink pada command window Matlab.

Memasukan Variabel Dinamis

Untuk mensimulasikan sistem suspensi pada model simulink masukan tiga diagram blok antara lain: masukan tangga, fungsi alih, dan keluaran yang ditangkap oleh scope. Masukan tangga berada di bagian SOURCE, fungsi alih di bagian CONTINUOUS, dan scope pada bagian SINK. Caranya adalah dengan mendrag ke lembar model.

 

Atur fungsi alih (transfer function) agar diperoleh persamaan di awal tulisan ini. Gunakan variabel m, c dan k yang mewakili massa, peredaman, dan kekakuan pegas.

Tekan ganda transfer function dan isikan sebagai berikut. NOTE: Nilai m, c dan k di sini berupa variabel yang jika langsung dijalankan akan memunculkan pesan kesalahan.

Mengisi Variabel lewat Command Window

Bagaimana memasukan m, c, dan k? Mudah saja, kembali ke command window, ketikan saja tiga variabel itu dengan bilangan.

>> m=100;

>> c=20;

>> k=5;

Kembali ke jendela model. Tekan tombol RUN pada jendela model yang berupa segitiga warna hijau. Pastikan tidak muncul error. Lanjutkan dengan mengklik ganda SCOPE untuk melihat grafiknya.

Atur komposisi c dan k agar diperoleh respon yang halus (smooth). Bagaimana terapan ke program GUI-nya? Sepertinya butuh postingan tersendiri karena ada sedikit masalah saat praktek tadi, yaitu data m, c, dan k tidak terkirim ke jendela model.

 

Sanggupkah ANFIS Mengenali Pola Gambar?

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

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

Kasus Citra Hitam-Putih

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

Masalah Jumlah Masukan pada ANFIS

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

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

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

Mereduksi Jumlah Masukan

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

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

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

  • imshow(duaReal,’InitialMagnification’,5000)

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

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

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

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

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

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

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

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

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

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

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

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

imshow(empatc,’InitialMagnification’,5000)

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

Memodelkan Suspensi

Dosen/M.Kul/Ruang/Jurusan: Rahmadya,PhD/T.Pemodelan&Simulasi/Lab.Software/T.Komputer D3

Salah satu hal tersulit dari pemodelan adalah membuat sesuatu yang ingin dimodelkan menjadi model matematis. Konversi menjadi model ini dikenal dengan istilah abstraksi. Tentu saja kita tidak bisa membuat model matematis yang sangat menyerupai kondisi fisik. Tetapi jika kita mampu mengekstrak hal-hal penting menjadi model matematis, insya Allah kita bisa membuat model yang menyerupai kondisi real dari sistem yang kita modelkan.

Model Suspensi

Diperlukan beberapa variabel untuk memodelkan suspensi sederhana yaitu massa, konstanta pegas dan konstanta peredaman. Gambar berikut memperlihatkan suspensi sederhana.

Inputnya adalah gaya dari struktur jalan yang berefek pada translasi/perpindahan (variabel y) yang setara dengan gaya perlawanan pegas dan peredam. Persamaan kemudian dikonversikan menjadi persamaan Laplace agar persamaan differensial tersebut dapat diselesaikan.

Mungkin video berikut bisa sedikit menjelaskan langkah-langkah membuat model matematis dari model fisik.

Membuat Aplikasi

Berikutnya adalah membuat program untuk mensimulasikan parameter pegas dan redaman agar dihasilkan respon yang pas (tidak terlalu “bumpy” atau keras). (Video tutorial lihat grup WA). Semoga bermanfaat.

 

 

Menampilkan Citra Kecil dengan Fungsi IMSHOW Matlab

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

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

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

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

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

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