Buy Me A Coffee!

GoPay

Sunday, May 11, 2014

Lecture Note: Deduktif

Lecture note kali ini dari pak Lala Septem Riza lagi. Beliau memang paling rajin membuat tulisan ini sih di grup. Salut deh! Tulisan beliau kali ini mengenai cara berpikir secara deduktif. Cara berpikir seperti ini diperlukan oleh seorang ilmuwan. Ciye.

Oh ya, kutipan dari grup yang saya muat ulang di blog ini mungkin tidak berurut karena saya mengambilnya secara langsung tanpa memperhatikan keterurutan tanggal :).

Baiklah, mari langsung kita simak tulisan beliau ya!

[LECTURE NOTE] Kali kita akan mendiskusikan pasangan dari induktif, yaitu deduktif. Jika hipotesa induktif di bangun dari proses generalisasi atau bottom up, maka deduktif adalah top down. Pada tema induktif di LECTURE NOTE sebelumnya, kita punya contoh tentang mangga dan angsa. Sekarang, kita coba rasakan bedanya dengan contoh deduktif berikut ini. Ketika, saya jalan-jalan di suatu tempat yang tak saya kenal, tiba - tiba saya lihat ada pohon mangga yang berbuah lebat, saya katakan pada pemiliknya (dimana saya juga tak kenal beliau): "Pak, saya yakin deh mangga di pohon ini pasti manis rasanya". Saat itu juga, saya punya hipotesa deduktif bahwa mangga di pohon tersebut manis, karena saya belum pernah mencicipi satupun dari mangga itu. Pertanyaannya kemudian, bagaimana kita tahu kalau hipotesa kita benar ttg mangga tersebut ? Jawabannya adalah selama anda belum bisa menemukan mangga yang tak manis rasanya, maka hipotesa anda diterima sebagai kebenaran. Itulah deduktif. Deduktif mengharuskan kita memiliki hipotesa lebih dahulu. Kita uji hipotesa itu, dengan cara "mempertanyakannya" dan mencari "kesalahan" dari hipotesa itu. Satu saja kita temukan contoh data yang membuat hipotesa kita tak valid, maka hipotesa kita jadi gugur. Sebaliknya, selama kita belum bisa menemukan kesalahannya maka hipotesa tersebut kita terima. Jadi, sudah terasa perbedaannya dengan induktif, bukan?
Pertanyaan berikutnya: apakah kita bisa buat sembarang hipotesa ? Tentu tidak! Hipotesa yang kita buat HARUS hipotesa yang bisa bernilai SALAH. Contoh hipotesa yang tak bisa memiliki nilai salah adalah "Sebab bumi bulat adalah karena bumi mencintai bulan yang juga berbentuk bulat". Secara objektif, kita sulit membuktikan benar atau salah hipotesa ini, maka hipotesa seperti ini tak bisa kita gunakan sebagai hipotesa di deduktif.
Dari sisi matematika, ada mekanisme sehingga deduktif bisa memiliki kebenaran ABSOLUT, tapi kita tidak membahasnya disini. Sedangkan tinjauan science yang umum, kebenaran deduktif masih relatif. Kenapa relatif ? karena tergantung dari temuan kesalahan, jadi bisa saja sekarang masih valid, tapi setahun kemudian ditemukan data/fakta yang menggagalkan hipotesa. Dan inilah salah satu kelemahan deduktif, "kebenaran yang tak bisa dipastikan".
Bagian terakhir ini, saya ingin mengajak berdiskusi, kira - kira pernahkah kita melakukan induktif dan deduktif di Ilmu Komputer ? Bagi mahasiswa pendidikan yg sedang/sudah tugas akhir, mungkin tak lagi asing, tapi bagi mahasiswa lain, mungkin tak menyadarinya. Jika anda suka mata kuliah data mining, anda pasti ingat betul tentang metode clustering (misal, c means, fuzzy, dll). Ketika kita mengenerate pusat kluster dari ribuan baris data, saat itulah kita melakukan induktif. Hipotesa yang kita bangun adalah pusat kluster tersebut. Kemudian, ketika kita punya data uji (data baru), trus kita ingin mengetahui data tersebut ada di kluster mana, maka pada saat itulah kita melakukan deduktif. Begitu juga, bagi penggemar artificial neural network, pada saat learning process kita sebenarnya mencari hipotesa (dalam hal ini berupa fungsi) dengan cara mencari bobot (w) yang tepat. Sedangkan deduktif, ketika kita melakukan testing atas bobot tersebut dengan testing data. Dan masih banyak contoh lain yang menunjukkan bahwa induktif dan deduktif biasa kita gunakan. Kalau begitu, sedikit kejawab bukan bahwa disadari atau tidak, anda adalah seorang scientist. Semoga ini bisa jadi berita yang menggembirakan, horeee kita adalah scientist, coolll... hehehe 

