Tipe Machine Learning

Walaupun kecerdasan buatan (Artificial Intelligent), Machine Learning, dan Deep Learning berbeda tetapi satu sama lain berhubungan. Deep Learning, yang dimotori oleh Jaringan Syaraf Tiruan lapis banyak, adalah salah satu jenis Machine Learning. Machine Learning itu sendiri adalah salah satu jenis dari kecerdasan buatan.

Machine Learning yang merupakan proses induksi ada tiga jenis. Penerapannya beragam, dari pengenalan gambar, pengenalan suara, pengenalan bahasa, dan lain-lain. Berikut ini jenis-jenisnya:

1. Suppervised Learning

Kebanyakan Machine Learning diterapkan pada jenis ini. Alur prosesnya antara lain: 1) memilih basis pengetahuan untuk menyelesaikan problem. Bandingkan jawaban dengan hasil sesungguhnya, 2) jika jawaban salah, modifikasi basis pengetahuan. Langkah 1) dan 2) diulangi terus hingga jawaban mirip dengan hasil sesungguhnya. Basis pengetahuan itu sendiri diistilahkan dengan Model. Jika disimpulkan suppervised learning memiliki pola:

{ input, correct output }

Dua tipa aplikasi terkenal dari machine learning jenis ini adalah klasifikasi dan regresi. Jika klasifikasi membagi dalam kelas-kelas yang diskrit, regresi bukan dalam kelas melainkan harga tertentu. Masalah yang sering dijumpai adalah Overfitting, yaitu adanya anomali dimana akurasi training yang bagus ketika diaplikasikan dalam kondisi real jatuh. Hal ini terjadi karena proses training tidak mampu menghasilkan generalisasi dari data dalam artian terlalu kaku mengikuti data training.

Namun terkadang klasifikasi dan regresi bekerja sama membentuk sistem seperti support vector regressin, juga neural network regression. Biasanya mengklasifikasi dulu baru meregresi hasil pastinya.

2. Unsuppervised Learning

Berbeda dengan suppervised learning, pada unsuppervised learning tidak diperlukan hasil sesungguhnya (correct output). Pada mulanya hal ini sulit dimengerti, tetapi dapat diterapkan untuk kasus yang memang tidak ada hasil sesungguhnya. Polanya adalah sebagai berikut:

{ input }

Salah satu representasi dari aplikasi unsuppervised learning adalah pengklusteran (clustering) dimana data training diinvestigasi karakteristiknya sebelum dikategorisasi.

3. Reinforcement Learning

Machine learning ini memasukan aspek optimasi dalam pembelajarannya. Jadi selain input, beberapa output dengan grade/kualitasnya digunakan untuk training. Biasanya diterapkan dalam bidang kontrol dan game plays.

{ input, some output, grade for this output }

Clustering dan Classification

Dua aplikasi tersebut serupa tapi tak sama. Untuk jelasnya kita ambil kasus pembagian kelas siswa menjadi IPA dan IPS. Jika kita memiliki data dengan label (output) IPA jika nilai IPA lebih besar dari IPS dan begitu pula sebaliknya kelas IPS jika nilai IPS lebih besar dari IPA, maka karena proses learningnya memiliki target/label/output, maka masuk kategori suppervised learning dan otomatis masuk domain klasifikasi. Namun jika kebanyakan guru IPA-nya “killer”, maka dikhawatirkan seluruh siswa masuk kelas IPS. Disinilah peran pengklusteran. Di awal kita tidak memiliki output tertentu, biarlah data yang membagi menjadi dua, baru diselidiki mana kelompok kelas IPA mana IPS. Tetapi waspadalah, jangan sampai kita membagi dua kategori (cluster) yang salah, bukannya IPA dan IPS malah kelas IPA dan IPS yang bagus dan kelas IPA dan IPS yang jelek, alias membagi siswa menjadi dua kategori siswa pintar dan siswa yang perlu lebih giat belajar (kata Kho Ping Hoo tidak ada orang pintar dan bodoh, tetapi tahu dan tidak tahu). Semoga bermanfaat.

Iklan

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.

 

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.

Prinsip Kerja Adaptive Neuro Fuzzy Inference System (ANFIS)

Adaptive Neuro Fuzzy Inference System (ANFIS) menggabungkan prinsip kerja Jaringan Syaraf Tiruan (JST) dengan Fuzzy Inference System (FIS). Dengan menggabungkan ANFIS denang JST diharapkan dapat meminimalisir kelemahan masing-masing metode. Kedua metode tetap menggunakan prinsip machine learning.

Plus Minus ANFIS

FIS yang mengharuskan terlibatnya expert dalam menyusun rule, pada ANFIS tidak lagi diperlukan. ANFIS sendiri selain mampu mengolah angka numerik, juga pengetahuan berbasis bahasa (linguistic). Selain itu, ANFIS lebih transparan terhadap pengguna dibanding JST yang seperti kotak hitam (black box). Hal ini karena rule hasil olah ANFIS dapat diketahui oleh pengguna. Namun kebanyakan riset menunjukan bahwa JST lebih akurat dibanding ANFIS. Di antara dua jenis FIS (mamdani dan sugeno), untuk ANFIS sugeno lebih dianjurkan karena proses lebih cepat.

