Entropy

Entropy mengukur ketidakpastian suatu variabel acak. Istilah ini pertama kali saya kenal di mata pelajaran kimia. Misal kita punya uang logam, jika kita lempar kita tidak memiliki kepastian apakah yang diperoleh gambar atau angka. Bagaimana dengan dadu? Tentu saja memiliki ketidak pastian, bahkan melebihi ketidakpastian dari uang logam yang dilempar. Masalahnya jika dadu yang dilempar memiliki ketidakpastian yang lebih tinggi dari uang logam yang dilempar, berapa besar? Nah kita akan coba bahas dengan konsep entropy. Manfaatnya adalah, konsep ini diterapkan untuk pembuatan pohon keputusan (decision tree).

Rumus Entropy

Entropy menggunakan konsep probabilitas dalam menentukan besar entropy suatu kejadian. Misal probabilitas uang yang normal adalah ½ untuk gambar dan ½ untuk angka, sementara untuk dadu tiap angka memiliki peluang yang sama yaitu 1/6 dengan anggapan dadunya normal (fair). Rumus entropy adalah sebagai berikut:

Berapakah entropy fair coin?

Masukan saja rumus di atas, maka diperoleh

H(x)=-( 0.5 * log(0.5) + 0.5 * log(0.5)) = 1.

Oiya, logaritmic yang digunakan adalah basis 2 (bukan sepuluh). Nah bagaimana jika coinnya tidak normal, misal peluang muncul gambar = 0.75 dan angka =0.25? Jawabannya adalah dengan rumusan di atas juga,

H(x) = – (0.75*log(0.75)+0.25*log(0.25)) = -(-0.3112-0.5)=0.8112.

Berapakah entropy fair dice (dadu normal)?

Entropy ini akan digunakan untuk menentukan percabangan pohon keputusan. Misalnya ada data dengan atribut usia, pelajar/tidak, income, dan credit rating yang menentukan seseorang membeli barang. Pertama-tama dihitung entropy atribut-atribut itu untuk mencari information gained berdasarkan entropy itu, jadi logikanya makin rendah entropy-nya maka makin kuat atribut itu menjadi akar.

Learning Weights in Rank Retrieval

Misal kita memiliki data training terhadap beberapa query dengan term-term tertentu berikut ini.

Pertanyaannya adalah berapakah nilai g –nya?

Sebelum menjawab pertanyaan itu terlebih dahulu didefinisikan istilah-istilahnya. Kita misalnya memiliki query “like dog cat temle ant bird wine girl”. Misalnya kita akan menentukan bobot antara ST dengan SB, maksudnya ST adalah letak suatu query pada Dokument (docID) pada Title atau Body, yang disingkat jadi T dan B pada S. Misal pada data pertama Ф1, query like ada di document ID = 17 pada Body, tetapi tidak ada di Title. Sementara ‘r’ adalah penilaian dari pakar (humen expert) yang menyatakan apakah data itu relevan atau tidak. Pada kasus ini diberi angka nol (0) berarti tidak relevan, yang nantikanya akan dijumlahkan dengan variabel n01n (artinya number of St=0, Sb=1 dan tidak relevan (n)).

Sementara g sendiri adalah bobot opimal yang akan kita cari dengan rumusan di bawah ini (buka buku Information Retrieval oleh Manning):

Masukan data-data n10r, n01n, n10r, n10n, n01r dan n01n. Sebagai contoh, n10r adalah jumlah St=1,Sb=0, r=1 dimana di tabel atas berjumlah 0, dan seterusnya.

Sehingga diperoleh nilai g

Incident Matrix dan Inverted Index

Bab pertama pada mata kuliah Information Retrieval adalah seputar bagaimana kita mencari suatu kata dalam beberapa berkas yang telah kita simpan. Berkas-berkas tersebut berupa format text dari aplikasi-aplikasi pengolah kata (word processing).

Incident Matrix

Jika kita ingin mengetahui dalam document mana saja kah kata tertentu, misalnya Indonesia berada? Caranya adalah kita melihat kata Indonesia dalam incident matrix kemudian melihat dalam matrix itu dalam dokumen mana saja kata Indonesia berada. Dalam prakteknya incident matrix sangat memboroskan memori karena seperti kita perkirakan, jumlah keberadaan sangat sedikit, atau dengan kata lain banyak jumlah nol dibanding satu.

