Coba Bikin Buku Lagi .. “Data Mining dengan Matlab & Python”

Buku berbeda dengan artikel jurnal dari sisi konten. Jika jurnal merupakan hasil penelitian terkini, buku sedikit tertinggal beberapa tahun. Namun biasanya buku lebih stabil keilmuwannya, alias sudah “established”. Biasanya buku digunakan sebagai sumber referensi untuk kasus tertentu karena formatnya yang rapi, tidak terlepas ke sana-sini seperti artikel ilmiah. Toh, jurnal pun sesungguhnya terbit setelah penelitian yang dilakukan beberapa tahun belakangan, jadi tidak baru-baru amat. Postingan ini sedikit memberi gambaran bagaimana membuat buku dengan mudah dan cepat.

Materi Kuliah

Waktu itu diminta ngajar mata kuliah “Data Mining” di kampus besar yang terletak di Pondok Kopi. Total ada 14 pertemuan. Kebetulan perkuliahan disertai dengan praktek di laboratorium. Dalam satu kali pertemuan saya buat satu bab, jadi total setelah perkuliahan selesai, jadilah buku sekitar 14 bab. Jadi ketika mengajari, langsung saja “capture” langkah-langkahnya. Tidak perlu ditulis dulu karena menulis membutuhkan waktu. Toh, dari hasil capture kita tahu apa yang harus ditulis nanti. Lihat postingan saya 7 tahun yang lalu tentang teknik ini.

Di akhir semester ada waktu kira-kira sebulan untuk membuat kata-kata yang mengalir. Ada sisi positifnya jika kita menulis materi kuliah. Ketika mempraktekan terkadang dapat diketahui apakah modul berjalan dengan baik. Terkadang ada saja hal-hal yang dijumpai siswa yang membuat praktik tidak berjalan. Hal ini penting untuk ditulis karena pembaca buku adalah pembelajar mandiri yang harus jelas dari “a” sampai “z” tanpa ada guru/tutor. Jika tidak berjalan, tentu saja mengecewakan pembaca. Namun toh, biasanya ada saja masalah dijumpai dan pembaca mengirim pertanyaan lewat email, terutama masalah kompatibilitas dengan laptopnya. Tapi biasanya berjalan dengan baik oleh pembaca. Kalaupun hanya memanfaatkan dari “help” tetap harus dicoba oleh penulis apakah bisa berjalan dengan baik atau perlu alat bantu lain. Beberapa penulis buku tidak menganjurkan memanfaatkan “help” karena untuk apa buat buku kalau di “help”-nya sudah ada.

Hasil Penelitian

Nah, yang ini agak sulit. Beberapa penerbit menolak membukukan hasil penelitian (skripsi, tesis, atau disertasi). Hal ini saya dengar langsung oleh perwakilan penerbit (waktu itu dari Andi offset) yang diundang oleh pihak kampus saya waktu itu (STMIK Nusa Mandiri). Saya lupa tahunnya, yang jelas waktu itu masih “ST”. Oiya, mungkin dosen-dosen muda sekarang heran melihat S1 yang menjadi dosen. Pasti lebih heran lagi kalau tahu jabatan fungsional Lektor saya diperoleh waktu masih bergelar S1 (lektor 200). Waktu itu memang jamannya orang enggan jadi dosen, sehingga kebutuhan dosen masih tinggi. Nah, si penerbit bersedia membukukan hasil penelitian jika mampu mengemas laporan penelitiannya dalam bentuk sudut pandang “orang awam”. Maksudnya pembaca harus dijejali hal-hal yang perlu agar mereka bisa mengikuti. Ini yang membuat penulis harus kerja ekstra mengetik ulang hasil penelitiannya. Nah nanti di akreditasi terbaru dengan format 9 standar, tiap dosen harus memasukan hasil penelitiannya ke materi ajar. Jadi buku yang dibuat kombinasi dari materi kuliah dengan hasil penelitian. Agak repot juga ketika mengajar mata kuliah yang berbeda dengan roadmap penelitiannya, jadi tidak bisa disisipi hasil penelitian. Jadi intinya, penerbit ingin pembaca tidak membutuhkan sumber-sumber lain untuk memahami, artinya dengan satu buku itu sudah paham. Kalau memerlukan buku lainnya, biasanya pembaca kerepotan karena harus merogoh kocek lagi untuk beli buku lainnya.

Menolong Orang Lain

Siapa yang ditolong? Banyak, misalnya kampus (lewat poin akreditasi karena ada buku), dosen (karena ada materi kuliah), industri/developer (untuk membuat software/aplikasi), dan mahasiswa (untuk kuliah dan tugas akhir/skripsi). Hal ini terjadi karena buku berbeda dengan artikel ilmiah yang terkadang merahasiakan kode sumber, sementara buku selain menyertakan kode sumber, terkadang diberikan CD/DVD atau file yang dishare di internet (dari website, Github, dan lain-lain). Kebanyakan mereka seumur hidup hanya sekali merasakan skripsi/tugas akhir, jadi tidak mungkin melupakan buku yang ia baca ketika berpusing-pusing ria dalam merampungkan kuliahnya. Saya pun sampai sekarang masih ingat buku-buku yang membantu saya lulus kuliah. Terakhir, tentu saja membantu penerbit. Mereka secara jujur kesulitan mencari penulis buku, padahal jumlah penulis potensial di tanah air harusnya di atas negara lain.

