Jaringan Syaraf Tiruan untuk Prediksi menggunakan Matlab


Jaringan syaraf tiruan merupakan algoritma klasifikasi yang meniru prinsip kerja dari jaringan syaraf manusia. Algoritma ini memetakan data masukan pada layer masukan menuju target pada layer keluaran melalui neuron-neuron pada layer tersembunyi.

Data masukan dirambatkan maju, dihubungkan oleh bobot-bobot masukan yang sebelumnya telah diinisialisasi secara acak menuju neuron pada layer tersembunyi

Pada layer tersembunyi, data masukan yang telah dihubungkan dengan bobot tersebut kemudian diproses menggunakan fungsi aktivasi. Selanjutnya data hasil olahan dari layer tersembunyi dihubungkan oleh bobot-bobot tersembunyi menuju neuron pada layer keluaran.

Hasil yang diperoleh kemudian dibandingkan dengan data target sehingga diperoleh tingkat kesalahan (error). Apabila tingkat kesalahan yang diperoleh lebih kecil daripada tingkat kesalahan yang sebelumnya telah ditetapkan (target error), maka proses perambatan akan berhenti. Namun apabila tingkat kesalahan masih lebih besar daripada tingkat kesalahan tetapan maka dilakukan proses perambatan balik dengan melakukan pembaharuan bobot.

Salah satu aplikasi dari algoritma jaringan syaraf tiruan adalah untuk kasus prediksi.

Berikut ini merupakan contoh pemrograman matlab untuk memprediksi curah hujan menggunakan algoritma jaringan syaraf tiruan propagasi balik (backpropagation neural network).

Langkah-langkahnya yaitu:

1. Mempersiapkan data curah hujan time series untuk prediksi. Pada contoh ini digunakan data rata-rata curah hujan tiap bulan di kota Semarang pada tahun 2005 s.d 2007. Pada algoritma jaringan syaraf tiruan propagasi balik ini digunakan fungsi aktivasi sigmoid biner di mana fungsi ini bernilai antara 0 s.d 1. Namun fungsi sigmoid biner tersebut sejatinya tidak pernah mencapai angka 0 maupun 1. Oleh sebab itu, data curah hujan perlu dinormalisasi terlebih dahulu salah satu contohnya ke dalam range 0,1 s.d 0,9 menggunakan persamaan berikut ini:


di mana:
X’ = data hasil normalisasi
X = data asli/data awal
a = nilai maksimum data asli
b = nilai minimum data asli

Data curah hujan asli dan setelah dinormalisasi tampak pada gambar di bawah ini:

2. Pada contoh ini, penggunaan data masukan JST untuk prediksi adalah sebagai berikut:

Data latih menggunakan data curah hujan pada bulan ke-1 s.d bulan ke-24 (tahun 2005-2006) sedangkan data uji menggunakan data curah hujan pada bulan ke-13 s.d bulan ke-36 (tahun 2006-2007). Pola data masukan untuk proses pelatihan dan pengujian jaringan ditunjukkan pada gambar di bawah ini:

3. Setelah data latih dan data uji disiapkan dalam format xlsx (excel), dilakukan pemrograman untuk melakukan pelatihan jaringan. Arsitektur jaringan syaraf tiruan yang digunakan pada contoh ini adalah 12-10-1 yang artinya terdiri dari 12 nilai masukan (data curah hujan 12 bulan), 10 neuron pada hidden layer, dan satu nilai keluaran yaitu data curah hujan pada bulan berikutnya. Source code pelatihan jaringan untuk prediksi adalah:

clc;clear;close all;warning off;

% Proses membaca data latih dari excel
filename = 'Book1.xlsx';
sheet = 2;
xlRange = 'D6:P17';

Data = xlsread(filename, sheet, xlRange);
data_latih = Data(:,1:12)';
target_latih = Data(:,13)';
[m,n] = size(data_latih);

% Pembuatan JST
net = newff(minmax(data_latih),[10 1],{'logsig','purelin'},'traingdx');

% Memberikan nilai untuk mempengaruhi proses pelatihan
net.performFcn = 'mse';
net.trainParam.goal = 0.001;
net.trainParam.show = 20;
net.trainParam.epochs = 1000;
net.trainParam.mc = 0.95;
net.trainParam.lr = 0.1;

% Proses training
[net_keluaran,tr,Y,E] = train(net,data_latih,target_latih);