Berikut ini contoh soal dari buku referensi Information Retrieval karya Manning, dkk tentang pembuatan incident matrix dan inverted index. Jawaban soal dapat Anda lihat di situs ini, walaupun baru bab 1 saja yang diselesaikan.

Doc 1 – breakthrough drug for schizophrenia
Doc 2 – new schizophrenia drug
Doc 3 – new approach for treatment of schizophrenia
Doc 4 – new hopes for schizophrenia patients

Perhatikan soal di atas, dimana misalnya kita memiliki empat dokumen. Dokumen satu berisi kata breakthrough, drug, for, schizophrenia. Tentu saja ini hanya perumpamaan, karena satu dokument tentu bisa saja hingga berjuta-juta kata. Bagaimana cara membuat incident matrixnya? Sesuai dengan namanya, incident matrix berarti matriks yang berisi keberadaan suatu kata dalam dokumen. Jadi kita cari kata ‘breakthrough‘ ada di dokumen satu, ‘drug‘ di dokumen satu dan dua, dan seterusnya.

Doc 1 Doc 2 Doc 3 Doc 4
approach 0 0 1 0
breakthrough 1 0 0 0
drug 1 1 0 0
for 1 0 1 1
hopes 0 0 0 1
new 0 1 1 1
of 0 0 1 0
patients 0 0 0 1
schizophrenia 1 1 1 1
treatment 0 0 1 0

Terlepas dari kelemahan dari sisi kapasitas matriks yang besar, incident matrix sangat baik digunakan untuk mencari kata dengan operasi boolean (boolean retrieval). Misalnya kita diminta mencari kata-kata dengan boolean:

for AND NOT (drug OR approach)

Maka kita dengan mudah melakukan operasi logika dari incident matrix.

Term vectors
for – 1 0 1 1
drug – 1 1 0 0
approach – 0 0 1 0

Seperti operasi aljabar boole yang telah kita pelajari dari mata kuliah logika, kita kerjakan terlebih dahulu yang dalam kurung (drug OR approach).

1 1 0 0 OR 0 0 1 0 = 1 1 1 0

Setelah operasi NOT diperoleh invers dari jawaban di atas yaitu : 0 0 0 1 dan terakhir dilakukan proses AND dengan for:

1 0 1 1 AND 0 0 0 1 = 0 0 0 1

Inverted Index

Bentuk incident matrix jarang sekali digunakan saat ini. Bentuk yang terkenal adalah Inverted Index, di mana Term di hubungkan dengan lokasi document dimana term tersebut berada. Term adalah suatu kata kunci yang dijadikan objek searching. Pada contoh di atas kita menggunakan kata, walaupun terkadang kita harus memanipulasi kata tersebut, misalnya words yang jamak kita konversi menjadi word (kata dasarnya), serta metode-metode lain yang dibahas di buku Manning di bab-bab berikutnya.

approach,1 Doc 3
breakthrough,1 Doc 1
drug,2 Doc 1 Doc 2
for,3 Doc 1 Doc 3 Doc 4
hopes,1 Doc 4
new,3 Doc2 Doc3Doc4
of,1 Doc 3
patients,1 Doc 4
schizophrenia,4 Doc 1 Doc 2 Doc 3 Doc 4
treatment,1 Doc 3

Perhatikan bentuk inverted index di atas. Suatu Term, misalnya ‘for‘ memiliki frekuensi keberadaan sebanyak 3. Di sebelah kanannya berjajar posting list yang sudah tersortir berdasarkan lokasi dokumen, diberi nama docID. Sebenarnya bentuk inverted index tidak seperti di atas, bentuk di atas hanya mempermudah pengetikan saja, aslinya adalah sebagai berikut:

Maaf tulisannya kayak gitu .. tapi jika Anda bisa membacanya, dijamin seumur hidup Anda bisa membaca seluruh jenis tulisan :D.

Elias Gamma & Delta Coding

Kompresi sangat bermanfaat karena kecepatan prosesor dalam melakukan encode dan decode jauh di atas kecapatan baca dan tulis dari disk ke memory. Apalagi jika kita menggunakan Single-Pass In Memory Indexing (SPIMI) dimana kita dapat melakukan kompresi pada Terms dan Postings. Berbagai metode dapat kita gunakan untuk melakukan kompresi pada Terms, sementara untuk Postings dapat kita lakukan dengan dua cara yaitu:

  1. Storing successive docIDs, dengan kata lain menggunakan offset. Misal dari pada kita menulis <1001,1010,1052,…> kita dapat menuliskannya dengan <1001,9,42,…> dimana menghasilkan angka yang jauh lebih kecil.
  2. Menggunakan variable size dari prefix code. Caranya adalah dengan melihat nilai maksimum dari sebaran angka, akibatnya terhindar dari pemborosan kapasitas byte tiap Posting. Nah, akan kita bahas penggunakaan variable size ini dengan kode Elias gama dan delta.