Revisi Atau Baru?

Sebenarnya saya ingin merevisi buku yang dulu, tetap mengingat isi yang jauh berbeda, terpaksa membuat versi yang benar-benar baru. Salah satu hal yang membedakan adalah “web-based machine learning“. Silahkan cari di internet buku tentang machine learning atau data mining berbasis web, masih jarang. Hal ini terjadi karena antara front-end (web developer) dengan back-end (data scientis) berasal dari orang dengan fokus yang berbeda. Perlu ada jembatan yang menghubungkan keduanya. Pengguna pun lebih nyaman menggunakan apikasi data mining dengan GUI berbasis web yang mudah diakses dari manapun. Jadi dengan tambahan web-based machine learning mudah-mudahan dapat menjembatani front-end dan back-end. Penggunaan bahasa Python pun karena trend bahasa pemrograman ini yang terus naik (lihat pos yang lalu) sampai-sampai Google mengadopsi bahasa ini dalam pemrograman onlinenya (lihat pos yg lalu tentang Google Colab).

Sebagai bonus, penulis terkadang harus cuek, apalagi menulis buku. Jika novel atau cerpen, kita bisa menggunakan nama samaran jika kita tidak ingin repot dengan para kritikus. Beberapa pakar di tanah air terkadang merendahkan tulisan dari penulis-penulis lokal dan cenderung menganjurkan buku-buku internasional yang “wah”. Tidak apa-apa kalau punya pandangan seperti itu, toh niat kami membantu anak-anak yang mungkin kurang skill bahasa Inggrisnya dengan bahasa yang mudah mereka mengerti. Jika dikatakan tulisan “instan” ya tidak apa-apa, kan repot juga mahasiswa dipaksa belajar bahasa Inggris dulu baru bisa lulus. Prinsip saya dan penulis-penulis lokal lainnya sebenarnya sederhana, membantu memberikan pemahaman kepada masyarakat umum, tidak merahasiakan ilmu atau menyarankan mereka mengikuti kursus yang harganya terkadang tidak terjangkau oleh mahasiswa-mahasiswa rata-rata di tanah air yang untuk bayar kuliah saja sulit. Tentu saja kalau mampu silahkan buat buku bertaraf internasional yang “wah” dan itu bagus banget menurut saya. Semoga berminat menulis buku.

Update: 10 April 2021

Buku sudah avaiable di toko-toko buku dan online shop, semoga bermanfaat.

buku DM new

Format Hasil Training Jaringan Syaraf Tiruan Pada Matlab dan Python

Jaringan Syaraf Tiruan (JST) merupakan salah satu metode computational intelligence (CI) yang meniru sifat otak makhluk hidup. Sel neuron otak direplika dalam suatu fungsi transfer/aktivasi yang kemudian ditransfer ke neuron lainnya lewat sebuah jaringan. Sebuah bobot dan bias mengatur apakah suatu sinyal diteruskan atau tidak sehingga keluaran menghasilkan nilai sesuai dengan keinginan. Untuk mengatur bobot dan bias diperlukan sebuah proses pembelajaran yang dikenal dengan nama learning/training. Karena ketika training membutuhkan data dan target atau label, maka pembelajarannya dikenal dengan istilah pembelajaran terpandu (supervised learning). Beberapa tipa JST tidak membutuhkan target/label, seperti misalnya tipe Self Organizing Map (SOM).

Bahasa Pemrograman JST

Berbagai bahasa pemrograman dapat digunakan untuk membuat JST, seperti bahasa C++, Java, Matlab, Python dan lain-lain. Matlab memiliki toolbox yang mempermudah proses pelatihan. Dengan adanya toolbox, beberapa peneliti yang hanya fokus ke penerapan metode tidak perlu kehabisan waktu dalam pemrograman. Di sisi lain Python yang kian hari kian diminati memiliki library Scikit Learning, yang menyediakan fasilitas-fasilitas dalam pelatihan JST.

Matlab

Tersedia toolbox NNTOOL dalam pembuatan JST. Sebelumnya Matlab juga memiliki beberapa fungsi untuk pembuatan JST seperti newff, newcf, dan lain-lain tergantung tipe network yang akan dibuat. Jika ingin menghasilkan performa yang kuat, Matlab masih kalah dengan C++ yang bagi beberapa orang sangat sulit membuat programnya, terutama dalam memanipulasi array dan matriks. Namun Matlab seperti alat ukur sangat mudah digunakan sehingga sebuah artikel ilmiah yang mengusulkan metode baru dapat juga dilihat oleh orang lain (direplikasi), sehingga banyak digunakan dalam naskah artikel ilmiah. Untuk pembuatan GUI untuk penerapan, Matlab menyediakan fasilitas pembuatan GUI desktop, sementara belum ada yg versi berbasis web.