Lecture Note: Pemrograman

Sekilas lecture note
Saya beruntung masuk di sebuah grup Facebook jurusan yang isinya bagus-bagus. Di dalam grup ini seringkali ada post yang menggunakan kode [LECTURE NOTE] di awal tulisannya. Berhubung grup ini tertutup dan lecture note yang disampaikan bagus-bagus, saya rasa ada baiknya jika disimpan, hehe

Lecture note ini dibuat oleh pak Lala Septem Riza. Di postingan mengenai Lecture Note beliau menghimbau untuk membuat tulisan pendek yang bermuatan keilmuan. Idenya bagus ya? Jadi nggak bosan dan ngegeje kalau buka Facebook.

Lecture note kali ini disampaikan oleh pak Lala sendiri mengenai pemrograman. Berikut isinya

[LECTURE NOTE] Dalam belajar, satu keahlian yang mesti kita punya agar dapat hasil yang maksimal adalah kemampuan memisahkan mana yang penting dengan yang tidak penting. kalau diterjemahkan dalam satu kata adalah "simplicity" (penyerdehanaan). Karena dari diskusi para dosen, matkul algorithma dan pemrograman adalah mata kuliah favorit mahasiswa (terutama di tahun awal) maka kali ini saya mencoba membuat penyerdehanaan dalam belajar algoritma dan pemrograman. Semoga saja bener-bener sederhana sehingga terlihat jelas mana yang penting. Bagi teman-teman yang punya ide lain mangga ditambah dgn tujuan membuat semakin sederhana yaa .
Ada dua hal yang penting di bahasa pemrograman, selain dari dua ini adalah "tak penting", yaitu:
1. PENYIMPANAN DATA (i.e., data type/data structure): dikala kita membuat program, kita harus menyimpan data kita khan. Maka pertanyaan pertama adalah pake apa kita simpan data kita ? Inilah yang harus kita pelajari. Misal,
- Java: int, double, String, Array, List, Set, object, dll.
- Python/R/MATLAB/OCTAVE: list/vector, matrix, dll.
2. PROCEDURE: Di bagian ini kita harus belajar IDE DASAR dari prosedur, fungsi, kondisi (if), pengulangan (for), dan langkah - langkah (algoritma). Ini memang agak tricky tapi sekalinya kita paham maka kita bisa menggunakannya untuk semua bahasa pemrograman yang ada. Agar kita paham dengan bagian ini, kita perlu menjawab 3 pertanyaan berikut: apa data masukan kita (input) ? apa yang mau kita lakukan dengan data masukan ini (proses) ? trus apa yang mau dikeluarin (output) ?
Percayalah, dua point itu saja yang penting. Lhoo trus apa kita tak perlu belajar sintax ? saya katakan kita perlu tahu sintax, tapi SINTAX ITU GAK PENTING, jadi ndak usah dipusingkan . Analoginya gini: Walau anda punya kamus bhs Spanyol, Inggris, dan Perancis tapi jika anda tak punya sesuatu yang mau diucapkan, kira - kira anda bakal berbicara tidak ? . Tapi, jika anda punya sesuatu yang mau diucapkan, anda tinggal buka kamus dan kemudian baca/bicara. Kalau grammarnya salah, kan paling compiler error, malah kita bakal ditunjukin di baris mana salahnya, bukan . Sintax bisa berbeda-beda, sehingga jika kita ingin menguasai beberapa bahasa pemrograman, maka kita harus tak perlu lagi merisaukan tentang sintax.
Contoh: Kita diberi suatu deret bilangan, dan kita diminta untuk mengurutkan.
Sang Otak bekerja: mmm bilangan ini mau disimpan dimana ya ? Ok deh, saya pilih vector saja. Habis itu,bagaimana saya mengurutkannya ya ? Mengurutkan kan artinya ambil 2 bilangan lalu bandingkan (if). Bagian kiri kasih yang kecil, sedangkan yang besar taruh dikanannya. Karena saya mau urutkan semuanya, yaa saya perlu bandingin semuanya, kalau gitu saya ulangi saja semuanya (for). Done!!!
Terlihat bukan pertanyaan dan jawaban dari point pertama dan kedua diatas. Trus bagaimana cara naruh ke vector, cara ambil bilangan ke vector, bagaimana cara nulis if dan for ? ahh gitu aja kok repot, baca halaman tentang vector, if, dan for.... selesai kekeke .
Paragraph akhir ini, saya ingin katakan bahwa (i) jangan terlalu risau dengan algoritma yang efektif/optimal, karena itu hanya bisa dicapai SETELAH anda menulis algoritma yang jorok, lemot, bahkan bodoh, tapi memberi nilai yang sesuai. (ii) pikirkan untuk memberi comment di tiap barisnya, bukan agar orang lain mengerti, tapi agar anda yakin dengan yg anda tulis . Selamat belajar yaa.

Friday, May 9, 2014

Apa yang saya lakukan ketika saya bosan?

Tadi siang saya bertemu teman saya di mesjid Al-Furqon, mesjid yang terletak di Universitas Pendidikan Indonesia. Mesjidnya ada wifi nya loh. Ini kok jadi ngomongin mesjid? Anyway, nama teman saya ini Arifin, sering dipanggil Ipin. Saat saya sedang melenggang menuju kehampaan seketika Ipin memanggil dengan lirihnya, "Giri..."Al-Furqon bergeming, dunia temaram.

CUKUPLAH KELEBAIAN INI!

Dan kami pun beranjak di percakapan ringan. Beberapa percakapan kemudian Ipin menanyakan ke saya "Kalau kamu bosan, kamu ngapain?"

Kalau dipikir-pikir, selama ini saya kalau bosan ngapain ya? Coba saya list disini ya

  1. Main game. Game yang saya mainin sih "Osu!" Tahu "Osu!"?  "Osu!" adalah permainan komputer yang bergenre rhythm game. Kok mainannya itu? Soalnya cuma itu game yang ada di komputer saya. Kok gitu? Soalnya gamenya gratis dan rame.
  2. Buka Facebook. Wandering around and find something interesting. Tiap hari sih melakukan ini. Apa artinya tiap hari bosen ya?
  3. Menggambar. Apapun lah, terus di share di Facebook. Balik lagi ke Facebook. Halah.
  4. Latihan Biola. Melupakan suara dunia yang bising dengan bermain musik. Mungkin bisa disamakan dengan makan narkoba? Tapi saya tidak pernah makan narkoba. Pernahnya makan bubur. Jadi mungkin bisa disamakan dengan makan bubur. Yang pakai suwir-suwir ayam. Hmm.. apalagi kalau pedes.
  5. Bikin game. Anjir. Haha. Soalnya kalau bikin game bisa belajar dengan menyenangkan. Bahkan, saya belajar pemrograman pertama kali gara-gara bikin game.
  6. Nonton tv. Biasanya nih ya jam 18:30 di Net TV itu ada "Tetangga Kok Gitu?", terus dilanjutkan "Sosmed" di Kompas TV, dilanjutkan lagi "Ini TalkShow" di Net TV, kemudian maraton film deh di Global TV.
  7. Jalan-jalan. Jalan nggak jelas aja, pokoknya jalan-jalan.
  8. Jajan. Jajannya juga nggak jelas. Jajan aja.
  9. Ngerjakan skripsi. Ini kok ditaruh di paling akhir sih.