Elias Gamma Coding

Metode ini dikembangkan oleh Peter Elias. Dengan teknik pengkodean:

  1. Tulis dalam biner
  2. Jumlah bit pada proses no.1 dikurang satu untuk menentukan jumlah nol (zeros) yang harus ditambahkan di muka angka tersebut.

Contoh kita punya bilangan 11 langkah pertama adalah konversi 11 menjadi biner, yakni 1011. Langkah dua menghasilkan tiga yang berasal dari 4 bit dikurang satu. Hasilnya adalah 0001011. Deretan angka 11, 15, dan 27 dengan elias gamma code menjadi 00010110001111000011011.

Bagaimana dengan docede-nya? Caranya gampang, hitung jumah nol (zero) sebelum ditemukan bilangan 1, misalnya kita akan mendekode 0001011. Karena ada 3 zero maka (3+1) setelah zero itu adalah bilanganya, yaitu 1011, yang jika dikonversi ke desimal menjadi 11. Apa fungsi Elias Gamma Coding tersebut? Tentu saja manfaatnya adalah kita dapat mengirim tiga angka berjajar sekaligus, sebab jika kita hanya meng-concatenate tiga bilangan tersebut akan tidak bermakna, misalnya tiga bilangan tersebut di atas jika dikirim 1011111111011 ada berjuta2 variasi kombinasi biner tersebut yang setara dengan desimalnya.

Elias Delta Coding

Seperti Elias Gamma, kode ini ditemukan oleh Peter Elias. Kode ini menerapkan juga metode pada gamma coding, terutama di bagian kepala. Tekniknya adalah sebagai berikut:

  1. Cari pangkat tertinggi binernya, misalnya desimal 11 jika dibinerkan menjadi 1011 dimana pangkat tertingginya adalah 3. Jadi N’=3.
  2. Gunakan Gamma Coding untuk mengkodekan bilangan N dimana N=N’+1. Jadi untuk kasus desimal 11 maka kita harus membuat Gamma Coding dari 4 yaitu 00100.
  3. Tambahkan sisa N’ binary pada hasil no.2. Jadi diperoleh jawaban 00100011.

Berikutnya adalah medekode Elias Delta Coding, prinsipnya adalah kebalikan dari langkah satu sampai tiga di atas. Misalnya kita akan mendekode 00100011.

  1. Temukan jumlah zero sebelum ditemukan angka satu, yaitu 00, berjumlah dua. Berarti ada (2+1) angka yang harus diperhatikan setelah dua angka nol ini yaitu 100 yang dalam desimalnya berarti 4, jadi kita mendapatkan N’ dengan N-1 = 4-1 = 3.
  2. Jika N’ telah diketahui, yaitu 3 maka ada tiga bit tersisa yang menjadi bagian bilangan itu yakni 011. Jadi diperoleh jawaban 1011 yang artinya 11.

Jika kita diberikan rentetan biner sebagai berikut: 00110000110011110010100111110000 merupakan deretan angka 35, 101, dan 112. (Perhatikan warna biner di atas untuk memudahkan).

Reference

Manning, Christopher D., Prabhakar Raghavan and Hinrich Schütze (2008), Introduction to information retrieval, Cambridge: Stanford University.

Mining Itemset using Vertical Data Format (Menghitung Closed Itemset )

Satu bab yang cukup rumit pada mata kuliah Data Mining adalah Mining Itemset using Vertical Data Format. Berikut ini adalah contoh soal dengan 5 buah transaksi:

  • T1: a,b,c
  • T2: a,b,c,d
  • T3: c,d
  • T4: a,e
  • T5: a,c

Pertanyaannya adalah:

  1. Cari closed sets!
  2. Jika minimum support =2, cari closed frequent dan maximal frequent set –nya.

annotsrc1410163109914

Cara mengerjakannya adalah mengikuti soal tersebut, karena pertanyaan 1 dan 2 merupakan urutannya. Pertama-tama kita rinci terlebih dahulu closed sets dari item-itemnya, dimulai dari yang set terkecil (satu).