% Hasil setelah pelatihan
bobot_hidden = net_keluaran.IW{1,1};
bobot_keluaran = net_keluaran.LW{2,1};
bias_hidden = net_keluaran.b{1,1};
bias_keluaran = net_keluaran.b{2,1};
jumlah_iterasi = tr.num_epochs;
nilai_keluaran = Y;
nilai_error = E;
error_MSE = (1/n)*sum(nilai_error.^2);

save net.mat net_keluaran

% Hasil prediksi
hasil_latih = sim(net_keluaran,data_latih);
max_data = 2590;
min_data = 0;
hasil_latih = ((hasil_latih-0.1)*(max_data-min_data)/0.8)+min_data;

% Performansi hasil prediksi
filename = 'Book1.xlsx';
sheet = 1;
xlRange = 'E7:P7';

target_latih_asli = xlsread(filename, sheet, xlRange);

figure,
plotregression(target_latih_asli,hasil_latih,'Regression')

figure,
plotperform(tr)

figure,
plot(hasil_latih,'bo-')
hold on
plot(target_latih_asli,'ro-')
hold off
grid on
title(strcat(['Grafik Keluaran JST vs Target dengan nilai MSE = ',...
num2str(error_MSE)]))
xlabel('Pola ke-')
ylabel('Curah Hujan')
legend('Keluaran JST','Target','Location','Best')

4. Sehingga menghasilkan tampilan proses pelatihan jaringan seperti pada gambar berikut:

Pada pelatihan ini error goal (MSE) sebesar 0,00099941 dicapai pada epoch yang ke-461 seperti ditunjukkan pada gambar di bawah ini:

Sedangkan koefisien korelasi R yang dihasilkan adalah sebesar 0,98886 seperti yang ditunjukkan pada gambar berikut:

Grafik perbandingan antara keluaran JST (prediksi curah hujan) dengan target (data curah hujan sebenarnya) adalah sebagai berikut:

Berdasarkan pada nilai koefisien korelasi dan nilai MSE (Mean Square Error) yang diperoleh pada proses pelatihan tersebut, dapat disimpulkan bahwa JST dapat memprediksi curah hujan dengan sangat baik.

5. Proses selanjutnya adalah pengujian jaringan. Source code untuk melakukan pengujian jaringan adalah sebagai berikut:

clc;clear;close all;

% load jaringan yang sudah dibuat pada proses pelatihan
load net.mat

% Proses membaca data uji dari excel
filename = 'Book1.xlsx';
sheet = 2;
xlRange = 'D24:P35';

Data = xlsread(filename, sheet, xlRange);
data_uji = Data(:,1:12)';
target_uji = Data(:,13)';
[m,n] = size(data_uji);

% Hasil prediksi
hasil_uji = sim(net_keluaran,data_uji);
nilai_error = hasil_uji-target_uji;

max_data = 2590;
min_data = 0;
hasil_uji = ((hasil_uji-0.1)*(max_data-min_data)/0.8)+min_data;

% Performansi hasil prediksi
error_MSE = (1/n)*sum(nilai_error.^2);

filename = 'Book1.xlsx';
sheet = 1;
xlRange = 'E8:P8';

target_uji_asli = xlsread(filename, sheet, xlRange);

figure,
plot(hasil_uji,'bo-')
hold on
plot(target_uji_asli,'ro-')
hold off
grid on
title(strcat(['Grafik Keluaran JST vs Target dengan nilai MSE = ',...
num2str(error_MSE)]))
xlabel('Pola ke-')
ylabel('Curah Hujan')
legend('Keluaran JST','Target','Location','Best')

6. Sehingga pada proses pengujian jaringan tersebut dihasilkan koefisien korelasi sebesar 0,57017

Sedangkan nilai MSE yang diperoleh adalah  0,062891

Nilai koefisien korelasi dan nilai MSE yang dihasilkan pada proses pengujian menunjukkan bahwa jaringan syaraf tiruan propagasi balik cukup baik untuk memprediksi curah hujan. Kedua nilai tersebut dapat ditingkatkan performansinya dengan cara memperbanyak data latih serta mengubah-ubah parameter yang mempengaruhi performansi jaringan seperti error goal, jumlah epoch, arsitektur jaringan, jenis fungsi aktivasi, dll.

Source code algoritma jaringan syaraf tiruan propagasi balik untuk kasus prediksi dapat diperoleh pada halaman berikut ini: Source Code