Python

Bahasa pemrograman ini saat ini banyak diminati. Masalah array dan matriks dapat diatasi lewat library-librarynya seperti NumPy dan Pandas. Ketangguhan bahas ini membuat Google menerapkannya dalam fasilitas pemrograman onlinenya di http://colab.research.google.com. Framework yang digunakan adalah Jupyter Notebook. Selain itu, Google juga menggratiskan GPU dan TPU nya yang kita kenal memiliki server yang kuat. Sehingga dengan bermodal ponsel dapat menjalankan machine learning dengan ketangguhan setara server Google. Berbeda dengan Matlab yang hanya menyediakan fasilitas GUI pada aplikasinya, Python menyediakan dua versi yaitu desktop dengan library TKinter dan web-based lewat framework Django, Flask, dan Jinja2 sebagai template web-python.

Hasil Pelatihan

Pelatihan JST menghasilkan nilai-nilai parameter antara lain arsitektur JST berupa susunan layer dan jumlah neuron di tiap-tiap layer, serta bobot dan bias di masing-masing layer. Pada Matlab, hasil tersimpan dalam format *.mat yang berisi variabel network hasil pelatihan. Untuk memakainya sebuah instruksi diperlukan yaitu fungsi “load” yang memanggil file mat tersebut.

Untuk Python, beberapa versi yang digunakan adalah *.pkl dan *.h5. Yang paling mudah adalah *.h5 yang merupakan tipe sequential, dimana network mengalir dari input ke output. Karena *.h5 berisi bobot dan bias hasil training, untuk menggunakannya diperlukan file lain yaitu file *.yaml yang berisi arsitektur JST (jumlah layer dan neuron). Hasil pelatihan penting untuk diketahui oleh pengembang software terutama ketika membuat penerapan JST hasil training. Aplikasi di web biasanya tidak memerlukan proses training yang memakan beban server, melainkan hanya menggunakan hasil training untuk penerapan, misalnya klasifikasi.

Pilihan ada di tangan Anda. Beberapa pengguna non-computer science seperti bidang elektronika, ekonomi, kesehatan, dan lain-lain banyak menggunakan kemudahan Matlab, dengan resiko membeli lisensi yang cukup mahal. Jika Anda dari computer science alangkah baiknya memilih kedua-duanya. Lho kok dua-duanya? Ya harusnya orang computer science bisa semua bahasa, minimal pernah mencoba. Sekian, semoga bermanfaat.

Membuat Grafik Deret Waktu Pada Matlab

Matlab cukup baik membuat grafik/plot standar jurnal dibanding pengolah data standar seperti Excel. Namun terkadang data yang ingin dibuat grafiknya berupa deret waktu (time series). Misalnya kita punya data seperti ini.

Misalnya data tersebut di atas adalah bulan Maret 2020. Bagaimana cara membuat Plot nya? Sebelumnya mudah saja menggunakan fungsi “plot” untuk data biasa non tipe “date”. Untuk data “date” gunakan fungsi “datetime” untuk mengkonversi tanggal tabel di atas menjadi data tanggal sesungguhnya.

Perhatikan penggunaan “datetime” dimana data sebelumnya ditambahkan dengan tanggal. Coba buat plotnya dengan fungsi “plot” dan pastikan sumbu axis sudah berupa tanggal/deret waktu.

  • >> plot(x,data(:,2),’*’)
  • >> hold
  • Current plot held
  • >> plot(x,data(:,2),’-‘)

Mengetahui RULE Hasil Training ANFIS.

Berbeda dengan JST yang hasil trainingnya mirip “black box” yang tidak diketahui logikanya, pada Adaptive Neuro-Fuzzy Inference System (ANFIS) hasil trainingnya memiliki logika. Logika ini dikenal dengan istilah RULE. Postingan ini bermaksud menunjukan bagaimana melihat RULE hasil training. Masukan data training, misalnya data yang mirip Logika XoR.

Buka ANFIS editor dengan mengetik “anfisedit” pada command window. Masukan data latih tersebut. Gunakan “From: worksp”.

Rancang FIS yang akan dilatih dengan menekan “Generate FIS” di editor ANFIS.

Di sini di isian “Number of MFs” berisi “3 3” yang artinya tiga kelas input1 dan input2, misal “baik”, “cukup”, “kurang”, bisa juga diganti “2 2” jika hanya dua kategori, misal “baik” dan “buruk” saja. Tentu saja makin banyak kategori biasanya hasil lebih baik, apalagi jika datanya sedikit seperti kasus di contoh ini. Lanjutkan dengan menekan “Train Now”. Jika sudah perhatikan RULE yang terbentuk dengan menekan “Edit” – “Rule”.