Set    Support    closed set/tidak ?

  1. {a}    4        closed set
  2. {b}    2        bukan closed set
  3. {c}    4        closed set
  4. {d}    2        bukan closed set
  5. {e}    1        bukan closed set

Mengapa {b} bukan closed set? Karena dia memiliki super-itemset yang jumlahnya juga dua (yaitu {a,b,c} dan {a,b,c,d}). Syarat closed itemset adalah supportnya harus lebih besar dari super-itemsetnya. Untuk sementara diperoleh closed sets = {{a}, {c}} dan karena keduanya di atas nilai minimum support (dua), maka sets tersebut juga closed frequent.

Berikutnya untuk yang jumlah setnya dua.

Set    Support    closed set/tidak?

  1. {a,b}    2        bukan closed set
  2. {a,c}    3        closed set
  3. {a,d}    1        bukan closed set
  4. {a,e}    1        closed set
  5. {b,c}    2        bukan closed set
  6. {b,d}    1        bukan closed set
  7. {b,e}    –        bukan closed set
  8. {c,d}    2        closed set
  9. {c,e}    –        bukan closed set
  10. {d,e}    –        bukan closed set

Closed Frequent = {{a,c}, {c,d}}. Mengapa {a,e} walaupun closed set tetapi tidak frequent? Karena supportnya hanya satu maka tidak memenuhi persyaratan frequent yaitu lebih besar atau sama dengan minimum supportnya (dua). Berikutnya untuk jumlah item tiga.

  1. {a,b,c}    2
  2. {a,b,d}    1
  3. {a,c,d}    1
  4. {b,c,d}    1

Dan diperoleh Closed Frequent ={{a,b,c}} karena yang lainnya di bawah min_support. Jadi diperoleh Closed Frequent sets = {{a},{c},{a,c},{c,d},{a,b,c}}.

Untuk soal no.2 kita diminta mencari Maximal Frequent Sets yaitu sets yang frequent, misal X, dan tidak memiliki Super-Itemsets yg frequent juga, Y, dimana Y ᴐ X.

Jawabannya adalah {{c,d},{a,b,c}}.

Mengapa {c,d}? lihat di transaksi, {c,d} tidak memiliki super-itemset, dan item tersebut frequent, jadi {c,d} adalah maximal. Bagaimana dengan {a,b,c}? walaupun dia memiliki super-itemsets {a,b,c,d} tetapi itemset ini tidak frequent (di bawah min_support).

Untuk yang ingin mendalami lebih jauh, bisa baca jurnalnya di sini.

Instal Oracle11g

Tak dapat dipungkiri Oracle merupakan software system basis data yang terkenal dan banyak digunakan oleh institusi-institusi baik swasta maupun pemerintah yang menginginkan keamanan, kecepatan, dan kemudahan dalam mengorganisirnya. Software ini bukan software yang open source, biaya lisensi pun berdasarkan prosesor, bukan server. Jika server Anda punya 4 prosesor dan semuanya menjalankan oracle, maka Anda harus membayar empat lisensi. Sementara jika kita hanya ingin belajar, dan tidak menggunakan Oracle untuk production, maka kita bias mendownload secara gratis dengan kualitas software yang sama dengan yang lisensi (baca lembar lisensinya). Download di situs resminya: http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html.

Jalankan file yang telah didownload.

Klik next

Centang “I accept the terms in the license agreement”

Klik Next, dan Anda diminta untuk memasukkan password

Berikutnya sebelum diinstall oracle akan memberikan informasi apa saja yang akan diinstal

Berikutnya tunggu beberapa saat hingga Oracle selesai diinstal.

Berikutnya kita tinggal belajar menggunakannya. Syarat minimal adalah kita memahami dasar-dasar Standard Query Language (SQL).

SQL DEVELOPER

Instal terlebih dahulu Java

Tunggu hingga aplikasi selesai diinstal dan siap dijalankan

Ok, selamat ber-query ria:

Koneksi Matlab dengan Sistem Basis Data

Lama tidak ngeblog tidak enak juga. Banyak hal-hal yang bisa saya sharing ke orang lain yang siapa tahu membutuhkan informasi tertentu yang saya miliki. Terkadang sedih juga membaca komentar-komentar di tulisan saya yang mengatakan “sotoy”, jangan asal tulis, dan lain-lain, bahkan ada yang mengatakan saya asal “copas”. Tapi sesuai dengan prinsip situs saya “just a Little Kindness”, saya coba untuk memberi kebaikan walau hanya sedikit.