Berikut ini merupakan materi mengenai jaringan syaraf tiruan dan aplikasinya untuk:
1. Prediksi jumlah penduduk
2. Klasifikasi pola bentuk suatu objek dalam citra digital
3. Definisi, konsep, dan aplikasi jaringan syaraf tiruan
4. Pengenalan pola logika AND
5. Identifikasi wajah manusia

Save

Save

Save

Save

Posted on July 8, 2016, in Data mining, Pengenalan Matlab and tagged , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 167 Comments.

  1. pada gambar plot grafik ditampilkan nilai mse.yg sy tanya bgm script nya untuk menampilkan skaligus nilai eror mse, mae, mbe dlm satu title grafik?mksh

  2. permisi gan, mau tanya penentuan data latih dan data uji klo datanya ada 5 tahun bagaimana yah ? thx

  3. permisi mas mau tanya, bagian untuk prediksinya dimana ya saya masih bingung? misal setelah saya melakukan training data dari data diatas terus saya mau prediksi curah hujan pada tahun 2008/2009/2010 atau ketiganya gimana mas? mohon bantuannya

  4. Pak mau nanya, saya membuat prediksi beban puncak menggunakan input berupa data historis beban puncak dan jumlah penduduk 7 tahun ke belakang. Pada saat training menggunakan data 5 tahun sudah berhasil pak, namun pada saat di testing menggunakan 2 tahun berikutnya itu sangat jauh dari target pak. Itu bagaimana ya pak ? mungkin bapak tau solusinya, terimakasih

  5. permisi mau tanya, itu data target didapat dari mana ya ?

  6. mas Adi, saya mau tanya bagaimana caranya menuliskan source code pemanggilan bobot dan bias dari hasil pelatihan untuk dipakai pada source code pengujian data dengan menggunakan bobot dan bias hasil pelatihan

    • ketika pelatihan kita simpan variabel net yang berisi arsitektur jaringan syaraf tiruan yang dibangun pada saat pelatihan
      variabel tersebut berisi bobot-bobot hasil pelatihan yang dapat kita load saat pengujian

  7. mas mau tanya, itu data inputan harus 12 ya ? kalau saya ganti bagaimana ? kemudian untuk case data haran, kira” nanti bakal seperti apa ya ?? terimakasih

  8. untuk enjelasan diata kan menggunakan 1 target, kalau untuk banyak target bagaimana ya kak ?

  9. Pak saya masih bingung bagaimana membuat polanya. Data latih dan uji di atas hanya 3tahun X 12 bulan, tpi setelah d normalisasi kok bisa jadi banyak itu gimana caranya ya pak?
    mohon arahannya

  10. mas saya mau tanya..
    Kenapa harus 10 neuron hiden layer nya ?
    Hasil akurasi dr pelatihan dan pengujian tersebut berapa ya ?
    mohon jawabannya
    makasih mas

  11. kalau untuk normalisasi tapi beberapa variabel batas atas & bawah harus sesuai masing2 variabel atau batas atas & bawahnya dari data keseluruhan pak?
    Misal data a = 12345 ; data b=20,30,80,70,50 ; data c=100,200,300,400,500
    batas atas & bawah untuk normalisasinya bagaimana pak?

  12. Herdis Yudistira

    apa cara yang digunakan untuk mendapatkan data latih dan data uji?

  13. Terimaksih atas informasinya mas Adi pamungkas. saya ingin bertanya, bagaimana penulisan code di kolom command untuk memanggil nilai bobot dan bias hasil dari pelatihan? dan jika menggunakan fitting tool nilai bobot dan biasnya itu dari mana ya? mohon dijawab.

  14. Mas, sy mau bertanya. Sy kn menggunakan program kodingan mas sbg referensi untuk belajar. Ketika sy jalanin programnya, Grafik Keluaran JST vs Target nya tidak muncul. Kira-kira permasalahannya apa dan solusinya bagaimana? Terima kasih.

  15. S’lamat Siang Mas Adi , saya mau bertanya bagaimana cara memunculkan nilai prediksi curah hujan dari sebuah bulan tertentu ,
    contoh nya pda bulan januari , prediksi curah hujannya brpa mm

  16. Selamat pagi mas adi sangat bagus informasinya namun saya bertanya rumus normalisasi tersebut bersumber darimana dan bagaimana cara melakukan denormalisasi? Terimakasih

  17. Bahen Wijayanto

    Selamat pagi mas adi, terima kasih atas informasinya, saya ingin bertanya keika ada keluaran error using network/train inputs and targets have different number of sample kenapa ya mas? terima kasih

  18. Selamat siang pak, saya mau bertanya saya melakukan penelitian tentang prediksi jumlah kasus DBD dengan parameter Iklim, nah pada saat proses pelatihan nilai korelasi yg saya dapat 0.96 namun pada saat proses pengujian hasil korelasi yg saya dapat 0.99
    Nah itu masalah nya kenapa ya sehingga data latihnya mendapat korelasi yang lebih kecil dari pengujian
    Terimakasih

    • selamat siang
      pada umumnya korelasi hasil pelatihan lebih tinggi dibandingkan dengan hasil pengujian
      tetapi jika yg terjadi sebaliknya tidak apa2, tidak masalah

  19. selamat malam mas adi,
    pas mau jalanin program yg latihan kok muncul error (di baris : save)?

    save net.mat net_keluaran
    Error using save
    Unable to write file net.mat: permission denied.

    Mohon dibantu pencerahannya, terimakasaih.

  20. amry priswanto

    selamat malam mas, saya mau tanya, untuk coding prediksi curah hujanya gimana ya ? kalau lihat codingan prediksi jumlah pemduduk, bagian mana yang harus diedit ?
    trims

  21. Salaam. Pak, saya mau tanya. Saya memiliki data dengan 3 input dan 1 target. Data ke-3 input tsb hanya berisi nilai 1,2, atau 3. Sdgkn 1 target tsb hanya berisi nilai 0 atau 1. Saya sudah mencoba dgn toolbox nntool, tapi output yang saya dapatkan sama semua yakni 0,5 dgn MSE 0,25. Apakah hasil tsb memungkinkan pak? Atau apakah kira2 saya melakukan kesalahan? Terima kasih pak.

  22. Selamat pagi pak adi, saya mau tanya untuk cara menghitung normalisasi data yang data maksimum dan minimum nilainya yang mana ya?

  23. pak pengertian dari inisialisasi bobot itu apa? kalau bobot sendiri itu apa?

    • materi mengenai jaringan syaraf tiruan lebih lanjut bisa dipelajari melalui buku
      Jaringan Syaraf Tiruan Dan Pemrogramanannya Menggunakan MATLAB, penulis: Drs. Jong Jek Siang, M.Sc

  24. Metode apa saja yang boleh dipakai dalam prediksi selain Backpropagation??

  25. Siang kak, saya ingin bertanya. Pada tahap training(pelatihan) tanpa merubah nilai parameter epoch, momentum contant, dan learning rate yang sama bisa mengahasilkan mse yang berbeda ya?
    Mohon penjelasannya. Terimakasih

  26. Apakah hasilnya lebih baik jika dilakukan inisialisasi bobot awal?
    Pada source code yang di posting diatas tidak ada bagian inisialisasi bobot awal?
    Ada referensi/sumber yang bisa dijadikan tumpuan memberi nilai inisialisasi bobot awal tidak ka?

    Maaf banyak bertanya karna saya sedang memperlajari ini. Mohon penjelasannya. Thanks\

  27. Apakah proses untuk prediksi curah hujan sudah selesai sampai tahap pengujian? Apa harusnya masih ada proses prediksi atau melihat dari hasil keluaran pengujian??
    Soalnya saya baca-baca beberapa komentar terdahulu dan masih kurang mengerti. Thanks

  28. 1. Menurut kak adi lebih baik bila inisialisasi bobot awal atau tidak?
    2. Apa yang dilakukan pada tahap prediksi? Mengambil nilai dari hasil_uji (pengujian) atau ada proses yang harus mengolah data lagi kak?
    Thanks

  29. Apakah algoritma backpropagation yang sifatnya survive bisa digunakan untuk proses prediksi (seperti yang kakak kasih link diatas) yang sifatnya unsurvived?
    Thanks

    • Algoritma jaringan syaraf tiruan backpropagation merupakan algoritma yg bersifat supervised
      Sedangkan algoritma yg bersifat unsupervised contohnya adalah k-means klustering

  30. Apakah proses prediksi dapat dilakukan oleh semua sifat algoritma? (unsurvived dan survived)? atau hanya algoritma yang bersifat unsurvived saja yang bisa untuk tahap prediksi?

    Thanks kak

  31. pak Adi,bolehkah minta data curah hujan yg berformat excel untuk latihan, karena saya kesulitan jika hanya melihat gambar di atas,

    terimaksih.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: