Anda di halaman 1dari 16

Agoritma 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 contoh aplikasi pemrograman menggunakan 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).

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:

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

perintah yang digunakan yaitu :


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:

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 ditnjukkan pada gambar dibawah ini

5. Menampilkan hasil
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.

6. 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:
7. 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.

8. 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 = xlsread('Book1',1,'E6:P16');
data = reshape(data',[1,numel(data)]);
% Proses Normalisasi Data
max_data = max(data);
min_data = min(data);
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.
SCRIPT LENGKAP
Pelatihan.m

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

% 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

% 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

% 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')

Anda mungkin juga menyukai