Saya dulu pernah membuat tulisan mengenai akses database dengan Visual Query Builder, dan banyak yang tidak puas dengan koneksi seperti itu. Lama saya tidak mencoba “ngoprek” hal itu karena belum merasa perlu karena akses dapat dilakukan dengan menggunakan excel atau notepad. Untuk data kecil sebenarnya tidak ada masalah, tetapi jika data yang berukuran besar, Excel tentu saja tidak sanggup menanganinya. Saya pernah mencoba mengkonversi file CSV ke dalam Access kemudian saya kembalikan lagi menjadi TXT untuk diolah Matlab dalam rangka Data Mining (waktu itu tugas Text Mining dari dosen saya). Tetapi tentu saja tidak efektif. Perlu dilakukan koneksi data langsung dari DBMS ke Matlab.

Berawal dari Hibah Penelitian dari Dikti (Hibah Bersaing) dimana tahun ketiga saya harus mengkoneksikan GIS desktop dengan Web GIS, mau tidak mau saya membutuhkan sistem basis data. Terpaksa saya harus mengkoneksikannya langsung. Cari paling mudah adalah lewat mekanisme Open Data Base Connectivity (ODBC) yang tersedia di Windows. ODBC ini memiliki keunggulan dalam hal fleksibilitas, dimana jika kita sudah merakit ODBC maka program yang telah dibuat dengan Matlab tidak tergantung dengan software DBMS yang telah ada karena koneksi antara program dengan database lewat ODBC, beda jika kita mengkoneksikan Matlab dengan Software DBMS langsung (Access, MysQL, Oracle, PostgreSQL, dll). Jika kita mengganti software DBMS, kita harus mengeset lagi program yang telah kita buat. Dengan DBMS, jika kita akan mengganti Software DBMS, tinggal menghubungkan Software DBMS dengan ODBC lagi, termasuk user dan password jika diperlukan.

Untuk membuat ODBC Anda dapat membaca literatur yang membahas tata caranya. Yang penting Anda ketahui adalah Windows yang Anda miliki, 64 Bit atau 32 Bit. Jika 32 bit sepertinya tidak ada masalah. Nah, masalah muncul jika windows yang digunakan versi 64 bit, karena ODBC yang digunakan harus mundur yang 32 bit karena software DBMS kebanyakan masih berversi 32 bit. Untuk windows 8 dengan searching di control panel, akan ditemukan dua pilihan, ODBC 32 bit atau ODBC 64 bit. Sedangkan jika Windows 7 64 bit, maka Anda harus masuk ke folder SysWOT di C: dan menjalankan file odbcad32.exe. Jika Anda memaksa menggunakan ODBC 64 bit padahal program yang Anda gunakan versi 32 bit, akan memunculkan pesan kesalahan saat melakukan koneksi Matlab dengan ODBC (mismatch .. bla bla).

Untuk menghubungkan Matlab dengan ODBC dapat Anda lakukan dengan langkah sebagai berikut. Misalkan Anda telah memiliki ODBC dari database Anda, misalnya bernama “lokasi” dengan user ID “user” dan password “123”, lakukan koneksi dengan instruksi:

Conn=database(‘lokasi’,’user’,’123)

Cukup sederhana. Cek koneksi dengan instruksi isconnection(Conn). Jika jawabannya 1 maka koneksi berjalan dengan baik, sebaliknya jika jawabannya nol, maka Anda harus mengecek error-nya. Ketik saja Conn.Message untuk melihat instruksi kesalahannya. Jika Database telah terisi, Anda dapat mengecek dengan instruksi sql “select”.

Results=fetch(conn,’select * from lokasi’)

Misalnya tabel yang ada di database kita lokasi. Anda akan menerima data dari database dengan nama Results yang siap Anda olah dengan Matlab. Bagaimana dengan input data ke database? Mudah saja, gunakan instruksi insert. Hanya saja sedikit rumit karena ada tata cara penulisan nama field yang ada di tabel. Misal ada dua field yaitu x dan y. Kemudian akan saya isi data dengan x=1 dan y=2, maka gunakan instruksi sebagai berikut:

Insert(Conn,’lokasi’,[{‘x’} {‘y’}],[1 2])

Jika tidak ada pesan kesalahan sintax di Matlab, cek apakah data sudah masuk di database Anda. Selamat mencoba.

Teknik Text Mining dengan Matlab

