Langsung ke konten utama

Data Analysis Series: Implementasi Artificial Neural Network Menggunakan Scilab (Alternatif Matlab)

Pendahuluan

Pada post sebelumnya mengenai implementasi artificial neural network (ANN) menggunakan Python, mungkin ada yang bertanya apakah terdapat tool yang lebih membantu (dalam hal ini mengurangi coding, bagi yang kurang suka coding tentunya). Well, jawabnya banyak tool yang bisa digunakan. Mulai dari yang paling populer dan free yaitu Weka, R Studio, sampai dengan yang propietary yaitu Matlab yang menyediakan toolbox khusus ANN.

Pada post kali ini saya akan bahas sebuah alternatif dari tool yang terakhir saya sebut yaitu Matlab. Matlab yang kita tahu adalah tool berbayar, untuk yang versi standar harganya sekitar 2000 USD, dan yang termurah adalah versi pelajar sekitar 29 USD. Jika anda memiliki ketertarikan dengan cara penggunaan dan kemampuan Matlab namun tidak ingin mengeluarkan biaya sepeserpun, saat ini terdapat tool alternatif yaitu Scilab, yang menurut saya sudah cukup mumpuni untuk menggantikan Matlab.

Bagaimana Mendapatkan Scilab?

Scilab dapat diunduh secara cuma-cuma dari official website Scilab. Platform sistem operasi yang didukung cukup lengkap, mulai dari Windows, Linux, dan MacOS. Pada post kali ini saya menggunakan versi Linux karena saya sendiri menggunakan Ubuntu pada laptop yang saya gunakan. Cukup mudah untuk melakukan instalasi Scilab, installer ataupun file binary tidak memerlukan konfigurasi yang cukup berarti, jadi tidak perlu saya jelaskan secara khusus di sini. Berikut ini adalah tampilan awal dari Scilab jika instalasi sudah berhasil anda lakukan:



Meskipun tool yang tidak berbayar dan kemampuan fitur-fitur utamanya bergantung pada komunitas, namun Scilab terbilang cukup lengkap dalam menyediakan toolbox dan fitur-fitur yang sering digunakan untuk data analysis.

Fitur-fitur yang diberikan dapat anda lihat sendiri di bagian Help di Scilab. 

Implementasi ANN di Scilab

Implementasi ANN kali ini menggunakan bantuan toolbox ANN pada Scilab. Pada instalasi standar, toolbox ini tidak akan anda temukan. Sebaliknya, anda harus menginstal sendiri melalui module manager Scilab, yaitu ATOMS. Untuk toolbox ANN dapat anda temukan pada katagori data analysis.


Let's do it...

Kita akan coba salah satu metode yang paling sederhana dari ANN, yaitu Feed Forward ANN (FFANN). Arsitektur secara umum dari FFANN ini dapat dilihat pada gambar di bawah ini (courtesy: WikiPedia):

Dapat dilihat, metode ini memiliki arsitektur yang terbilang sederhana yaitu hanya terdiri dari tiga layer, input, hidden, dan output layer. Bagaimana implementasi di Scilab? Untuk mempermudah memahami cara kerjanya, kita gunakan data riil yaitu data Iris yang cukup populer penggunaannya untuk mempelajari data analysis. 

Iris dataset dapat didownload dari UCI. Bagi yang belum tahu, Iris adalah data penelitian bunga Iris terdiri dari 150 baris, dan empat fitur (sepal width, sepal length, petal width, dan petal length). Terdapat tiga spesies bunga Iris yang terdapat pada dataset ini, yaitu Setosa, Versicolour, dan  Virginica. Tiga spesies ini yang akan kita gunakan untuk uji coba klasifikasi data. Dan kita akan cari tahu apakah teknik FFANN pada Scilab ini dapat dengan baik melakukan klasifikasi spesies Iris.

Pertama-tama kita impor terlebih dahulu data Iris, pada Scilab data training harus tersedia dalam bentuk column wised (ke samping). Jadi kita akan melakukan matrix transpose terlebih dahulu dari data yang tersedia. Anda bisa menggunakan tool bantu seperti Excel, atau jika sedikit coding tidak akan melukai anda, script berikut ini dapat anda gunakan:

for i=1:150
xiris(:,i) = x(i,:)'
end;

Di mana xiris adalah matrix berukuran 4x150, dan x adalah dataset Iris berukuran 150x4 (minus target class). Jika sudah anda impor, maka xiris seharusnya akan berisi data seperti di bawah ini:


Langkah berikutnya adalah kita akan beritahukan Scilab untuk membentuk model ANN sesuai dengan data yang akan kita analisa.

N = [4 10 3]

Penjelasan dari script di atas adalah, N merupakan informasi neuron yang akan dibentuk terdiri dari 4 input node (karena terdapat 4 fitur dari Iris), 10 hidden layer (bebas jumlahnya), dan 3 kelas target (3 spesies Iris). 

Seperti yang sudah dijelaskan pada post sebelumnya, bobot pada masing-masing node memegang peran penting. Di sini, untuk menentukan bobot awal, kita gunakan fungsi ann_FF_init(N).

W = ann_FF_init(N)

Berikutnya matriks target t yang akan digunakan sebagai acuan evaluasi dari proses training, kita tentukan melalui script di bawah ini.

t = zeros(3, 150)

Matriks t ini merupakan one hot matrix di mana struktur masing-masing kolom (masing-masing individu bunga Iris) direpresentasikan sebagaimana contoh berikut:

[1 ...
 0 ...
 0]

Di mana nilai 1 mempunyai makna bahwa individu tersebut masuk ke dalam kelas indeks ke-1, jika dalam kasus data yang kita gunakan adalah Setosa.

