AI and Neuro-Fuzzy Theory

Tahun 2014 saya pernah memperoleh kuliah Artificial Intelligence (AI) & Neuro-Fuzzy Theory. Ternyata materi ini sangat padat karena gabungan 2 mata kuliah yang saat ini saya ajar AI + Computational Intelligence (CI).

Neural networks atau jaringan saraf adalah sebuah konsep pemodelan matematis yang terinspirasi dari cara kerja otak manusia. Konsep ini telah ada sejak awal abad ke-20 dan telah mengalami banyak perkembangan sejak saat itu. Pada awalnya, konsep jaringan saraf digunakan untuk memodelkan bagaimana neuron-neuron dalam otak manusia berinteraksi satu sama lain. Namun, pada tahun 1940-an, para peneliti mulai menggunakan konsep ini untuk membangun mesin-mesin yang dapat melakukan tugas-tugas seperti mengenali pola pada gambar dan suara.

Pada tahun 1950-an, sebuah mesin jaringan saraf pertama kali dikembangkan oleh Frank Rosenblatt, yang dikenal sebagai “Perceptron”. Mesin ini dapat mengenali pola pada gambar dan mampu membedakan antara huruf “X” dan “O”. Namun, pada saat itu, mesin jaringan saraf masih sangat terbatas dan hanya mampu menangani masalah-masalah sederhana. Selain itu, kemampuan komputasi pada waktu itu juga masih terbatas dan membatasi perkembangan jaringan saraf. Meskipun begitu, konsep jaringan saraf tetap terus berkembang dan menjadi salah satu bidang yang paling menjanjikan dalam pengembangan kecerdasan buatan saat ini. Video berikut cuplikan kuliah tentang pentingnya AI dan NNs di awal ditemukan dengan praktik via Jupyter Notebook.

Iklan

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.

 

 

Jumlah Lapis Tersembunyi (Hidden Layer) Jaringan Syaraf Tiruan (Neural Networks)

Jumlah layer tersembunyi, atau yang dikenal dengan istilah hidden layer, menentukan keberhasilan jaringan syaraf tiruan (JST) dalam memecahkam masalah multilayer perceptron (waktu itu problem exclusive OR, XoR). Namun jumlah lapis tersembunyi sangat mempengaruhi proses training dengan backpropagation. Buku terkenal yang biasa jadi referensi riset JST tahun 90-an menyebutkan satu lapis tersembunyi sudah cukup dan tidak membutuhkan banyak komputasi saat pelatihan (Fausett, 1994).

Era Deep Learning

Proses pembelajaran JST merupakan bidang dari Machine Learning yang membahas proses pengaturan bobot dan bias suatu JST (lihat post yang lalu). Namun permasalahan mengenai performa menjadi kendala utama penerapan Machine learning pada multilayer JST, antara lain:

  1. Vanishing Gradient
  2. Overfitting, dan
  3. Computational load

Butuh 20 tahun, yaitu di-era 2000-an ketika masalah tersebut dapat diselesaikan dengan munculnya bidang baru yang dikenal dengan Deep Learning (Kim, 2017). Kalau diartikan dalam bahasa Indonesia: pembelajaran mendalam. Dalam di sini bermakna kompleksnya arsitektur dimana banyaknya lapis tersembunyi (di sini lapis beda dengan susun lho).

Lama saya tidak bermain-main dengan JST, jadi agak tertinggal, padahal ini bidang yang menarik. Apalagi dengan munculnya Deep Learning. Selamat ber-JST ria.

Referensi

 

Cluster Data dari ArcGIS ke Matlab

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

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

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

Fungsi Keanggotaan (Membership Function)

Fuzzy Inference System (FIS) memiliki fungsi keanggotaan (MF) ketika mengarahkan masukan ke keluaran tertentu. MF yang banyak digunakan adalah linear (purelin), tangen sigmoid (tansig), atau logaritmic sigmoid (logsig). MF yang tersedia di matlab tersebut digunakan juga untuk Jaringan Syaraf Tiruan (JST). Oiya, yang benar “syaraf” atau “saraf” ya?

Untuk mengetahui persamaan matematis MF tersebut, ketik saja “help tansig“, “help logsig” atau “help purelin”, sesuai dengan MF yang akan dipelajari.

Tansig merupakan fungsi eksponensial denga nilai maksimal 1 (kondisi jenuh). Coba plot fungsi dengan kode yang dicontohkan oleh “help” tadi. Berikut merupakan hasil running-nya.

Jika skripsi/tesis dibebaskan memilih fungsi keanggotaan, lebih mudah menggunakan fungsi purelin atau berbentuk segitiga karena lebih mudah menghitungnya secara manual yang terkadang diminta membandingkan antara hitungan manual dengan program. Jika akan diimplementasikan, sebaiknya gunakan logsig atau tansig.

Menghitung Keluaran Fuzzy

Jika sebelumnya telah dibahas perhitungan keluaran JST, sekarang akan kita coba bahas perhitungan keluaran Fuzzy, atau sering disebut Fuzzy Inference System (FIS). Mungkin soal ujian akhir mata kuliah AI & Neuro-Fuzzy berikut ini bisa dijadikan pelajaran bagaimana menghitung keluaran FIS. Terutama bagaimana menghitung besar fungsi keanggotaannya.

SOAL:

In a simple fuzzy-servo control of a DC motor, only relative position error is used to calculate for the required relative average voltage of PWM signal from motor driver. Assume relative position error and relative average voltage of PWM signal, both varying from –1 to 1, are classified into 5 levels; Negative Big (NB), Negative Small (NS), Zero (Z), Positive Small (PS), and Positive Big (PB), when membership functions are shown in the below figures.

Tentukan Relative Average Voltage (RAV) ketika relative position error (RPE) menjadi 0.2, asumsikan fuzzy inference rule mengikuti hubungan berikut ini:

Relative Position Error         NB NS Z PS PB

Relative Average Voltage     PB PS Z NS NB

JAWAB:

Berdasarkan soal, relative position error yang 0.2 dijumlahkan secara grafis dan dihubungkan dengan rule yang disebutkan dalam soal.

Gambar di bagian atas, garis tebal 0.2 tidak memotong NB dan dengan demikian tidak ada nilai PB di sebelah kanan (menurut rule NB rpe= PB rav). Garis tebal 0.2 berikutnya memotong NS di titik vertikal lalu diarahkan ke grafik kanan membentuk luasan gambar PS yang diarsir (menurut rule NS rpe = PS rav). Dan diteruskan hingga fungsi keanggotaan RPE terakhir (paling kanan) yaitu PB.

Berikutnya dijumlah luasan RAV dari atas ke bawah membentuk gabungan bangun segitiga dan persegipanjang. Untuk menghitung luas dan titik berat perlu mengetahui luas tiap komponen serta titik berat dari bangun segitiga dan persegipanjang.

Hasilnya kira-kira sebagai berikut.

Titik Berat (Center of Gravity) berdasarkan rumus adalah ∑ (area x titik berat) / ∑ (area) akan menghasilkan titik berat itu sendiri. Cukup rumit juga menghitung manual, apalagi jika fungsi keanggotaannya bukan garis lurus melainkan gauss atau bell. Tetapi untuk prakteknya ya tidak dihitung manual. Gunakan saja fuzzy di Matlab untuk mengecek jawaban jika ingin berlatih. Bagaimana untuk rule yang memiliki operasi AND dan OR? Mudah saja, AND ambil yang terkecil, sementara OR ambil yang terbesar dari fungsi keanggotaan yang dioperasikan (AND atau OR).

Jadi lebih ribet menghitung Fuzzy dibanding JST menurut saya. Semoga bermanfaat.

Kluster Data Spasial dari ArcGIS/ArcView dengan Fuzzy C-Means (FCM)

Data spasial adalah data yang berupa koordinat geografis suatu elemen dalam peta. Data itu bisa berupa titik maupun polygon. Di sini kita akan mencoba data spasial berupa titik-titik lokasi berasal dari ArcGIS atau GIS tool lainnya sesuai dengan proyeksi yang digunakan. Apa itu proyeksi? Panjang ceritanya, sebaiknya baca buku tentang geographic information system (GIS). Untuk praktek dapat kita buat spasial data yang sudah ada dalam format shapefile (berekstensi *.shp). Untuk memudahkan proses operasi, siapkan direktori kerja di lokasi dimana shapefile itu berada.

Anda harus memiliki fungsi “shaperead” di Matlab, biasanya sudah include di dalamnya untuk versi-versi terbaru. Cara mengeceknya dengan mengetik “help shaperead” di command window, kalau tidak ada, Matlab akan memberi pesan bahwa fungsi shaperead tidak ada. Berikutnya kita akan mengkonversi data ini ke dalam data berekstensi “dat”.

Ok, pastikan file “commercial.dat” yang merupakan konversi workspace ke file “dat” berhasil tersimpan. Mengapa langkah ini diperlukan? Karena toolbox FCM yang kita gunakan berikut ini menggunakan data berekstensi dat ini. Sebenarnya jika menggunakan fungsi fcm dari command window tidak perlu mengkonversi ke dat file, bisa langsung dari workspace, tapi untuk pemula, lebih mudah menggunakan toolbox. Ketik “findcluster” di command window sehingga muncul jendela berikut ini.

Kebetulan toolbox tersedia dalam dua dimensi, sehingga cocok dengan data spasial. Untuk yang tiga dimensi sepertinya agak ribet dan harus mengatur sumbu x,y, z. Atau untuk dimensi >2 sebaiknya menggunakan fungsi dari command window. Ketik “load data” untuk memanggil data, pilih “commercial.dat” yang telah dibuat sebelumnya.

Perhatikan tiga titik hitam yang merupakan titik pusat tiga kluster yang akan kita bentuk. Anda bisa mengganti jumlah kluster, misalnya hanya dua saja dan tekan “start” kembali untuk mencari pusat kluster yang baru. Untuk menyimpan pusat kluster, dapat Anda lakukan dengan menekan “Save Center” lalu simpan dalam bentuk “dat”. Berikutnya tiga center ini akan coba kita buka dengan di ArcGIS di postingan yang akan datang, selamat mencoba. Lanjut baca : Konversi Mat-File ke Shapefile

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.

Octave – Matlab Versi Gratis

Lanjutan postingan sebelumnya yang kurang memuaskan nih, kita coba selain scilab. Silahkan donlot dari situs resminya, biar aman dari virus, sesuaikan dengan sistem operasi yang anda miliki.

Ada yang versi installer, ada yang portable, untuk lebih lengkap saya coba versi intaller saja (sekitar ratusan Mb).

Seperti biasa, khusus pemula klik saja next terus dan pilih yang default. Tunggu sampai proses instalasi selesai. Lisensinya berbasis GNU, apa itu GNU? Sebenarnya GNU itu kalo dibalik UNG dan kalo dibaca mirip UNIX kan? Sebenarnya UNIX itu rencananya open source, tetapi ditelikung sama vendor jadi berbayar, akhirnya rombongan penggemar open source “beraksi” dengan mengembangkan sejenis UNIX dengan nama UNG yang open source, hingga terciptalah Linux .. katanya. Eh selesai .. instalnya.

Coba dijalankan saja. Test dengan fungsi-fungsi dasarnya, apakah sama dengan matlab? Ternyata tampilan prosesnya agak jadul juga (muncul console window beberapa detik). Tampilannya, mirip-mirip juga sih dengan Scilab dan Matlab.

Ok, fungsi matrix dasar berfungsi dan sama dengan Scilab. Bagaimana dengan programmingnya? Pertanyaan yang sama dengan pembahasan Scilab diawal tulisan. Buka/Open direktori kerja .. kok agak lama ya prosesnya. Sebelumnya saya membuat program dengan bahasa Matlab sebagai berikut:

function y=latih(x)

y=x*2

end

Disimpan dengan nama “latih.m”, oke kita coba jalankan dengan Octave.

>> latih(3)

y = 6

ans = 6

Wow .. dapat dijalankan. Sepertinya octave lebih menarik dari Scilab. Bagaimana untuk program lainnya? Kita coba saja fungsi M-file yang ada di matlab, misalnya fungsi norm yang menghitung normal euclidean (jarak) antara satu object dengan lainnya. Yah .. ternyata fungsi norm ada juga di octave.

Ok, berhubung ada yang bertanya mengenai Fuzzy C-Means (FCM) akan kita coba menjalankan fungsi FCM Matlab di octave .. Hmmm mudah-mudahan berhasil. Mula-Mula kita harus latihan dulu membaca listing code matlab. Fungsi fcm di matlab kelihatannya sederhana tetapi dia memanggil banyak sekali fungsi-fungsi yaitu:

Copy saja seluruh file itu di direktori kerja Anda. Sebenarnya ketika kita menjalankan fungsi fcm di octave, dia akan memberikan pesan error di line tertentu, telusuri saja maka Anda akan menemukan fungsi lainnya yaitu distfcm, initfcm, dst. Ok .. jalankan sesuai instruksi pada help fcm.

  • data = rand(100,2);
  • [center,U,obj_fcn] = fcm(data,2);

Ketemu dah pusat clusternya:

  • >> center
  • center =
  • 0.59526 0.66670
  • 0.35972 0.27357

Octave

Mantap .. FCM dapat berjalan di octave .. Bagaimana dengan Jaringan Syaraf Tiruan? Fuzzy? Coba saja, ga dilarang kok .. Selamat mencoba dan menikmati software Octave yang open source dan gratis dengan bahasa Matlab.

Memahami Function Matlab

Kalo kita searching internet, bidang informatika ternyata banyak cabangnya dari yang cenderung ke hardware hingga yang cenderung ke software. Jika kita menjumpai seseorang dengan gelar S.Kom kita tidak bisa memastikan yang bersangkutan bisa mengutak-atik jaringan, merancang software, atau bidang-bidang spesifik lainnya. Apalagi jika gelarnya M.Kom atau Ph.D lebih spesifik lagi bidangnya.

Beberapa peneliti ingin mengetahui atau membandingkan dua jenis metode, tentu saja dengan alat ukur yang adil, dimana tidak membandingkan dua metode dengan dua bahasa yang berbeda. Oiya, beberapa literatur membedakan metode dengan algoritma, walaupun ada juga yang menganggapnya sama. Untuk memperbaiki kinerja suatu metode, beberapa peneliti menggunakan bahasa yang mudah, yaitu Matlab. Bahasa ini sulit dibeli oleh individu, dan biasanya institusi yang membelinya karena mahal. Belum lagi kontroversi dari sisi pendidikan dimana Matlab dituduh tidak melatih siswa untuk sungguh-sungguh belajar programming. Banyak pertanyaan-pertanyaan muncul mengenai kode bahasa matlab yang kebanyakan dalam bentuk function dan toolbox.

Berbeda dengan toolbox lain seperti WEKA, SPSS, dan sejenisnya yang melakukan proses data mining dengan menyembunyikan source code, Matlab sebenarnya menunjukan kode yang digunakannya. Jadi jika kita diminta menelusuri algoritmnya, tinggal buka saja M-file yang digunakan. Misalnya kita akan mengkluster dengan Fuzzy C-Means (FCM), secara sederhana kita dapat mencari kluster secara langsung baik lewat GUI atau function. Coba buka kode yang ada dengan mengetik edit fcm di command window. Jika muncul pesan, klik saja Yes.

Untuk bisa membaca kode tersebut, sedikit diperlukan “usaha”. Apalagi jika belum pernah sekalipun belajar bahasa pemrograman. Jika tidak pernah, maka yang disalahkan adalah institusi tempat mahasiswa belajar informatika, karena salah satu dasar seluruh jenis kurikulum informatika (TI, SI, SK, ILKOM) pasti belajar dasar-dasar pemrograman. Di tulisan yang lalu, saya menyinggung fungsi objective FCM. Nah dimanakah letak fungsi objective itu di function matlab?

Jika Anda teliti ternyata fungsi fcm memanggil fungsi stepfcm, maka buka lagi fungsi tersebut dengan mengetik edit stepfcm. Di situ dengan jelas fungsi yang dalam bentuk matematisnya adalah sigma.

Ternyata ada juga fungsi distfcm, ok. Buka saja dan pelajari lagi. Dan untungnya kita tidak terlalu pusing-pusing menerjemahkan karena ada baris komentar yang diawali dengan simbol % yang fungsinya menjelaskan satu line code.

Jika Anda ingin membuat dalam bahasa pemrograman open source, bisa menerapkannya di octave, scilab, dan sejenisnya yang dapat diunduh gratis dari internet. Ok, semoga bermanfaat.

Learning Vector Quantization (LVQ)

LVQ is another kind of competitive network that uses competitive and linear layer together (see past posting for competitive network). The winning neuron of the first stage is become a subclass. Then the second layer combines it into a single class. Many researcher use this kind network for signature identification.