Bentuk ANFIS

Berikut diambil dari jurnal internasional yang membahas cara kerja ANFIS [1]. Mirip dengan JST, ada juga layer dalam ANFIS tetapi jumlahnya rata-rata lima lapis seperti gambar berikut:

Contoh di atas adalah ANFIS dengan dua masukan dan satu keluaran (f). Berikut keluaran (diberi simbol O besar) di tiap-tiap lapis.

Lapis Pertama

Lapis pertama berfungsi mengkonversi angka crisp menjadi bilangan fuzzy dengan menggunakan fuzzy sets. Keluarannya adalah:

Lapis Kedua

Jika pada lapis pertama hanya melibatkan tiap-tiap masukan, pada lapis kedua tiap masukan menuju lapis yang sama guna mengetahui kekuatan penyalaan (firing strength). Fuzzy Sets dikalikan antara satu masukan dengan masukan lainnya dengan hubungan sebagai berikut:

Lapis Ketiga

Pada lapis ketiga dilakukan perhitungan normalisasi sebelum diterapkan ke lapis keempat. Normalisasi adalah proses pembobotan ulang agar diperoleh total/max bernilai satu.

Lapis Keempat

Setelah pembobotan yang telah dinormalkan selesai, proses dilanjutkan dengan mengalikan dengan fungsi yang melibatkan masukan (x dan y) untuk menghasilkan keluaran yang sudah dalam bentuk CRISP.

Lapis Kelima

Langkah terakhir adalah dengan mengakumulasi hasil dari lapis keempat (untuk dua rule).

Sementara untuk metode learning, dua metode bisa digunakan antara lain: backpropagation dan hybrid. Prinsipnya adalah meminimalisir error yang terjadi. Ada dua metode penghitungan error: 1) Mean Absolute Percent Error (MAPE) dan 2) Mean Absolute Deviation.

Reference

[1]    M. Şahin and R. Erol, “A Comparative Study of Neural Networks and ANFIS for Forecasting Attendance Rate of Soccer Games,” Math. Comput. Appl., vol. 22, no. 4, p. 43, 2017.

 

Penjelasan Sederhana Jaringan Syaraf Tiruan – Kasus Logika OR

Dulu sempat ambil mata kuliah “Artificial Intelligent & Neuro-Fuzzy” dengan buku referensi yang digunakan adalah “Neural Network Design” karangan Hagan. Materinya cukup berat karena satu buku tersebut harus dikuasai dalam setengah semester (sampai UTS/Midterm Examination). Selain itu buku tersebut sepertinya ditujukan untuk level advance (lanjut). Postingan ini bermaksud menjelaskan secara sederhana prinsip kerja jaringan syaraf tiruan. Kasus yang dijadikan contoh adalah bagaimana jaringan syaraf tiruan (JST) sederhana mampu menjalankan Logika OR.

Gambar berikut adalah JST dengan jumlah neuron hanya satu buah. Neuron adalah sel di otak yang memiliki kemampuan menyimpan dan mentransfer informasi. Disimpan dalam bentuk bobot dan bias serta mentransfer dengan fungsi aktivasi.

W1 dan W2 adalah bobot yang mengalikan tiap input yang akan diteruskan ke neuron lainnya. Sementara itu b adalah bias yang menjumlahkan total masukan yang telah dikalikan bobot. Pada gambar di atas fungsi aktivasi belum dilibatkan. Persamaan matematis gambar di atas adalah sebagai berikut:

Dengan cara training, misal backpropagation, W dan b dapat ditemukan. Tetapi sebenarnya dengan intuisi kita dapat menemukan bahwa W1 dan W2 berharga masing-masing “1” dan biasnya “nol”. Kita coba memasukan ke persamaan y di atas diperoleh akurasi yang baik hanya saja di bagian akhir, yaitu ketika masukan X1 dan X2 kedua-duanya “1” yang seharusnya keluaran y = 1 di sini berharga “2”. Oleh karena itu diperlukan fungsi aktivasi seperti gambar di bawah ini.

Di antara ketiga fungsi aktivasi, yaitu tangen sigmoid, tangga, dan purelin, yang cocok dengan kasus kita adalah tangen sigmoid. Di sini tangga bisa diterapkan, tetapi agak sulit jika digunakan untuk backpropagation yang membutuhkan diferensiasi. Tangen sigmoid (juga log sigmoid) jika diturunkan berharga -1, mudah untuk dikalkulasi saat proses pembobotan ulang (rambat balik dari target ke input). Sementara purelin tidak cocok karena jika input 2 keluarnya akan 2 juga (jika y=x persamaan purelin-nya). Dengan menambah fungsi aktivasi sebelum ke output, nilai 2 dengan fungsi tangen sigmoid bernilai 1 sehingga sesuai dengan table kebenaran logika OR. Gambar di atas sebenarnya cuplikan video yang saya upload di youtube berikut ini:

 

 

 

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.

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.