Variabel lain yang tidak kalah penting adalah learning rate dan batas toleransi error yang akan kita tentukan pada model. Dalam uji coba kali ini, masing-masing kita set pada nilai 0.01 dan 0.0001.

Setelah dataset training dan variabel untuk model telah kita persiapkan, tiba saatnya untuk melakukan uji coba, dengan cukup menjalankan script di bawah ini.

W = ann_FF_Std_batch(xiris,t,N,W,lp,epochs);

Tunggu hingga selesai, dan seketika setelah selesai kita bisa melakukan uji coba pada model yang telah kita bangun, ambil beberapa sample. Misal ambil row ke-31 yang masuk pada kelas Setosa, jalankan script berikut.

y = ann_FF_run(xiris(:,31), N, W)

 y  =

    0.8137302  
    0.2258932  
    0.0253081  

Dapat dilihat bahwa pada terdapat 3 nilai dari objective function yang merepresentasikan kelas target dari data yang diujikan. Dari ketiganya, nilai pertama adalah yang paling tertinggi, menunjukkan bahwa data yang diuji masuk pada kelas pertama (Setosa). Untuk data-data yang lain, dapat anda ambil secara acak. Atau jika ingin melakukan uji secara holistik Anda dapat menggunakan metode k-folding

Kita coba data yang lain yaitu row/individu ke 58, diharapkan model akan mengklasifikasikan individu tersebut ke dalam kelas Versicolour.

y = ann_FF_run(xiris(:,58), N, W)

y  =

    0.2439087  
    0.4616318  
    0.2581493  

Dan, model sukses mengklasifikasikan individu tersebut ke dalam kelas Versicolour.

Penutup

Dari uji coba di atas, kita cukup dimudahkan untuk melakukan klasifikasi data menggunakan ANN Toolbox. Sebenarnya terdapat beberapa metode lain yang cukup menarik untuk dicoba pada Scilab, termasuk unsupervised learning seperti Clustering. Semoga dalam waktu dekat bisa diluangkan waktu untuk membahasnya.




Komentar

Postingan populer dari blog ini

Berkenalan dengan Laravel

Cukup disayangkan, Codeigniter sudah sampai ke tahap "penguburan" - paling tidak ini klaim dari Ellis Lab- dan ini cukup mengusik kenyamanan saya untuk menggunakan CI. Padahal juga sesuai dengan pengakuan rekan-rekan web developer, CI menurut saya cukup mudah dan powerful untuk digunakan dalam membangun sebuah web apps, dan terbukti juga CI sempat jadi trendsetter untuk framework PHP. Saya jadi penasaran framework PHP apa yang jadi the next PHP Framework star setelah CI, setelah menggali informasi beberapa kali, saya temukan Laravel saat ini banyak jadi batu loncatan developer CI. Alasannya sederhana, Laravel banyak kemiripan dengan CI. Dari analisa Google Trends juga terlihat kepopuleran Laravel saat tulisan ini dibuat juga menanjak meskipun masih kalah populer dengan CI (cukup mengherankan CI masih memimpin untuk masalah kepopuleran). Jadi langsung saja saya mencoba mengeksplorasi barang baru ini. Berikut langkah-langkahnya: 0. Install curl 1. Install composer: ...

Perbandingan Algoritme Dynamic Programming, Greedy, dan Backtrack Programming.

Sebetulnya posting ini bisa dibilang sudah kadaluarsa.  But, Better be late than never at all, right mate ? Ok, sebetulnya(lagi) Saya ingin menulis ulang semua yang ada di tugas semester 1 mata kuliah Analisa Algoritme, namun setelah dipikir-pikir lagi rasa-rasanya akan mubadzir, jadi di sini akan Saya gambarkan ulang secara ringkas saja apa perbedaan Dynamic Programming, Greedy dan Backtrack. Sebelum menyentuh ke dalam algoritmenya, Kita lihat terlebih dahulu kasus permasalahannya. Tentu belajar akan lebih mudah apabila tidak hanya dengan mempelajari teorinya saja. Umumnya orang akan lebih semangat apabila ada kasus menarik yang dipelajari. Tentang Knapsack Knapsack sendiri merupakan permasalahan pencuri yang ingin mencuri barang dengan cara memasukkan sebanyak-banyaknya dan seberharga-berharganya barang yang ada ( of course, its a theft ), sejumlah wadah yang pencuri tersebut punya. Diharapkan dengan menerapkan beberapa algoritme ini pencuri dapat meraup keuntungan sebanyak...

Data Analysis Series: Perceptron - Basic Artificial Neural Network

Pendahuluan Pada posting berikut ini saya akan menyampaikan materi tentang (Artificial) Neural Network. Algoritme yang satu ini terinspirasi dari cara kerja sel otak dalam memproses informasi. Sedikit di bawah ini pertama-tama akan saya sampaikam penjelasan bagaimana sel otak bekerja, untuk mempermudah pemahaman bagaimana ANN dapat terinspirasi. Sel Otak (Sumber:  www.wealltest.com ) Seperti yang kita ketahui, otak terdiri atas milyaran sel. Tiap-tiap sel tersebut terbagi atas tiga bagian, yaitu Dendrites, atau receptor, bagian yang menerima sinyal/stimulasi dari sel-sel otak yang lain. Sinyal/stimulasi yang masuk ke dendrite tersebut awalnya berasal dari indra perangsang kita, seperti mata, kulit, telinga, dan lidah. Dari dendrite, sinyal kemudian diteruskan melalui Axon, semacam pipa penghubung, yang mentransmisikan sinyal dari dendrite, untuk ditransmisikan ulang ke sel lain melalui Synapse. Bisa dikatakan, Synapse ini berfungsi sebagai akumulator untuk dari info...