Saturday, July 20, 2019

Buku Pemrograman Python- Cara Cleaning Dataset


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link


kalian bisa lanjut baca lagi di http://softscients.com/2020/03/28/buku-pemrograman-python-cara-cleaning-dataset/




Bekerja dengan dataset yang sangat besar ukurannya, perlu kecermatan. Terkadang dataset tersebut ada yang masih kosong dan untuk melakukan cek satu-persatu secara manual adalah pekerjaan harus dikurangi dan dihindari agar tidak terjadi human error, seperti dataset berikut:

Wednesday, July 3, 2019

Matlab-Pengaruh Rentang Bilangan Random pada Neural Network Backpropagation


Sinopsis

Tuning algoritma yang menggunakan bilangan random terkadang membuat pusing, hal ini penulis alami ketika menulis sebuah algoritma jaringan syaraf tiruan backprogation yang terdiri dari hal utama 2 yaitu propagasi maju dan propagasi mundur.

Awalnya penulis tidak terlalu menghiraukan mengenai generator random yang telah disediakan oleh function built in dan dibiarkan generator random tersebut mempunyain rentang nilai 0 s.d 1 dengan sebab bahwa jenis fungsi aktifasi pada algoritma melibatkan sigmoid.

Masalah pun terjadi ketika di run berulang-ulang mempunyai hasil yang berbeda cukup signifkan, misalkan ketika di run ke 1 menghasilkan akurasi 68%, run ke 2 menghasilkan 98% dan begitu terus menerus. Hal ini menjadi tidak stabil, walaupun sempat menyerah. Penulis berpikir memberikan jeda waktu untuk generator random agar bilangan tersebut makin heterogen pun tidak menjadi solusi yang baik.

Setelah dicermati berkali-kali bahwa algoritma tersebut mempunyai keluaran bobot dan bias yang mempunyai rentang nilai -1 sd. +1 sehingga inilah pangkal permasalahannya. Sehingga generator random untuk membangkitkan bilangan random untuk bobot dan bias pada jaringan syaraf tiruan pun diperbaiki, anda bisa melihat a dan b berikut



a = rand(5,5)
b = -1 + (1+1)*rand(5,5)

Hasilnya

a =

    0.2535    0.0006    0.6886    0.4179    0.9950
    0.8355    0.5332    0.2453    0.8139    0.0751
    0.0985    0.2122    0.9374    0.4401    0.1696
    0.7932    0.5866    0.6871    0.7625    0.5142
    0.5613    0.4621    0.9305    0.0088    0.7791


b =

   -0.2824   -0.3162    0.1841    0.9995    0.3907
   -0.4133   -0.9002    0.6260   -0.9594   -0.0650
   -0.6959   -0.5908   -0.2271    0.3183   -0.4068
    0.8105    0.0474    0.5658    0.0658   -0.1585
   -0.4544   -0.5254    0.4300    0.9144   -0.2076


Setelah diperbaiki menjadi berikut



Terkadang saat menulis kode untuk menguji kasus kecil (misalkan untuk menguji kasus logika non linear XOR) tampaknya algoritma berjalan dengan  baik. Tapiii ketika di scale up untuk menguji kasus yang besar dan dataset yang cukup kompleks, ntah kenapa algoritma tersebut menjadi tidak stabil. Maka alangkah baiknya perlu dilakukan tuning sana-sini, seperti penulis lakukan pada kasus diatas yang semula generator random punya bilangan 0 s.d 1 menjadi tidak stabil ketika diuji untuk kasus yang lainnya. Kode semula sebagai berikut



wh = rand(node_input,node_hidden);
 
bh = rand(1,node_hidden);
 
wout = rand(node_hidden,node_output);
 
bout = rand(1,node_output);

Kemudian di tuning sesuai dengan trial and error, maka yang terbaik seperti ini

wh = -1 + (1+1)*rand(node_input,node_hidden)*0.5;
 
bh = -1 + (1+1)*rand(1,node_hidden)*0.1;
 
wout = -1 + (1+1)*rand(node_hidden,node_output)*0.5;
 
bout = -1 + (1+1)*rand(1,node_output)*0.1;



Akhirnya penulis bisa tersenyum lepas, algoritma berjalan stabil sesuai harapan dengan error tiap iterasi semakin turun.

Dapatkan buku kami
http://www.softscients.web.id/2018/11/buku-belajar-mudah-python-dengan.html
atau mengajukan pertanyaan ke
http://www.softscients.web.id/p/konsultasi.html




Buku belajar machine learning dengan matlab -Sistem Hibrid Meta Heuristik Particle Swarm Optimization dan Neural Network Backpropagation


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link


kalian bisa lanjut baca lagi di  http://softscients.com/2020/03/26/buku-belajar-machine-learning-dengan-matlab-sistem-hibrid-meta-heuristik-particle-swarm-optimization-dan-neural-network-backpropagation/




Particle Swarm Optimization merupakan salah satu teknik heuristik untuk mencari solusi optimal dari fungsi objektif yang tidak ribet dengan meniru perilaku kawanan hewan, sedangkan NN Backpropagation dikenal handal dalam kasus klasifikasi dan dataset dalam ruang dimensi N yang bersifat non linear.

Hibrid kedua diatas tentu sangat menarik, semuanya handal dalam masing-masing kasus. Nah, penulis mencoba mendesain fungsi objektif yang bisa digunakan ke PSO dengan desain dari core engine NN. Perlu diketahui bahwa NN yang digunakan dalam tulisan ini terdiri dari 2 perhitungan yaitu forward dan backward.


Desain dari fungsi objektif PSO menjadi menarik, karena core engine NN harus ‘diinjeksi’ langsung kepada PSO dan harus ‘dibungkus’ rapi menjadi satu sehingga penulis harus membuat kode NN terlebih dahulu. Salah satu rujukan NN yaitu buku karangan Sri Kusuma Dewi

Berikut kode finalnya.
%kode ini adalah teknik hibrid antara NN dan PSO
%NN dengan tipe backpropagation yang terdiri dari 2 langkah
%1. langkah maju atau forward
%2. langkah mundur atau backward
%NN menggunakan fungsi aktifasi sigmoid dan update bobot bias
%menggunakan fungsi turunan pertama sigmoid
%secara umum NN akan melakukan update bobot dan bias setiap melakukan
%iterasi hal ini punya kelemahan utama yaitu tidak adanya seleksi
%sehingga setiap ada iterasi, maka terjadi update bobot dan bias
%sedangkan PSO akan memperbaiki kelemahan ini yaitu
%update bobot dan bias menggunakan aturan PSO
%sehingga bobot dan bias hasil akhir menjadi optimal
%fungsi objektif PSO dibangun atas 2 langkah utama dari NN yaitu terdiri
%dari perhitungan maju dan mundur sehingga didapatkan error 
%error terkecil menjadi paramater PSO
%setelah didapatkan bobot dan bias dari PSO
%akan digunakan kembali sebagai input perhitungan NN yaitu 
%perhitungan maju untuk memprediksi hasil akhir
 
%kode ini bertujuan untuk update bobot dan bias 
clc;clear all;close all;
help demo_PSO_NN
 
disp('Kasus sederhana yang dipilih yaitu logika non lineaar Boolean XOR')
[X,target,lr]=inputtarget();
disp('Input dan target yaitu')
disp(table(X,target))
 
disp('NN standar akan melakukan pelatihan....')
epoch = 5000;
node_hidden = 3;
disp(['Jumlah epoch ' num2str(epoch)])
disp(['Nilai learning rate ' num2str(lr)])
disp(['Jumlah node hidden ' num2str(node_hidden)])
[jaringan] = latihjaringan(X,target,epoch, node_hidden,lr);
prediksi_nn = simulasijaringan(jaringan,X);
disp('NN selesai... ')
 
 
nvars = 13; 
lb = ones(1,13)*-100; %nilai lower bound
ub = ones(1,13)*+100; %nilai upper bound
 
