Penerapan Algoritma Particle Swarm Optimization (PSO) Pada Kasus Prediksi
Particle Swarm Optimization (PSO) merupakan algoritma berbasis populasi yang mengeksploitasi individu dalam pencarian. Dalam PSO populasi disebut swarm dan individu disebut particle. Setiap partikel berpindah dengan kecepatan yang diadaptasi dari daerah pencarian dan menyimpannya sebagai posisi terbaik yang pernah dicapai.
PSO didasarkan pada perilaku sosial sekawanan burung atau sekumpulan ikan. Perilaku sosial terdiri dari tindakan individu dan pengaruh dari individu-individu lain dalam suatu kelompok.
Berikut ini merupakan contoh penerapan algoritma PSO pada kasus prediksi. PSO diimplementasikan untuk mengoptimasi algoritma jaringan syaraf tiruan backpropagation dalam memprediksi Indeks Harga Saham Gabungan (IHSG). Langkah-langkah pemrogramannya adalah sebagai berikut:
1. Membaca data IHSG, data bulanan dari bulan januari 2015 sampai dengan desember 2019. Perintah yang digunakan untuk membaca data IHSG dari file excel yaitu:
% membaca data excel data = xlsread('IHSG.xlsx',1,'E5:P9');
Tampilan data IHSG dari bulan januari 2015 sampai dengan desember 2019 adalah sebagai berikut
2. Melakukan normalisasi data, data ditransformasi ke dalam range 0.1-0.9, persamaan yang digunakan adalah
di mana:
X’ = data hasil normalisasi
X = data asli/data awal
a = nilai maksimum data asli
b = nilai minimum data asli
Sedangkan perintah yang digunakan untuk melakukan normalisasi data adalah
% 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 pada gambar berikut
3. Mempersiapkan data latih dan target latih
Pada pemrograman ini, data IHSG diprediksi berdasarkan data IHSG 12 bulan sebelumnya. Data latih yang digunakan adalah data IHSG dari bulan Januari 2015 sampai dengan bulan November 2018. Sedangkan target latih adalah data IHSG dari bulan Januari 2016 sampai dengan bulan Desember 2018. Gambaran dari penggunaan data latih dan target latih ditunjukkan pada tabel berikut:
Perintah yang digunakan untuk menyusun data latih dan target latih yaitu
% menyusun data dan target latih data_norm = data_norm'; tahun_latih = 3; % Januari 2015 s.d November 2018 jumlah_bulan = 12; data_latih = zeros(12,jumlah_bulan*tahun_latih); for n = 1:jumlah_bulan*tahun_latih 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+1)); % Januari 2016 s.d Desember 2018
Tampilan dari data latih dan target latih setelah disusun adalah sebagai berikut
Sedangkan tampilan dari target latih adalah
4. Melakukan pelatihan
Pelatihan dilakukan menggunakan algoritma jaringan syaraf tiruan backpropagation dan jaringan syaraf tiruan backpropagation yang dioptimasi dengan algortima pso. Perintah yang digunakan untuk melakukan pelatihan adalah
% menyiapkan parameter2 arsitektur jst (jumlah neuron pada % hidden layer, jenis fungsi aktivasi, dan fungsi pelatihan) jumlah_neuron1 = 10; fungsi_aktivasi1 = 'logsig'; fungsi_aktivasi2 = 'purelin'; fungsi_pelatihan = 'traingd'; % membangun arsitektur jaringan syaraf tiruan backpropagation net = newff(minmax(data_latih),[jumlah_neuron1 1],{fungsi_aktivasi1,... fungsi_aktivasi2},fungsi_pelatihan); % menyiapkan parameter2 pelatihan (error goal, jumlah % epoch, laju pembelajaran) error_goal = 1e-6; jumlah_epoch = 1000; laju_pembelajaran = 0.01; net.trainParam.goal = error_goal; net.trainParam.epochs = jumlah_epoch; net.trainParam.lr = laju_pembelajaran; % proses pelatihan (training) net_keluaran = train(net,data_latih,target_latih); % hasil pelatihan hasil_latih = sim(net_keluaran,data_latih); % penghitungan nilai MSE MSE_latih = mse(hasil_latih,target_latih); hasil_latih = ((hasil_latih-0.1)*(max_data-min_data)/0.8)+min_data; target_latih_asli = data(2:4,:); % 2016 s.d 2018 target_latih_asli = target_latih_asli'; target_latih_asli = target_latih_asli(:); % PSO h = @(x) NMSE(x, net_keluaran, data_latih, target_latih); k = jumlah_neuron1; [x_pso, ~] = pso(h, 12*k+k+k+1); net_keluaran_pso = setwb(net_keluaran, x_pso'); hasil_latih_pso = sim(net_keluaran_pso,data_latih); % penghitungan nilai MSE MSE_latih_pso = mse(hasil_latih_pso,target_latih); hasil_latih_pso = ((hasil_latih_pso-... 0.1)*(max_data-min_data)/0.8)+min_data; % plot grafik keluaran jst dengan target figure, plot(target_latih_asli,'ro-','LineWidth',1) hold on plot(hasil_latih,'b*-','LineWidth',1) plot(hasil_latih_pso,'g*-','LineWidth',1) hold off grid on title('Grafik Keluaran JST vs Target') h = gca; h.XTick = [1:12:48]; h.XTickLabel = {'2016';'2017';'2018';'2019'}; xlabel('Tahun') ylabel('IHSG') legend('Target','NN','NN+PSO','Location','Best')
Tampilan proses pelatihan jaringan syaraf tiruan ditunjukkan pada gambar berikut
Sedangkan tampilan iterasi yang dihasilkan oleh PSO ditunjukkan pada gambar di bawah ini
Grafik keluaran jst dan jst+pso terhadap target latih pada proses pelatihan ditunjukkan pada gambar berikut
Pada proses pelatihan, nilai Mean Square Error (MSE) yang dihasilkan oleh sistem ditunjukkan pada tabel berikut
Berdasarkan pada tabel di atas, nilai MSE yang dihasilkan oleh jst backpropagation yang teroptimasi oleh PSO lebih kecil dibandingkan dengan jst tanpa optimasi. Hal ini menunjukkan bahwa dengan adanya optimasi oleh PSO, akurasi yang dihasilkan menjadi lebih baik.
5. Mempersiapkan data uji dan target uji
Data uji yang digunakan adalah data IHSG dari bulan Januari 2018 sampai dengan bulan November 2019. Sedangkan target latih adalah data IHSG dari bulan Januari 2019 sampai dengan bulan Desember 2019. Gambaran dari penggunaan data uji dan target uji ditunjukkan pada tabel berikut:
Perintah yang digunakan untuk menyusun data uji dan target uji yaitu
% menyusun data dan target uji tahun_uji = 1; % Januari 2018 s.d November 2019 jumlah_bulan = 12; data_uji = zeros(12,jumlah_bulan*tahun_uji-1); for n = 1:jumlah_bulan*tahun_uji for m = 1:jumlah_bulan data_uji(m,n) = data_norm(jumlah_bulan*tahun_latih+m+n-1); end end target_uji = data_norm(jumlah_bulan*(tahun_latih+tahun_uji)+1:end); % Januari 2019 s.d Desember 2019
Tampilan dari data uji dan target uji setelah disusun adalah sebagai berikut
Sedangkan tampilan dari target uji adalah
6. Melakukan pengujian
Perintah yang digunakan untuk melakukan pengujian adalah
% hasil pengujian NN hasil_uji = sim(net_keluaran,data_uji); % penghitungan nilai MSE MSE_uji = mse(hasil_uji,target_uji); hasil_uji = ((hasil_uji-... 0.1)*(max_data-min_data)/0.8)+min_data; target_uji_asli = data(5,:); % 2019 target_uji_asli = target_uji_asli'; target_uji_asli = target_uji_asli(:); % hasil pengujian NN+PSO hasil_uji_pso = sim(net_keluaran_pso,data_uji); % error MSE PSO optimized NN MSE_uji_pso = mse(hasil_uji_pso,target_uji); hasil_uji_pso = ((hasil_uji_pso-... 0.1)*(max_data-min_data)/0.8)+min_data; % plot grafik keluaran jst dengan target figure, plot(target_uji_asli,'mo-','LineWidth',1) hold on plot(hasil_uji,'y*-','LineWidth',1) plot(hasil_uji_pso,'c*-','LineWidth',1) hold off grid on title('Grafik Keluaran JST vs Target') h = gca; h.XTick = [1:12]; h.XTickLabel = {'JAN';'FEB';'MAR';'APR';'MEI';'JUN';... 'JUL';'AGS';'SEP';'OKT';'NOV';'DES'}; xlabel('Tahun 2019') ylabel('IHSG') legend('Target','NN','NN+PSO','Location','Best')
Grafik keluaran jst dan jst+pso terhadap target uji pada proses pengujian ditunjukkan pada gambar berikut
Pada proses pengujian, nilai Mean Square Error (MSE) yang dihasilkan oleh sistem ditunjukkan pada tabel berikut
Berdasarkan pada nilai MSE pada proses pelatihan maupun pengujian, jst backpropagation yang teroptimasi oleh PSO menghasilkan akurasi yang lebih baik dibandingkan dengan jst tanpa optimasi.
Source code lengkap beserta data pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code
Posted on February 8, 2020, in Data mining and tagged algoritma jaringan syaraf tiruan, algoritma optimasi, algoritma particle swarm optimization (pso), algoritma pso, aplikasi pso untuk optimasi, contoh koding jst backpropagation, contoh koding pso, optimasi jaringan syaraf tiruan, optimasi pso, perhitungan jaringan syaraf tiruan, perhitungan pso. Bookmark the permalink. 14 Comments.
Mas adi,
Untuk matlab, kira2 pake perantara aplikasi apa saja ya supaya bisa dijadikan aplikasi mobile?
Terima kasih.
Mas adi minta saran nya dong buat pelajar pemula matlab bang,
Untuk Matlab nya paling cocok dipake yg versi brapa ya bang
Bisa menggunakan matlab versi terbaru untuk belajar karena toolboxnya yg paling lengkap
bisa tanya-tanya via personal tidak ya ka? saya sedang skripsi mengenai topik algoritma pso untuk penentuan rute jaringan fiber to the home terbaik. butuh referensi…
Maaf mas mau tanya, saya coba source code diatas yg bagian pso nya kok eror ya mas.. minta dideklarasikan terlebih dahulu, itu bagaimana ya? mohon pencerahannya mas
Source code lengkap dapat dibeli di tokopedia
mas mau tanya bagian [x_pso, ~] = pso(h, 12*k+k+k+1); untuk variable pso nya saya coba eror, apa perlu adanya deklarasi pada bagian itu? mohon bantuannya mas
Source code lengkap bisa dibeli di tokopedia sehingga bisa dirunning dan dikembangkan
Pembelian tanggal berapa?
Selamat siang bang, maaf sebelumnya boleh mnta file excel hitung manualnya gak?
malem pak, bisa contohin pemrograman PSO untuk fuzzy?
Selamat Siang Pak, Untuk menampilkan Iterasi Pemrograman PSO bagaimana ya?
cara pembelian source code gimana ya kak?
pembelian bisa melalui tokopedia