In1mf1, dan seterusnya bisa diedit dengan bahasa yang kita mengerti, dengan cara masuk ke menu “edit” – “FIS Proerties”. Mirip caranya dengan mengedit fuzzy inference system (FIS). Berbeda dengan Jaringan Syaraf Tiruan (JST), ANFIS memiliki keunggulan dimana hasil training memiliki logika tertentu. Selanjutnya, uji dengan data sesungguhnya yaitu Logika XoR. Sebelumnya simpan ke “Workspace” misalnya dengan nama “xor”.

Testing dengan data sesungguhnya, yaitu logika XoR.

Jalankan dengan fungsi “evalfis” untuk menguji data “xorlogic” tersebut (kolom 1 dan 2) apakah sama dengan targetnya (kolom 3), yaitu beruturut-turut 0, 1, 1, 0.

Perhatikan “result” dengan jawaban logika xor yang asli, jika result dibulatkan (ketik “round(ans)”) akan menghasilkan jawaban sesungguhnya, alias akurat 100%. Selamat mencoba.

 

 

Optimalisasi Multiobjektif

Biasanya dalam optimalisasi, fungsi yang akan dicari nilai optimalnya hanya berjumlah satu. Fungsi tersebut dikenal dengan nama fungsi objektif (objective function) atau beberapa peneliti lebih senang dengan istilah fungsi kriteria (criteria function). Tetapi di lapangan kebanyakan fungsi objektif lebih dari satu, sehingga perlu penanganan untuk mengoptimalkan fungsi-fungsi tersebut, yang dikenal dengan istilah optimalisasi multiobjective (multiobjective optimization).

Salah satu teknik yang sering dan mudah digunakan adalah dengan pembobotan, atau dikenal dengan istilah aggregating function. Besar bobot di tiap-tiap fungsi objektif perlu diriset terlebih dahulu, atau dengan menanyakan kepada para pakar di bidangnya. MIsalnya kita memiliki dua fungsi:

Coba gunakan Matlab untuk melihat grafik dua fungsi objektif tersebut. Tampak adanya kontradiksi. Di sinilah peran penanganan multiobjektif.


x=-10:0.1:10;
y1=x.^2+6;
plot(x,y1,'r')
grid on
hold
%Current plot held
y2=-(x.^2)+12;
plot(x,y2,'b')

Tampak kedua fungsi bertolak belakang. Di sini misalnya kita sudah memiliki bobot masing-masing untuk fungsi 1 dan 2 berturut-turut 0.7 dan 0.3. Maka untuk optimalisasi kita butuh satu fungsi baru, yang nantinya digunakan sebagai fungsi objektif pada algoritma optimasi yang dipilih. Tambahkan 2 kode baru lanjutan dari yang di atas.


yobj=0.7*y1+0.3*y2;
plot(x,yobj,'k')

Nah kita tinggal mengoptimalkan fobj yang berwarna hitam tersebut dengan metode yang Anda sukai, misalnya algoritma genetika. Ketik optimtool(‘ga’). Nah, di sini perlu membuat m-file yang berisi fungsi objektif. Ketik sembarang nama, misalnya “fungsi” di command window isi coding berikut:

Masukan nama fungsi tersebut diawali dengan @ di bagian “fitness function”. Di bagian “Plot Function” ceklis pada best fitness dan best individualnya agar lebih interaktif ketika Matlab memprosesnya. Tekan “Start” jika dirasa sudah siap. Oiya, jangan lupa “Number of Variables” diisi, tentu saja satu variabel yang terlibat “x”.

Perhatikan di bagian hasil, diperoleh titik 0.001 sebagai titik optimal dengan fitness 7.8. Sekian, semoga bisa menginspirasi.

Competitive Network dan Contoh Implementasinya

Tipe network ini menghasilkan keluaran yang terbesar sebagai pemenang. Misal ada tiga input sebesar 1,2, dan 3, maka pemenangnya adalah input ketiga (sebesar 3). Berikut notasi standar competitive network.

Fungsi competitive network pada matlab adalah “compet”. Buka command window pada Matlab dan coba fungsi “compet”. Untuk lebih jelasnya silahkan buka help dengan mengetik “help compet” di command window.

  • a=[1;2;3];
  • compet(a)
  • ans =
  • 0
  • 0
  • 1
  • compet(-a)
  • ans =
  • 1
  • 0
  • 0

Perhatikan kode di atas. Jika ingin menemukan nilai tertinggi gunakan fungsi compet(a) sementara jika ingin mencari terendah, gunakan compet(-a). Biasanya mencari nilai terendah digunakan dalam menentukan mana yang paling mirip (similar) antara beberapa hasil output. Tentu saja ada sedikit modifikasi kode untuk memberitahu hasil minimum suatu inputan.

Misal kita beri nama tiga input tersebut berturut-turut “nilai A”, “nilai B” dan “nilai C”. Maka sistem diminta menampilkan nilai mana yang terkecil? Lanjutkan dengan kode berikut ini.

  • input1=[“nilai A”;”nilai B”;”nilai C”];
  • hasil=compet(-a);
  • [ind,result]=find(hasil);
  • minimum=input1(ind)
  • minimum =
  • “nilai A”

Lebih simple dibandingkan dengan menggunakan “if-else” berikut ini yang jauh lebih panjang jumlah baris programnya, apalagi yang akan dibandingkan sangat banyak.

  • if (a(1)<a(2)) && (a(1)<a(3))
  • minimum=’Nilai A’
  • else
  • if a(2)<a(3)
  • minimum=’Nilai B’
  • else
  • minimum=’Nilai C’
  • end
  • end
  • minimum =
  • ‘Nilai A’

Membuat Mask (Bingkai) Pada Citra & Manfaatnya

Postingan ini bermaksud menginformasikan problem ketika pencocokan pola citra kurang berhasil akibat pola yang tidak memiliki bingkai. Ketika dengan Autoassociative Memory diminta memprediksi angka satu berikut (lihat yang berwarna putih).

Prediksi di sebelah kanan memang tepat angka satu, tetapi terpotong di bagian atas dan bawahnya. Kita coba untuk menambahkan bingkai pada citra yang akan dilatih dan diterka.

Menambahkan Nol di Sekitar Matriks

Misal angka nol di bawah akan dibuatkan bingkainya. Langkah pertama adalah mengetahui ukuran matriks angka nol tersebut.

Gunakan fungsi size di Matlab. Setelah itu dengan fungsi “zeros” buat matriks berukuran dua digit lebih banyak dari ukuran sebelumnya. Misalnya matriks di atas memiliki ukuran baris x kolom sebesar 5 x 3 maka buatlah matriks nol dengan ukuran 7 x 5.

  • imshow(nol,’InitialMagnification’,’fit’)
  • nolmask=zeros(7,5);
  • nolmask(2:6,2:4)=nol;
  • imshow(nolmask,’InitialMagnification’,’fit’)

Perhatikan angka nol (yang berwarna putih) telah memiliki bingkai (warna hitam di sekelilingnya). Berikutnya kita coba melatih jaringan syaraf tiruan (JST) yang sebelumnya tanpa bingkai. Diuji dengan angka satu udah ok: hasil: “satu” (sebelah kiri) dan yang sebelah kanan nol dengan sedikit error berhasil mendeteksi (hasil deteksi: “nol”).

Mengkonversi Polygon Peta Pada ArcGIS ke Matriks di Matlab

Terkadang untuk melakukan manipulasi dengan Matlab membutuhkan konversi dari data berupa peta menjadi matriks. Jika sudah dalam bentuk matriks maka beragam metode dapat diterapkan untuk memanipulasi matriks peta tersebut seperti pengklusteran, klasifikasi, dan lain-lain. Postingan ini bermaksud mengkonversi citra polygon menjadi matriks di Matlab.

Mempersiapkan Poligon

Terlebih dahulu persiapkan peta poligon, misalnya lokasi sekolah di bekasi selatan. Karena fungsi polygon to raster di ArcGIS tidak berlaku untuk titik maka diperlukan proses “buffering” agar dihasilkan region sebuah titik. Cari fungsi “buffering” tersebut di kolom “search” pada ArcGIS anda.

Di sini dibuat lingkaran dengan jarak 50 meter dari pusat titik di tiap-tiap lokasi. Secara default tipenya adalah lingkaran. Jika sudah tekan “OK” di bagian bawah. Pastikan peta baru yang berisi lingkaran dengan jari-jari 50 meter yang berada di sekitar titik lokasi.

Konversi ke Raster

Untuk menjadikan poligon menjadi matriks diperlukan proses konversi dari poligon ke raster dengan fungsi “Polygon to Raster”.

Tekan “OK” dan tunggu sesaat hingga ArcGIS membuat rasternya seperti gambar berikut ini. Perhatikan yang tadinya lingkaran (round) sedikit berubah menjadi kotak-kotak.

Membentuk Matriks di Matlab

Terakhir kita menarik data yang telah dibuat oleh ArcGIS ke Matlab. Pertama-tama data perlu di- “Export” terlebih dahulu. Bentuknya terdiri dari beberapa layer dengan komponen utamanya berekstensi TIF yang mirip dengan JPG atau PNG.

Pastikan di folder target terdapat salah satu citra yang akan dibaca matriksnya lewat Matlab. Arahkan “Current Directory” pada lokasi yang sesuai agar bisa dibaca Matlab. Jalankan perintah ini untuk melihat “image”nya.

  • imshow(‘sekolah_PolygonToRaster11.tif’)

Jika kita lihat ukurannya masih sangat besar.

  • I=imread(‘sekolah_PolygonToRaster11.tif’);
  • size(I)
  • ans =
  • 474 248