disp('Proses pencarian oleh PSO.....')
disp(['Dengan jumlah partikel sebanyak 50 dan iterasi 10'])
options = optimoptions('particleswarm','SwarmSize',50,...
                'HybridFcn',@fmincon,'Display','iter','MaxStallIterations',10,...
                'FunctionTolerance',1e-3,'DisplayInterval',10);
 
[bobot_bias,fval,exitflag,output] = particleswarm(@objektif,nvars,lb,ub,options);
disp('PSO selesai....')
 
[wh,bh,wout,bout] = splitbobotbias(bobot_bias);
 
 
%fungsi ini dipanggil ulang untuk melakukan prediksi
%yaitu perhitungan maju-forward dari NN digunakan kembali
[prediksi_pso,hiddenlayer_activations] = perhitunganmaju(X,wh,bh,wout,bout);
 
disp('hasil prediksi PSO dan NN')
disp(table(target,prediksi_pso,prediksi_nn))
 
disp('Terlihat bahwa nilai dari PSO lebih mendekati target daripada NN')



kode ini adalah teknik hibrid antara NN dan PSO
 NN dengan tipe backpropagation yang terdiri dari 2 langkah
 1. langkah maju atau forward
 2. langkah mundur atau backward
 NN menggunakan fungsi aktifasi sigmoid dan update bobot bias
 menggunakan fungsi turunan pertama sigmoid
 secara umum NN akan melakukan update bobot dan bias setiap melakukan
 iterasi hal ini punya kelemahan utama yaitu tidak adanya seleksi
 sehingga setiap ada iterasi, maka terjadi update bobot dan bias
 sedangkan PSO akan memperbaiki kelemahan ini yaitu
 update bobot dan bias menggunakan aturan PSO
 sehingga bobot dan bias hasil akhir menjadi optimal
 fungsi objektif PSO dibangun atas 2 langkah utama dari NN yaitu terdiri
 dari perhitungan maju dan mundur sehingga didapatkan error 
 error terkecil menjadi paramater PSO
 setelah didapatkan bobot dan bias dari PSO
 akan digunakan kembali sebagai input perhitungan NN yaitu 
 perhitungan maju untuk memprediksi hasil akhir

Kasus sederhana yang dipilih yaitu logika non lineaar Boolean XOR
Input dan target yaitu
      X       target
    ______    ______

    1    1      0   
    1    0      1   
    0    1      1   
    0    0      0   

NN standar akan melakukan pelatihan....
Jumlah epoch 5000
Nilai learning rate 0.25
Jumlah node hidden 3
NN selesai... 
Proses pencarian oleh PSO.....
Dengan jumlah partikel sebanyak 50 dan iterasi 10

                                 Best            Mean     Stall
Iteration     f-count            f(x)            f(x)    Iterations
    0              50          0.1385          0.4868        0
   10             550        8.72e-56          0.3458        0
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
Switching to the hybrid optimization algorithm (FMINCON).
FMINCON ended.
PSO selesai....
hasil prediksi PSO dan NN
    target    prediksi_pso    prediksi_nn
    ______    ____________    ___________

      0        4.1762e-28      0.059254  
      1                 1       0.95451  
      1                 1       0.95461  
      0        4.1762e-28      0.039221  

Terlihat bahwa nilai dari PSO lebih mendekati target daripada NN


Kode diatas menggunakan Matlab agar lebih mudah dalam pengolahan array, adapun untuk bahasa lain seperti Python sedang penulis porting ulang, karena Python akan digunakan untuk mengolah dataset yang sangat besar menggunakan Hd5, serta menggunakan beragam library seperti numpy, matplotlib, pandas, dan opencv sehingga kendala lisensi dalam sebuah research bisa dikurangi.
Dapatkan buku kami
http://www.softscients.web.id/2018/11/buku-belajar-mudah-python-dengan.html
atau mengajukan pertanyaan ke
http://www.softscients.web.id/p/konsultasi.html