Demikian. Wassalam.

Thursday, April 10, 2014

Brute-Force Search Pada Pencarian Kata Moe

Di Facebook saya mendapatkan sebuah status dari adik tingkat. Statusnya seperti ini

M E O E M M E O O M O M E E O O E M E O O M O M E M E M E M E O
E M E O E E M E O O M O M E M E O E O E M E M E M E O E O M O O
O M O M E E O O E M E M E M E O E M E O E M E M E O O O O M E M
M E O E O E O E M E O E M O M E E O E M E O E O M O E M O M M O
E M E O O M O M E M E M E M E O O M E M M E O O M O M E E O O E

cari kata 'MOE' secara vertikal atau horizontal
jika menyelesaikan < 1 menit, berarti IQ anda diatas rata2 *
jika menyelesaikan > 1 dan < 3 menit, berarti IQ anda rata2 **
jika menyelesaikan > 3 menit, berarti IQ anda dibawah rata2 ***

* dihitung berdasarkan feeling
** ga dihitung, kayanya pas aja
*** yang ini liat dari horoskop (bohong)
Secara komputasional ini bisa dipecahkan dengan menggunakan Brute Force Search

Brute-Force Search

Brute Force Search adalah metode pencarian dengan mengecek setiap kondisi yang ada pada kasus (Wikipedia, 2014. Hahaha). Dalam kasus ini kita mencari kata "MOE" pada matriks tersebut secara horizontal dan vertikal.

Sekarang kita coba analisis. Mari kita hilangkan spasi pada matriks tersebut.
MEOEMMEOOMOMEEOOEMEOOMOMEMEMEMEO
EMEOEEMEOOMOMEMEOEOEMEMEMEOEOMOO
OMOMEEOOEMEMEMEOEMEOEMEMEOOOOMEM
MEOEOEOEMEOEMOMEEOEMEOEOMOEMOMMO
EMEOOMOMEMEMEMEOOMEMMEOOMOMEEOOE

Matriks ini kita sebut sebagai matriks I. Dengan penyederhanaan ini dapat diketahui matriks tersebut berdimensi 5x33.

Iterasi yang dilakukan sepanjang matriks adalah dengan menggeser array berukuran 1x3 berisi kata "MOE" untuk dicek apakah terdapat urutan huruf yang secara berkesinambungan. Matriks pengecek tersebut adalah sebagai berikut:

MOE

Matriks tersebut kita sebut sebagai matrik K.

Karena yang kita cari adalah 3 huruf dan pencarian dilakukan dengan bergeser mencari 3 huruf di setiap elemen maka jika (M, N) adalah dimensi matriks I dan (m,n) adalah dimensi matriks K dan karena pencarian baik secara horizontal maupun vertikal menggunakan banyak huruf maka  pencarian dilakukan sebanyak ((M-(m*n))+1) + ((N-(m*n))+1).

Program dari pencarian ini adalah sebagai berikut:
#include <iostream>