Ada baiknya resolusi sedikit diturunkan agar diperoleh matriks yang mudah dimanipulasi. Gunakan fungsi “imresize” dengan sebelumnya mengkonversi gray menjadi biner.

  • I2=imresize(I,0.25);
  • size(I2)
  • ans =
  • 119 62

Tampak resolusinya berkurang seperempatnya. Konversi menjadi biner agar dihasilkan image yang tidak pecah-pecah seperti di atas. Untuk membahas masalah tersebut perlu postingan lain tentang pengolahan citra. Semoga bisa menginspirasi.

Red, Green, dan Blue (RGB) Pada Matlab

Representasi warna yang dikenal antara lain: i) Red, Green, Blue (RGB), ii) Cyan, Magenta, Yellow, Black (CMYK), iii) Hue, Saturation, Brightness (HSB), dan iv) CIE-XYZ. Di sini yang paling mudah dan terkenal adalah RGB. Postingan ini bermaksud menjelaskan secara mudah model warna RGB ini.

Sejarah

Kita mengenal TV berwarna yang mengkombinasikan tiap piksel dengan gabungan komposisi warna Red, Green, dan Blue. Jika seluruh warna R, G, dan B nol atau padam, maka dihasilkan warna hitam. Sebaliknya jika seluruhnya menyala maksimal, diperoleh warna putih.

Membuat Warna

Perhatikan warna Turqoise di bawah ini. Warna ini merupakan kombinasi warna Red, Green, dan Blue berturut-turut 64, 224, dan 208. Bagaimana merepresentasikannya dalam Matlab?

Baik, kita mulai saja dengan membuka Matlab versi 2008 ke atas (mungkin sebelumnya bisa, asalkan ada fungsi “imshow” dan “cat” pada matriks).

Format RGB pada Matlab

Matlab menggunakan format matriks tiga dimensi, berbeda dengan gray atau biner yang menggunakan satu matriks saja. Oke, misalnya kita buat piksel yang membentuk huruf ‘c’.

  • c=[1 1 1;1 0 0;1 1 1];
  • imshow(c,’InitialMagnification’,’fit’)

Disini “InitialMagnification” artinya memperbesar huruf c tersebut agar bisa dilihat jelas. Coba saja tanpa fungsi itu, pasti hanya berupa titik kecil saja.

Nah, di sini kita diminta merubah huruf c format biner tersebut menjadi warna turquoise pada gambar di atas sebelumnya. Caranya adalah dengan merubah satu matriks ‘c’ tersebut menjadi komposisi tiga matriks R, G, dan B berupa perbandingan dari 0 hingga 255.

Warna Red, Green, Blue

Di sini warna merah adalah 64 dari 255. Tuliskan di command window instruksi berikut.

  • r=c*64/255
  • r =
  • 0.2510 0.2510 0.2510
  • 0.2510 0 0
  • 0.2510 0.2510 0.2510

Dengan cara yang sama buat juga Green dan Blue.

  • g=c*224/255;
  • b=c*224/208;

Jika komposisi R, G, dan B sudah dibuat, berikutnya adalah meng-concatenate tiga matriks tersebut (r, g, dan b) menjadi satu.

  • image=cat(3,r,g,b);
  • imshow(image,’InitialMagnification’,’fit’)

Pastikan diperoleh huruf ‘c’ dengan warna turquoise seperti di bawah. Jika Anda bisa memanipulasi satu piksel maka Anda pasti bisa memanipulasi beragam citra menjadi warna-warna tertentu. Sekian, semoga bermanfaat.

Instal Matlab Mobile (Android)

Matlab pertama kali diciptakan untuk memanipulasi matriks dengan cepat dan praktis. Oleh karena itu diberi nama “Matlab” singkatan dari Matrix Laboratory. Kemampuan yang sesederhana kalkulator diimbangi dengan pemrograman yang berat membuat aplikasi ini banyak disukai oleh peneliti-peneliti yang bermain dengan komputasi. Tidak lengkap sepertinya saat ini jika ada aplikasi yang tidak ada versi androidnya. Matlab pun menyediakan aplikasi versi android yang dapat digunakan oleh peneliti dan mahasiswa dimanapun berada. Postingan ini sekedar membagikan info bagaimana instal aplikasi Matlab via android ini.

1. Mengunduh Aplikasi

Berhubung smartphone saya menggunakan sistem operasi android maka mau tidak mau menggunakan playstore untuk mengunduhnya.

Tekan tombol Install untuk memulai instal aplikasi Matlab android ini. Sepertinya tidak perlu dijelaskan lebih jauh, butuh beberapa menit untuk menginstalnya. Pastikan Matlab siap digunakan.

2. Sign Up

Langkah berikutnya adalah mendaftar akun di www.mathworks.com. Tahap ini didahului oleh instal upgrade aplikasi. Sangat dianjurkan jika Anda punya lisensi Matlab, tetapi jika tidak tentu saja tidak perlu upgrade.