The learning of LVQ is supervised learning. It needs a target as a basis of learning process. Use this script (LEARNING VECTOR QUANTIZATION) to practice your matlab skill in creating a LVQ network. Try to understand the syntax of lvq function by typing “help newlvq” on command window.

The above picture shows matlab respons to our train script function. You can see the IW and LW part of LVQ network using this script.

>> samplelvq.iw{1,1}

ans =

-0.1259 -0.0280

0.0862 0.1584

-0.0351 0.0306

>> samplelvq.lw{2,1}

ans =

1 1 0

0 0 1

Competitive Network

Competitive network uses Hamming Network which is contained feedforward and recurrent layer.

Open your Matlab and try this lab example. Just copy and paste to see how this kind of network worked. Newc is a function from matlab to create a competitive network. Use this Competitive Network file for practise.

Try to train a competitive network. After training the network, try to simulate the trained network to find the result from a sample input.

This is a result from simulation of samplec on Pc. Type on command window “help newc” to study the syntax of newc function from your Matlab.

>> Yc1 = sim(samplec, Pc)

Yc1 =

(2,1) 1

(2,2) 1

(2,3) 1

(1,4) 1

(1,5) 1

(1,6) 1

Konversi Scope ke Figure-2

Sambungan dari postingan dua tahun yang lalu (https://rahmadya.com/2012/04/12/konversi-scope-ke-figure-pada-matlab/). Berikut ini akan saya coba merubah scope yang tampilannya tidak bagus untuk dicetak menjadi figure yang lebih nyaman, terutama dari sisi penggunaan tinta printer. Maklum background scope yang hitam membuat tinta printer cepat habis. Selain itu figure sangat mudah untuk dimanipulasi seperti menambahkan garis panah yang menjelaskan suatu lengkung kurva, dan sebagainya.

Gambar di atas adalah salah satu contoh yang akan kita buat figure-nya. Jika dijalankan dan menekan dobel scope bernama Grafik2 (panah ungu) Anda akan melihat grafik berikut ini (contoh kasus perbandingan beberapa model lewat mekanisme multiplexing):

Tampak grafik yang mirip tampilan alat ukur listrik. Sebenarnya ketika kita menjalankan model, Matlab dapat merekam hasilnya jika kita melakukan inisiasi pada scope. Pada gambar di atas coba Anda klik icon parameters. Tekan tab “Data history“.

Centang “Save data to workspace” agar setiap model di-running akan menyimpan hasilnya dari variabel “keluaran“, dengan format “Array“. Jika Anda tidak percaya, setelah di running, Lihat Matlab, Anda akan menemukan satu variabel baru yang muncul di workspace (jendela ini secara default terletak di pojok kanan, kalo belum diutak-atik).

Sebenarnya tugas sudah selesai, karena Matlab sudah menyediakan matrix keluaran yang berisi data yang merepresentasikan grafik pada scope. Coba saja anda ketik pada command window> keluaran.

Tampak enam kolom yang merepresentasikan garis pada scope. Yang mana saja? Tentu saja yang membuat model yang tahu. Perbandingan dari gabungan beberapa kontroler memang sulit membedakan, tapi jika kita sudah tahu jenis keluaran di satu kontroler, untuk perbandingan pasti tahu dong. Tapi kalau dilihat sepintas, kolom pertama itu time (waktu), kolom kedua itu pasti yang berwarna kuning (karena konstant 25). Coba kita buat grafik antara kolom satu dengan kolom dua terlebih dahulu:

>plot(keluaran(:,1),keluaran(:,2))

Apaan tuh? Jangan bingung. Jika kita akan membuat plot sumbu horizontal, x, dengan sumbu vertikal, y, maka formatnya adalah plot(x,y). Tapi di sini sumbu horizontal-nya keluaran(:,1), maksudnya adalah seluruh baris kolom ke-1. Begitu juga keluaran(:,2) artinya seluruh baris kolom kedua. Hasilnya adalah sebagai berikut.

Lanjutkan dengan membuat plot dari kolom kesatu dengan ketiga, keempat, dan seterusnya hingga keenam. Eiit.. jangan lupa mengetik hold, agar gambar sebelumnya tidak terhapus.

>hold

>plot(keluaran(:,1),keluaran(:,3)

>plot(keluaran(:,1),keluaran(:,4)

Terus hingga muncul hasil sebagai berikut. (Note: Tidak perlu diketik semua, cukup tekan panah atas di keyboard dan edit angka terakhirnya).

Kok ada tulisannya .. Ah itu gampang, tinggal insert – Text Arrows aja dan arahkan ke kurva yang akan anda rinci, termasuk x-label dan y-labelnya.

Membuat Program Sederhana Fuzzy

Sudah lama tidak menulis tentang soft computing, maklum kesibukan luar biasa karena kuliah. Kebetulan kali ini saya mengambil mata kuliah Artificial Intelligent and Neuro-Fuzzy. Materi ini membahas seluruh ilmu soft computing, dimulai dari syaraf tiruan, fuzzy, algoritma genetika, hingga turunannya seperti particle swarm, simulated annealing, dan lain-lain. Kali ini saya hanya akan meneruskan tulisan saya yang dulu dengan menambah satu contoh aplikasi, mengingat banyak yang membutuhkan.

Untuk menjalankan aplikasi ini, letakkan di folder kerja Anda (current directory) setelah diekstrak, kemudian jalankan dengan mengetik nama file *.m di command window. Untuk melihat dan mengutak-atik script dengan mengetik edit <nama file *.m> serta untuk melihat alur logika fuzzy dengan mengetik fuzzy <nama *.fis>. Selamat mencoba.

beasiswa

Membuat JST dengan Neural Network Fitting Tool (nftool)

Data Mining/06.05.2013/Sistem Informasi

Matlab menyediakan fasilitas JST yang lebih spesifik dari sebelumnya, yaitu fitting, clustering, dan Pattern recognition. Sekarang kita coba melatih data berikut ini dengan nftool. Buat dengan excel setelah itu pindahkan ke workspace dengan perintah xlsread. Misalnya, nama file excel-ya ‘input.xlsx’. Misalnya kolom A Indeks Prestasi Mahasiswa, Kolom B Tingkat Kemiskinan dan C mendapat beasiswa atau tidak (beasiswa = 1, Tidak Beasiswa = 0).

Berikutnya masuk ke Command Window, masukan beberapa langkah berikut ini untuk membuat data masukan dan target yang akan digunakan untuk pelatihan.

  • input=xlsread(‘input.xlsx’);
  • in=[input(:,1) input(:,2)];
  • out=input(:,3);

Berikutnya jika in dan out sudah ada di workspace kita, panggil nftool untuk membuat JST dan melakukan pelatihan. Ketik nftool di command window. Masukan input dan outputnya sesuai dengan variabel yang telah dibuat. Jangan lupa klik jumlah record berdasarkan baris atau kolom. Biasanya, jika belum dicentang, tombol next tidak bisa ditekan yang artinya antara input dan output masih ada kesalahan. Klik Next, hingga muncul tampilan sebagai berikut.

 

Berikutnya kita lakukan pelatihan (training) dengan metode Backpropagation. Klik tombol ‘Train’.

Setelah pelatihan selesai, jangan lupa menyimpan hasil pelatihan tersebut ke workspace dengan menekan tombol ‘Save Result‘.

Berikutnya uji dengan beberapa masukan, apakah hasilnya tepat? Untuk menguji hasil pelatihan dapat dilakukan dengan menguji input yang dilatih, apakah sesuai dengan target atau tidak? Gunakan kode berikut.

Perhatikan, hasil antara kolom kiri dan kanan harus sama. Perbedaan menandakan ada kesalahan pada hasil pelatihan. Tetapi jarang diperoleh hasil pelatihan yang memiliki akurasi 100%. Jika ingin melihat Surface, gunakan kode berikut di Command Window untuk melihat hasil surface beragam kemungkinan masukan.

  • plot3(1,1,1)
  • hold
  • Current plot held
  • >> grid
  • >> for i=1:40
  • for j=1:40
  • x=i/10;y=j/10;
  • k=sim(net,[x;y]);
  • if k>0.5
  • plot3(x,y,k,’r*’)
  • else
  • plot3(x,y,k,’b*’)
  • end
  • end
  • end

Wilayah berwarna merah berdasarkan kode di atas masuk dalam kategori memperoleh beasiswa “1” dan biru masuk kategori tidak mendapat beasiswa “0”.