Jaringan Syaraf Tiruan untuk Memprediksi Jumlah Penduduk
Salah satu penerapan algoritma jaringan syaraf tiruan adalah untuk sistem prediksi (forecasting). Prediksi dapat dilakukan dalam bentuk urutan waktu (time series) atau dapat pula dilakukan dalam bentuk bukan urutan waktu.
Dalam sistem prediksi urutan waktu, data masukan adalah berupa beberapa data dalam kurun waktu tertentu, sedangkan data keluarannya adalah data pada kurun waktu berikutnya. Pada sistem prediksi ini data keluaran diasumsikan hanya dipengaruhi oleh data-data sebelumnya.
Contoh sistem prediksi urutan waktu:
sistem untuk memprediksi jumlah penduduk pada bulan tertentu di mana data masukannya adalah jumlah penduduk pada 12 bulan sebelumnya.
Untuk sistem prediksi bukan urutan waktu, data masukannya adalah berupa beberapa variabel data yang dianggap mempengaruhi nilai data keluaran, sedangkan data keluarannya adalah berupa data pada kurun waktu berikutnya. Pada sistem prediksi ini variabel-variabel yang mempengaruhi nilai data keluaran diikutsertakan untuk melakukan prediksi.
Contoh sistem prediksi bukan urutan waktu:
sistem untuk memprediksi jumlah penduduk pada bulan tertentu di mana data masukannya adalah jumlah penduduk pada 1 bulan sebelumnya, tingkat kesejahteraan penduduk, tingkat keamanan lingkungan, faktor politik, dan faktor-faktor demografi lainnya pada 1 bulan sebelumnya.
Berikut ini merupakan contoh aplikasi pemrograman menggunakan bahasa pemrograman matlab untuk melakukan prediksi jumlah penduduk pada suatu daerah X dengan sistem prediksi urutan waktu menggunakan algoritma jaringan syaraf tiruan radial basis function (rbf neural network).
Langkah-langkah nya adalah sebagai berikut:
1. Mempersiapkan data jumlah penduduk. Data jumlah penduduk di suatu daerah X disajikan per bulan dari tahun 2006 sampai dengan tahun 2016.
2. Untuk mereduksi perhitungan komputasi yang terlalu besar, maka dilakukan normalisasi data ke dalam range 0,1 s.d 0,9 menggunakan persamaan berikut:
di mana:
X’ = data hasil normalisasi
X = data asli/data awal
a = nilai maksimum data asli
b = nilai minimum data asli
Perintah yang digunakan yaitu:
clc; clear; close all; warning off all; data = xlsread('Book1',1,'E6:P16'); % Proses Normalisasi Data max_data = max(max(data)); min_data = min(min(data)); [m,n] = size(data); data_norm = zeros(m,n); for x = 1:m for y = 1:n data_norm(x,y) = 0.1+0.8*(data(x,y)-min_data)/(max_data-min_data); end end
sehingga diperoleh data hasil normalisasi seperti yang ditunjukkan pada gambar di bawah ini
3. Pada pemrograman ini, data jumlah penduduk diprediksi berdasarkan data jumlah penduduk 12 bulan sebelumnya. Data latih yang digunakan adalah data jumlah penduduk dari bulan Januari 2006 sampai dengan bulan November 2012 (7 tahun). Sedangkan target latih adalah data jumlah penduduk dari bulan Januari 2007 sampai dengan bulan Desember 2012 (7 tahun). Gambaran dari penggunaan data latih dan target latih ditunjukkan pada tabel berikut:
Perintah yang digunakan untuk menyusun data latih dan target latih seperti pada pola di atas adalah:
% Pelatihan data_norm = data_norm'; tahun_latih = 7; % Januari 2006 s.d November 2012 data_latih = zeros(12,72); jumlah_bulan = 12; for n = 1:jumlah_bulan*(tahun_latih-1) for m = 1:jumlah_bulan data_latih(m,n) = data_norm(m+n-1); end end target_latih = data_norm(jumlah_bulan+1:jumlah_bulan*tahun_latih); % Januari 2007 s.d Desember 2012
sehingga susunan data latih dan target latih yang diperoleh adalah
4. Melakukan pelatihan jaringan radial basis function dengan masukan berupa data latih dan target latih yang sebelumnya telah disusun.
Perintah yang digunakan adalah:
% performance goal (MSE) error_goal = 1e-6; % choose a spread constant spread = 1.2; % choose max number of neurons K = 10; % number of neurons to add between displays Ki = 20; % create a neural network net = newrb(data_latih,target_latih,error_goal,spread,K,Ki); % inisialisasi bobot load bobot_awal net.IW{1,1} = bobot_hidden; net.LW{2,1} = bobot_keluaran; net.b{1,1} = bias_hidden; net.b{2,1} = bias_keluaran; % Proses training net.trainFcn = 'traingdx'; [net_keluaran,tr,~,E] = train(net,data_latih,target_latih); % Hasil setelah pelatihan nilai_error = E; error_MSE = (1/n)*sum(nilai_error.^2); save net_keluaran.mat net_keluaran
Tampilan pelatihan jaringan ditunjukkan pada gambar di bawah ini
5. Menampilkan hasil pelatihan dalam bentuk grafik beserta nilai MSE (Mean Square Error) dan koefisien korelasi.
Perintah yang digunakan adalah:
% Hasil prediksi hasil_latih = sim(net_keluaran,data_latih); hasil_latih = ((hasil_latih-0.1)*(max_data-min_data)/0.8)+min_data; data = data'; target_latih_asli = data(jumlah_bulan+1:jumlah_bulan*tahun_latih); % januari 2007 s.d januari 2013 % Menampilkan grafik hasil pelatihan 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('Bulan ke-') ylabel('Jumlah Penduduk') legend('Keluaran JST','Target','Location','Best') figure, plotregression(target_latih_asli,hasil_latih,'Regression')
Grafik keluaran yang dihasilkan dari proses pelatihan adalah sebagai berikut:
Sedangkan grafik korelasi yang diperoleh yaitu:
Nilai MSE dan koefisien korelasi yang dihasilkan pada proses pelatihan berturut-turut adalah sebesar 0.00066804 dan 0.85259. Kedua nilai tersebut menunjukkan bahwa proses pelatihan jaringan radial basis function dapat memprediksi jumlah penduduk dengan baik, sehingga jaringan yang diperoleh dapat digunakan untuk melakukan prediksi pada proses pengujian.
5. Mempersiapkan data uji dan target uji. Pada proses pengujian, target uji digunakan hanya untuk memvalidasi hasil pengujian. Gambaran penggunaan data uji dan target uji ditunjukkan pada tabel berikut:
Perintah yang digunakan untuk menyusun data uji dan target uji seperti pada pola di atas adalah:
% Pengujian tahun_uji = 5; % Desember 2012 s.d November 2016 data_uji = zeros(12,48); jumlah_bulan = 12; for n = 1:jumlah_bulan*(tahun_uji-1) for m = 1:jumlah_bulan data_uji(m,n) = data_norm(72+m+n-1); end end target_uji = data_norm(jumlah_bulan*tahun_uji+1:(jumlah_bulan*tahun_uji)+48); % Januari 2013 s.d Desember 2016
sehingga susunan data uji dan target uji yang diperoleh adalah
6. Menampilkan hasil pengujian dalam bentuk grafik beserta nilai MSE (Mean Square Error) dan koefisien korelasi.
Perintah yang digunakan adalah:
% Hasil prediksi hasil_uji = sim(net_keluaran,data_uji); error_MSE_uji = mse(target_uji,hasil_uji); hasil_uji = ((hasil_uji-0.1)*(max_data-min_data)/0.8)+min_data; target_uji_asli = data(jumlah_bulan*tahun_uji+1:(jumlah_bulan*tahun_uji)+48); % Januari 2013 s.d Desember 2016 % Menampilkan grafik hasil pengujian 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_uji)])) xlabel('Bulan ke-') ylabel('Jumlah Penduduk') legend('Keluaran JST','Target','Location','Best') figure, plotregression(target_uji_asli,hasil_uji,'Regression')
Grafik keluaran yang dihasilkan dari proses pengujian adalah sebagai berikut:
Sedangkan grafik korelasi yang diperoleh yaitu:
Nilai MSE dan koefisien korelasi yang dihasilkan pada proses pengujian berturut-turut adalah sebesar 0.0034992 dan 0.91069. Kedua nilai tersebut menunjukkan bahwa proses pengujian jaringan radial basis function dapat memprediksi jumlah penduduk dengan baik, sehingga jaringan yang diperoleh dapat digunakan untuk melakukan prediksi jumlah penduduk pada bulan-bulan berikutnya.
7. Melakuan prediksi untuk bulan Januari 2017 sampai dengan Desember 2017 (12 bulan).
Perintah yang digunakan adalah:
load net_keluaran load data_prediksi_rbf load hasil_prediksi_rbf data_prediksi = data_prediksi_rbf(:,12); % Hasil prediksi hasil_prediksi_norm = sim(net_keluaran,data_prediksi); hasil_prediksi = ((hasil_prediksi_norm-0.1)*(max_data-min_data)/0.8)+min_data; data_prediksi = data_prediksi(2:end,:); data_prediksi = [data_prediksi;hasil_prediksi_norm]; data_prediksi_rbf = [data_prediksi_rbf,data_prediksi]; hasil_prediksi_rbf = [hasil_prediksi_rbf,hasil_prediksi]; % save data_prediksi_rbf data_prediksi_rbf % save hasil_prediksi_rbf hasil_prediksi_rbf figure, plot(hasil_prediksi_rbf); grid on title('Hasil Prediksi Jumlah Penduduk Bulan Januari 2017 s.d Desember 2017') xlabel('Bulan ke-') ylabel('Jumlah Penduduk') legend('Hasil Prediksi','Target','Location','Best')
Grafik hasil prediksi yang dihasilkan yaitu
Hasil dari pelatihan, pengujian, dan prediksi di atas menunjukkan bahwa jaringan syaraf tiruan radial basis function mampu untuk melakukan prediksi jumlah penduduk dengan baik.
File source code lengkap beserta data pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code
Posted on July 26, 2017, in Data mining, Pengenalan Pola and tagged aplikasi matlab, aplikasi matlab untuk prediksi, cara membuat prediksi menggunakan matlab, cara menggunakan matlab, cara menghitung mse, cara menghitung nilai mse, contoh jaringan syaraf tiruan, contoh koding prediksi matlab, contoh program matlab, data mining utnuk prediksi matlab, jaringan syaraf tiruan, jaringan syaraf tiruan adalah, jaringan syaraf tiruan radial basis function untuk prediksi, jaringan syaraf tiruan rbf, jst adalah, jst rbf matlab, jst untuk prediksi matlab, kumpulan contoh program matlab, pemrograman matlab, perhitungan mse matlab, prediksi jumlah penduduk, prediksi menggunakan algoritma jst, prediksi menggunakan jaringan syaraf tiruan, prediksi menggunakan jaringan syaraf tiruan matlab, prediksi time series matlab, radial basis function matlab, rbfnn, rumus menghitung mse, sistem prediksi. Bookmark the permalink. 126 Comments.
Baik, terima kasih atas informasinya Bpk Adi.
Yth. Bpk Adi Pamungkas, mohon pencerahannya. Jika data penduduk dibuat grafik tiap tahunnya 2006 s.d. 2016 (11 grafik) semuanya menunjukkan kenaikan. Namun mengapa grafik prediksi 2017 menunjukkan penurunan? Terima kasih Pak Adi.
load bobot_awal error
File lengkap beserta source code bisa dibeli di tokopedia sehingga bisa dirunning dan dikembangkan
Assalamualaikum, Pak Adi.
Untuk source code yang sistem prediksi bukan urutan waktu ada nggak nggih, Pak?
Terimakasih
Assalamu’alaikum Mas, mau nanya. Untuk mendapatkan hasil prediksi bagaimana ya? apakah prosesnya sama dengan pengujian?
waalaikumsalam
materi pada halaman berikut ini bisa dipelajari
https://pemrogramanmatlab.com/2017/07/26/jaringan-syaraf-tiruan-untuk-memprediksi-jumlah-penduduk/
Selain Matlab r2015b apakah yg d rekomendasikan mas untuk Matlabnya, punya saya r2017a,tapi suka eror, apa r2015a bisa?
Bisa dicoba
assalamu’alaikum mas, mau nanya rumus MSE manual untuk output 2 pola (Y0 dan Y1) bagaimana ya? karena dalam 1 data, menghasilkan 2 faktor error
assalamu ‘alaikum mas. u running data latih ada yg error untuk save net_keluaran.mat net_keluaran dengan keterangan :
Error using save
Unable to write file net.mat: permission denied.
Error in Pelatihan (line 38)
save net.mat net_keluaran
akhirnya berdampak running data uji juga ikut error dengan keterangan :
Error using load
Unable to read file ‘net.mat’. No such file or directory.
Error in Pengujian (line 4)
load net.mat
Mohon petunjuknya mas, terima kasih.
Assalamualaikum mas,mau tanya untuk lengkap beserta source code bisa dibeli di tokopedia nama tokonya apa ya?terimakasihh
Assalamualaikum mas,mau tanya untuk lengkap beserta source code bisa dibeli di tokopedia nama tokonya apa ya?terimakasihh
Permisi ka, untuk data prediksi dan hasil prediksi rbf yang dipake data yang mana ya? Terimakasih
Pingback: Pengertian Jaringan Syaraf Tiruan, Fuzzy Logic dan Algoritma Genetika – andre
Pingback: Kecerdasan Komputasional – Judul Situs