Satu hal penting untuk dapat mendaftar akun di Matlab adalah email resmi, bukan gmail, yahoo, dan sejenisnya. Setelah memasuki regional, lanjutkan dengan aktivasi dengan cara mengklik link yang dikirimkan via email resmi tersebut.

3. Testing

Selamat, Anda telah berhasil menginstal Matlab mobile. Berikut ini saya coba memanipulasi matriks, menampilkan citra dan menjalankan salah satu fungsi, yaitu normalisasi Euclidean. Beberapa juga sudah saya coba membuat plot/grafik, dapat dilaksanakan juga. Selamat mencoba, semoga bermanfaat.

Membangkitkan Bilangan Random Berinterval Pada Matlab

Terkadang kita diminta membangkitkan bilangan random, misalnya pecahan dari nol sampai 10 dengan interval 0.5. Fungsi bawaan matlab yang tersedia adalah rand(), sehingga jika maksimal angka 10 maka cukup dengan mengalikan rand()*10 akan diperoleh angka sembarang dari nol hingga 10.

  • rand()*10
  • ans =
  • 2.6297

Jika ingin berinterval tiap 0.5 maka secara logika harusnya 2.5 karena lebih dekat ke 2.5 dibanding 2.0 atau 3.0. Langkah termudah adalah dengan menggunakan bantuan if-else. Jalankan instruksi berikut di command window maka akan diperoleh 2.5.

  • angka=2.6297;
  • steps=0.5;
  • baseangka=floor(angka);
  • pecahan=angka-floor(angka);
  • upper=abs(steps-pecahan);
  • buttom=abs(0-pecahan);
  • if upper<buttom
  • newangka=baseangka+steps
  • else
  • newangka=baseangka
  • end

Kebetulan basis angkanya integer dimana untuk contoh di atas angka 2. Bagaimana jika intervalnya tiap 0.05? Jika angka 2.6297 maka tentu saja basisnya menjadi 2.6 (bukan angka 2 lagi). Logika sederhananya adalah dengan metode di atas, hanya saja basis angka dikalikan 10 (agar koma bergeser ke satu digit di kanan koma), tetapi jangan lupa untuk membagi lagi dengan 10 di akhir prosesnya.

  • angka=2.6297;
  • angka=angka*10;
  • steps=0.5;
  • baseangka=floor(angka);
  • pecahan=angka-floor(angka);
  • upper=abs(steps-pecahan);
  • buttom=abs(0-pecahan);
  • if upper<buttom
  • newangka=(baseangka+steps)/10
  • else
  • newangka=baseangka/10
  • end

Hasilnya:

  • newangka =
  • 2.6500

Kombinasikan dengan fungsi rand(), misalnya membangkitkan 5 bilangan random berinterval 0.05:

  • initial=[];
  • for i=1:5
  • angka=rand()*10;
  • angka=angka*10;
  • steps=0.5;
  • baseangka=floor(angka);
  • pecahan=angka-floor(angka);
  • upper=abs(steps-pecahan);
  • buttom=abs(0-pecahan);
  • if upper<buttom
  • newangka=(baseangka+steps)/10;
  • else
  • newangka=baseangka/10;
  • end
  • angka=[initial;newangka];
  • initial=angka;
  • end

Hasilnya adalah rentetan bilangan random sebanyak lima buah dengan interval 0.05 di bawah ini (hasil berubah-ubah karena random). Semoga bermanfaat.

  • angka =
  • 5.2500
  • 4.1500
  • 6.5500
  • 6.2500
  • 2.9000

Normalisasi dengan Mapping Standard Deviation (mapstd)

Selain dengan membentuk matriks ortogonal yang disukai backpropagation, ada banyak metode normalisasi. Dengan teknik minmax dapat dihasilkan bentuk yang cocok untuk range sempit (lihat post sebelumnya). Apakah ini yang terbaik? Tentu saja tergantung kasusnya. Untuk proyeksi (peramalan) metode normalisasi yang terkenal adalah yang berbasis statistik yaitu dengan mapping dengan standard deviation. Pertama-tama adalah menemukan rata-rata sebaran data tersebut:

Variabel Y adalah data dengan n adalah jumlah datanya. Berikutnya adalah menentukan standar deviasi atau dalam bahasa kita simpangan baku. Varians dikenal dengan rumus berikut:

Standar deviasi merupakan akar dari varians di atas. Jadi tiap data yang akan dinormalkan dengan cara ini dihitung berdasarkan nilai rata-rata dan standar deviasi di atas.

Untuk mempermudah, Matlab telah menyediakan fungsi mapstd. Silahkan buka Matlab (2008 ke atas). Ketik “help mapstd”, ikuti saja langkah-langkah di help yang dicontohkan Matlab.

Jika ingin melihat implementasinya, dapat dilihat skripsi mahasiswa UNY berikut ini untuk kasus peramalan saham (syariah):

Menyamakan Ukuran Citra