Hari ini adalah hari penghakiman untuk tugas project mata kuliah Decision Support Technology (DST). Kasus yang kami pilih adalah menentukan dari puluhan juta record berisi pengarang dan tulisannya dan kita diminta mencari nama-nama yang seharusnya digabung berdasarkan field-field yang ada yaitu affiliation, konference, judul, dan kata kunci.

Kami sekelompok sepakat menggunakan tools Java dengan postgresql, sementara saya tetap setia menggunakan Matlab dengan Microsoft Access sebagai sistem basis datanya. Rekan saya yang berasal dari Thailand dan Uzbekistan cukup mahir dalam memainkan Java. Untuk tahap pertama mereka sudah berhasil melakukan cleaning data. Pengarang yang namanya sama jika affiliation-nya sama maka dikategorikan dalam satu pengarang yang sama.

Saya bertugas mensuplai data similarity dari pengarang-pengarang itu. Teknik pertama dengan mencari nama yang sama persih, menghasilkan akurasi 60%. Jika nama sama dan dicek affiliation-nya mirip, akurasi meningkat menjadi 70%. Berikutnya teknik-teknik lain digunakan mulai dari nama singkatan dan nama belakang, misalnya rahmadya trias handayanto, dicari apakah ada yang mirip r. t. handayanto? Diperoleh akurasi 80%. Rekan saya menganjurkan teknik switching nama pertama dengan nama terakhir, jadi dicari rahmadya handayanto dengan handayanto rahmadya, apakah ditemukan? Namun akurasinya hanya naik 1 persen menjadi 81%.

Selepas kuliah ISDM, saya berkumpul kembali dan saya menunjukkan bahwa saya menemukan nama-nama yang sama dengan menanggalkan nama tengah. Jadi misalnya rahmadya trias handayanto, akan saya cari dengan r. handayanto, apakah ada atau tidak. Mereka langsung mengecek satu sample data yang saya berikan, dan mereka terkejut ternyata ada beberapa nama yang tidak ditulis nama tengahnya dan memiliki affiliasi yang sama. Dan kami terkejut ketika akurasi naik 3 persen jadi 84%.

Sebenarnya masih banyak cara lain, seperti yang disarankan oleh Dr. Paul, dosen kami, misalnya missing word, spelling of word (france and germany), serta nama cina yang bermarga di depan. Untuk melihat contoh bagaimana Matlab mendeteksi dapat dilihat di youtube ini:

Menggunakan Fungsi Find di Matlab

Sehubungan dengan tugas mata kuliah Decision Support Technology (DST) yang saya ambil, saya diminta mengolah data yang tidak lazim, yang terkadang formatnya tidak baris dan kolom seperti yang diterapkan di beberapa sistem database. Kemampuan mengolah data yang tidak terstruktur menjadi data terstruktur agar dapat diolah dengan Matlab, mengharuskan kita terlatih dalam mengimport data baik dari database ataupun format data lainnya yang biasanya berformat dat, csv, xls, dan sejenisnya.

Baiklah di sini diandaikan kita telah berhasil mengimport data yang kita akan oleh. Pertama-tama kita praktekan mengolah data numerik. Buat data baru:

x = [2 5 7 4 3 3 3]

Maka Anda memiliki data suatu vektor. Jika seumpamanya kita ingin mencari data berisi angka 3, ketik instruksi berikut ini:

>> position = find(x==3)

position =

5 6 7

Maka anda akan memperoleh 5,6, dan 7 yang berarti posisi angka 3 ada di index 5,6, dan 7 dari vektor x.

Bagaimana jika datanya bukan numeric, misalnya string? Coba kita buka dulu sampel data:

str = ‘0.41 8.24 3.57 6.24 9.27’;

Data di atas merupakan data string, walaupun berisi angka di dalamnya. Kita akan mencari nilai numerik dari data tersebut dengan fungsi textscan.

C = textscan(str,’%f’);

C =

[5×1 double]

Tampak hasilnya adalah data C yang berisi cell dengan format membernya floating point yang diindikasikan dengan ‘%f’. Untuk melihat isi dari cell tersebut lakukan instruksi berikut ini:

celldisp(C)

C{1} =

0.4100

8.2400

3.5700

6.2400

9.2700

Hasilnya adalah nilai numerik dari data str yang tadinya berformat string. Gunakan fungsi find, misalnya kita akan mencari lokasi angka 9.27, gunakan instruksi:

find(C{1}==9.27)

ans =

5

Lokasi telah ditemukan di index 5 dari data C{1}. Ok, selamat mencoba dan mengutak-atik, jika ada masalah silahkan menghubungi situs resmi Matlab.

Menghitung Keluaran Jaringan Syaraf Tiruan (JST)

Data Mining/24.06.2013/Sistem Informasi

Setelah proses pelatihan (training) selesai, JST yang terbentuk telah memiliki bobot dan bias. Bobot dan bias hasil pelatihan berfungsi untuk menghitung keluaran terhadap masukan pada neuron input. Misalnya kita memiliki JST sebagai berikut:

Jika diketahui IW=[1 2 3;4 5 6], LW=[1;2;3], IB=[1 2 3], dan LB=[2]. Untuk masukan x1=1 dan x2=2, berapakah keluaran yang dihasilkan?Anggap fungsi aktivasi di lapis tersembunyi (hidden layer) dan lapis keluaran (output layer) linear.

Buka Matlab, Scilab, Octave, dan sebagainya. Masukan data sebagai berikut:

Jadi keluaran yang dihasilkan = 94.

Untuk perhitungan menggunakan EXCEl klik ==> Menghitung Output JST

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”.

Melihat Surface Jaringan Syaraf Tiruan (JST)

Surface merupakan istilah yang digunakan Matlab terhadap bidang tiga dimensi. Variabel yang ada adalah X, Y, dan Z. Terkadang kita ingin melihat surface JST yang telah kita training untuk mengetahui kinerjanya seperti pada Fuzzy Inference System (FIS) dan Adaptive Neuro-Fuzzy Inference System (ANFIS). Sebagai bahan perbandingan perhatikan data berikut ini yang akan kita latih dengan ANFIS dan JST.

Kolom satu dan dua adalah variabel masukan, sedangkan kolom ketiga menyatakan target pembelajaran. Berikutnya kita latih sistem kita, baik dengan ANFIS maupun JST. Dengan anfis kita peroleh surface sebagai berikut:

Mengenai cara pembuatannya, lihat tulisan saya terdahulu mengenai pelatihan ANFIS. Untuk JST harus kita buat struktur network dan kemudian melatihnya dengan data di atas. Berikut ini contoh code untuk membuat grafik 3D JST dengan nama ‘net‘.

Di sini saya menggunakan resolusi dua digit di belakang koma, dari 0.01 hingga 4. Hasilnya adalah grafik di bawah ini. Lumayan lama (lebih dari 10 menit) ketika kode di atas dijalankan.

Jika dirasa terlalu lama prosesnya, dapat kita turunkan resolusinya menjadi satu digit di belakang koma. Untuk warna data dilakukan dengan perintah di belakang plot3, dengan if-else untuk wilayah warna tertentu.

Sebenarnya ada cara untuk membuat lewat instruksi ‘surface’ atau ‘mesh’, tetapi untuk kasus fungsi ‘sim’ pada matlab tidak bisa dijalankan. Berikut ini contoh script untuk 3D fungsi matematis biasa.

Buku Penerapan Data Mining dengan Matlab

Walaupun agak sedikit terlambat tetapi tidak masalah karena materi yang kita bahas baru sampai pertengahan yang Insya Allah UTS dua minggu lagi. Akhirnya buku “Penerapan Data Mining dengan Matlab” sudah dicetak dan siap didistribusikan pada toko-toko buku terdekat. Lihat link: http://biobses.com/judul-buku,343-penerapan_data_maining_dengan_matlab.html

Beberapa hal mungkin tidak sempat ditulis pada buku tersebut dan sebagai pelengkapnya dapat dilihat pada blog ini. Pertanyaan dan komentar akan dengan senang hati kami jawab untuk kesempurnaan buku ini di masa depan. Buku itu dibuat berbarengan ketika mengajar Data Mining dan selesai ketika perkuliahan juga selesai. Oleh karena itu saya sangat berterima kasih kepada mahasiswa-mahasiswa Universitas Darma Persada dari Jurusan Sistem Informasi atas kerja samanya, “Arigato Gozaimasudan mohon maaf, “gomenasai” jika soft copy tidak saya beri ketika diminta. Isi buku tersebut antara lain:

  • Konsep Data Mining
  • Pohon Keputusan
  • Adaptive Neuro-Fuzzy Inference System (ANFIS)
  • Jaringan Syaraf Tiruan (JST)
  • Fuzzy C-Means Clustering (FCM)
  • Support Vector Machine (SVM)
  • Pengujian Sistem
  • Instalasi MATLAB 7
  • Dasar-Dasar MATLAB
  • Mengompilasi Program dengan MATLAB