int main(){

 int baris = 5;
 int kolom = 33;

 //inisialisasi matriks kasus
 char huruf[baris][kolom];
 strcpy(huruf[0],"MEOEMMEOOMOMEEOOEMEOOMOMEMEMEMEO");
 strcpy(huruf[1],"EMEOEEMEOOMOMEMEOEOEMEMEMEOEOMOO");
 strcpy(huruf[2],"OMOMEEOOEMEMEMEOEMEOEMEMEOOOOMEM");
 strcpy(huruf[3],"MEOEOEOEMEOEMOMEEOEMEOEOMOEMOMMO");
 strcpy(huruf[4],"EMEOOMOMEMEMEMEOOMEMMEOOMOMEEOOE");

 char kata[3];
 strcpy(kata,"MOE");

 int kolomKata = 3;

 int banyakKata = 0; 

 int i,j, ii;
 bool benar = false;

 
 // bergerak di sepanjang elemen
 for (i = 0; i < baris; i++){
  for (j = 0; j < kolom ; j++) {
   
   //pencarian horizontal   
   if (j < kolom - (kolomKata) + 1){
    benar = true;   
    ii = 0;
    while (ii < kolomKata && benar) {
     if (!benar || ! (huruf[i][j+ii] == kata[ii]) )  {
      benar = false;
     }else{
      ii++; 
     }
    }

    if (benar) {
     banyakKata++;
    }
   }
   


   //pencarian vertikal

   if (i < baris - kolomKata + 1){
    benar = true;   
    ii = 0;
    while (ii < kolomKata && benar) {
     if (!benar || ! (huruf[i+ii][j] == kata[ii]) )  {
      benar = false;
     }else{
      ii++; 
     }
    }

    if (benar) {
     banyakKata++;
    }
   }
  }

 }

 printf("Banyak kata %s adalah %d\n", kata, banyakKata);

 return 0;
}


dari program tersebut didapat hasil sebagai berikut


Banyak kata MOE adalah 3

Demikian tentang Brute-Force Search kali ini. Terima kasih! *peace*

Monday, March 24, 2014

Sepintas Pertanyaan Mengenai Jaringan Syaraf Tiruan

Saya baru saja membaca tulisan tentang jaringan syaraf tiruan oleh Andrej Kenker et Al. Tulisan beliau berjudul "Introduction to the Artificial Neural Networks". Selain itu saya juga baru saja membaca pembahasan serupa berjudul "Artificial Neural Networks: A Tutorial" oleh Anil K. Jain dan Jianchang Mao.

Kedua tulisan tadi merupakan tulisan yang membahas dasar penjelasan dan penggunaan jaringan syaraf tiruan. Jaringan syaraf tiruan itu sendiri adalah satu kesatuan algoritma dan struktur data yang membentuk kecerdasan buatan (AI) meniru cara kerja syaraf makhluk hidup.

Dari kedua tulisan tadi ada pertanyaan yang membuat saya penasaran:
1. Bagaimana kita memilih topologi yang benar?
2. Bagaimana kita menentukan algoritma learning yang benar?

Hal yang saya tangkap dari kedua tulisan tadi bahwa pemilihan topologi dan algoritma learning disesuaikan dengan permasalahan yang akan dipecahkan. Permasalahan yang saya angkat adalah mengenai pengenalan gambar huruf. Berarti ini adalah permasalahan klasifikasi yang berarti dilakukan dengan supervised learning. Namun topologi apa yang harus diambil? Andrej Kenker et Al menyebutkan pemilihan classifier (termasuk di dalamnya jenis topologi jika menggunakan jaringan syaraf tiruan, begitu yang saya tangkap) adalah still more art than science, yang berarti mengandalkan intuisi untuk menentukan jaringan yang tepat.

Saya membaca sebuah jurnal dari Farhad Soleimanian et al berjudul "Artificial Network Application in Letters Recognition for Farsi/Arabic Manuscripts."Dari tulisan beliau disebutkan bahwa penelitian pengenalan huruf arab yang dilakukan menggunakan topologi multilayer perceptron dan menggunakan back propagation learning.

Saya rasa saya akan mengikuti jejak penelitian Farhad Soleimanian dalam melakukan klasifikasi huruf

Kini pertanyaan yang muncul adalah seperti apakah multilayer perceptron dan back propagation learning itu?