[peng.citra|t.komputer|lab.hardware|pert.10]

Untuk membandingkan dua citra baik dengan JST atau metode yang lain, hal mutlak yang harus dilakukan adalah menyamakan ukuran dari citra. Menyamakan ukuran berarti menyamakan dimensi matriks antara satu gambar dengan gambar yang akan diuji kemiripannya. Gambar GUI di bawah ini adalah contoh ilustrasi proses pembandingan.

Perhatikan gambar di atas dimana gambar 1 yang merupakan master akan diuji dengan gambar 2 yang memiliki ukuran berbeda (kolom atau tinggi segiempatnya) dimana angka tiga 371, sementara angka 2 742. Proses callback “Resize Gbr 2” berisi kode berikut:

  • image=handles.image;
  • b=handles.b;
  • c=handles.c;
  • % ukuran gbr2
  • [b2,c2]=size(image)
  • save testing
  • image=imresize(image,[b c])
  • axes(handles.axes2)
  • imshow(image)
  • set(handles.edit5,’String’,b)
  • set(handles.edit6,’String’,c)

Perhatikan gambar di atas. Ukuran baru gambar dua sudah sama dengan tiga (kolom = 371). Dengan samanya ukuran gambar 1 dan gambar 2 maka proses selanjutnya (Uji Kecocokan) dapat dilakukan. Ada hal-hal tertentu yang didapat pada praktik hari ini:

  • Tidak boleh memberi nama GUI dengan nama yang dimiliki suatu fungsi pada Matlab, misalnya dengan nama “imresize”, karana ketika ada instruksi “imshow” akan menampilkan GUI tersebut bukannya gambar/citra.
  • Ketika GUI dengan Matlab 2013 dijalankan di 2008 ada pesan error dan tidak dapat dijalankan. Tetapi jika GUI dengan Matlab 2008 dapat dijalankan dengan 2013 ke atas. Semoga bermanfaat.

Fixing: “Warning: Single line Edit Controls can not have multi-line text”

[inf.retrieval|t.komputer|lab.soft|pert.8]

This problem appears when someone tries to send the result to edit text. The warning is shown in command window and the edit text in GUI is also disappeared. First we should understand that Matlab has two kinds of text format: string and cell. The cell cannot be presented, except you transpose it. But the edit text will show the text in column based. Only the string/char format can be presented in row based (see the picture below showing the string and cell).

Some text processing methods need conversion from string to cell. Therefore, the manipulation should be done in order to show the text in edit text. The algorithm are as follow:

  • Input: cell
  • Output: string in row
  • Use function char to convert cell into character
  • Transpose the characters
  • Use function sprintf to print the characters in row based

This simple method can be solve the warning above. As an impormation, some text manipulation need conversion from cell to char and vice versa, e.g. regexp (regular expression function). I hope this information is useful. This is an output when I stemmed to remove preffix (‘ber’) except when the root-word below 4 characters (e.g. “dua” from “berdua”)

Stemming Pada Matlab

[per.informasi|t.komputer|lab.soft|pert.5]

Jika pada pertemuan sebelumnya telah berhasil memisahkan kata-kata dalam suatu kalimat agar bisa menghitung jumlah katanya maka pada pertemuan kali ini akan mencoba memisahkan kata dari imbuhan (awalan dan akhiran) agar diperoleh kata dasarnya yang dikenal dengan istilah stemming/lematization. Proses ini sangat penting dalam perancangan mesin pencari (searching). Imbuhan merupakan ciri khas bahasa Indonesia yang memang berbeda sekali dengan bahasa Inggris. Coba rancang GUI berikut untuk melakukan proses stemming.

Imbuhan ada banyak misalnya me, meng, ber, per, -an, dan lain-lain. Untuk memisahkannya kita perlu memproses pencarian berdasarkan spasi dan titik (untuk akhiran). Jika tanpa spasi akan terjadi kesalahan karena sistem akan mereplace seluruh yang diduga awalan/akhiran walau terletak di tengah-tengah kata yang tentu saja salah.

  • % menghilangkan “-an”
  • y=regexprep(y,‘an+\s’,‘ ‘) % sebelum spasi
  • y=regexprep(y,‘an+\.’,‘.’) % sebelum titik
  • set(handles.edit1,‘String’,y)

Kode di atas bermaksud menghilangkan akhiran –an. Jika diinput kata “akhiran.” Akan dihasilkan kata dasarnya “akhir”. Ada dua deteksi yaitu sebelum spasi dan sebelum titik.

Logika sederhananya adalah mengganti “-an” tersebut dengan “blank”. Fungsi yang digunakan adalah regexprep yang mencari dan me-replace suatu string. Pertemuan berikutnya akan menggunakan proses perhitungan karakter tertentu, misalnya “makan”, tidak bisa jadi “mak” karena kurang dari 4 karakter. Selain itu perlu proses N-gram (dua, tiga, dst). Selamat mencoba, semoga UTS dapat dikerjakan dengan baik.