Walaupun membahas Data Mining, kami siap juga menjawab topik lain yang nyerempet-nyerempet, seperti topik tentang Soft Computing, Fuzzy, Sistem Kendali, dan sebagainya. Alangkah baiknya Anda memiliki buku “Penerapan Soft Computing dengan Matlab” yang ditulis oleh pengarang yang sama.

Berikutnya kami berencana menulis topik yang sama tetapi dengan bahasa pemrograman yang agak sulit seperti C++ dan Java mengingat banyaknya permintaan terhadap bahasa yang “Gratis” tersebut. Walaupun sebenarnya banyak bahasa yang mirip Matlab tetapi “Gratis” yaitu Scilab, Octave, dan lain-lain yang bisa diunduh dari internet.

Classification with Fuzzy C-Means In Matlab

Data Mining/08.04.2013/Sistem Informasi

This week, because I have trouble with my tummy, I cannot teach Fuzzy C-Means (FCM) Clustering. But I will give a simple explanation in this blog. Last week we have learned the hard clustering with K-Means and create a simple application with GUI. For simplicity, we can use that GUI and change the K-Means Method with FCM.

Open your Matlab and change the current directory to your last Matlab Application. Type guide <name_of_application>, or click File – New – GUI and chose tab: Open Existing GUI. Browse your GUI (fig file). This is my own GUI of K-Means application.

After change the title K-Means with FCM, save as your work and give a different name, so we have two application: K-Means and FCM. Go to your m-file and find the function that state about K-Means Clustering. Change it with FCM function. There is a little different about separation of each cluster. For this example, we used two classification (IPA’s and IPS’s). Use the script below for classification function:

  • X=handles.X
  • k=handles.k
  • [C,U]=fcm(X,k)
  • set(handles.ipa1,‘String’,C(1,1))
  • set(handles.ips1,‘String’,C(1,2))
  • set(handles.ipa2,‘String’,C(2,1))
  • set(handles.ips2,‘String’,C(2,2))
  • index1=find(U(1,:)==max(U))
  • index2=find(U(2,:)==max(U))
  • axes(handles.axes1)
  • line(X(index1, 1), X(index1, 2), ‘linestyle’,
  • ‘none’,‘marker’, ‘o’,‘color’,‘b’);
  • line(X(index2,1),X(index2,2),‘linestyle’,
  • ‘none’,‘marker’, ‘^’,‘color’,‘r’);
  • hold on
  • plot(C(1,1),C(1,2),‘ko’,‘markersize’,11,‘LineWidth’,2)
  • plot(C(2,1),C(2,2),‘kx’,‘markersize’,11,‘LineWidth’,2)
  • function kluster_Callback(hObject, eventdata, handles)
  • hold on

After Running, you have to see the result below. You can separate the data into two cluster (tends to IPA and Tends to IPS):

Now, try to make a code for creating the result in Excel.

K-Means Clustering with Matlab

Data Mining/01.04.2013/Sistem Informasi

You can see the explanation: http://en.wikipedia.org/wiki/K-means_clustering. K-means is hard-clustering that different with Fuzzy C-Means that Soft-Clustering.

File – New – GUI. Make a design below.

Save yout GUI.

Fill script to function ambildata_Callback:

  • data=uigetfile(‘*.xlsx’)
  • set(handles.data,‘String’,data)
  • X=xlsread(data)
  • handles.X=X
  • guidata(hObject,handles)

 

Look at command window to see the result

Script function data_Callback (text box of number of cluster)

Make sure k and handles.k appear in Command Window.

IDX and C the result of kmeans function that state index of every record and center of cluster respectively.

Look at how to create excel file with function xlswrite. There are two sheets: hasil and kluster. Use “set” for sending result to edit text ipa1, ipa2, ips1, and ips2 at GUI.

You can add axes to show the result graphically.

  • %buat grafik
  • ukuran=size(hasil)
  • jlhdata=ukuran(1,1)
  • axes(handles.axes1)
  • hold
  • for i=1:jlhdata
  • if hasil(i,3)==1
  • plot(hasil(i,1),hasil(i,2),‘*r’)
  • else
  • plot(hasil(i,1),hasil(i,2),‘*b’)
  • end
  • end
  • plot(C(1,1),C(1,2),‘ok’)
  • plot(C(2,1),C(2,2),‘ok’)

Next week we’ll discuss Fuzzy C-Means Clustering.