Laporan Penerapan Backpropagation untuk Kasus : Heart disease
Jaringan Syaraf Tiruan
Disusun Oleh :
Amelia Rifka Hanifa
Kelas :
Statistika G 2019
PROGRAM STUDI STATISTIKA
JURUSAN PENDIDIKAN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS NEGERI YOGYAKARTA
BACKPROPAGATION
Backpropagation merupakan salah satu algoritma Jaringan Syaraf Tiruan yang
menggunakan multilayer perceptron untuk memecahkan masalah yang rumit dengan
metode pelatihan terawasi (supervised learning). Backpropagation memiliki ciri utama
yaitu meminimalkan error pada output yang dihasilkan oleh jaringan. Backpropagation
seringkali digunakan untuk menyelesaikan masalah-masalah yang berkaitan dengan
klasifikasi, identifikasi, prediksi, pengenalan pola dan sebagainya. Langkah-langkah yang
dilakukan untuk menerapkan backpropagation diantaranya sebagai berikut:
1. Initialize Network.
2. Forward Propagate.
3. Back Propagate Error.
4. Train Network.
5. Predict.
Dalam laporan ini, akan diterapkan metode Backpropagation untuk melakukan
klasifikasi terkait penyakit jantung (heart disease). Dataset yang digunakan dalam
penelitian ini yaitu data pasien dengan gejala penyakit jantung. Jenis data yang digunakan
dalam penelitian ini yaitu data sekunder yang didapatkan dari situs UCL Machine Learning
Dataset ini didapatkan dari tahun 1988 dan terdiri dari empat database: Cleveland, Hungaria,
Swiss, dan Long Beach. Dataset ini terdiri atas 14 variabel dan 270 pengamatan.
Adapun variable dari dataset ini yaitu :
1. age: usia
2. sex: jenis kelamin (1 = male, 0 = female)
3. cp: chest pain type
• Value 0: asymptomatic
• Value 1: atypical angina
• Value 2: non-anginal pain
• Value 3: typical angina
4. trestbps: resting blood pressure (mm Hg)
5. chol: kadar kolestrol dalam mg/dl
6. fbs: fasting blood sugar (> 120 mg/dl, 1 = true; 0 = false)
7. restecg: resting electrocardiographic results
• Value 0: menunjukkan hipertrofi ventrikel kiri yang mungkin atau pasti dengan
kriteria Estes
• Value 1: normal
• Value 2: memiliki kelainan gelombang ST-T (T wave inversions and/or ST
elevation or depression of > 0.05 mV)
8. thalach: maksimum heart rate
9. exang: Exercise induced angina (1 = yes; 0 = no)
10. oldpeak: Depresi ST yang diinduksi oleh olahraga relatif terhadap istirahat
11. slope: kemiringan dari the peak exercise ST segment
12. upsloping ca: The number of major vessels (0–3)
13. thal: thalassemia
• Value 0: NULL
• Value 1: fixed defect (tidak ada aliran darah di beberapa bagian jantung)
• Value 2: aliran darah normal
• Value 3: reversible defect (aliran darah diamati tetapi tidak normal)
14. target: Heart disease (2= no, 1= yes)
Penerapan Backpropagation
Langkah-langkah melakukan klasifikasi dengan menggunakan metode backpropagation:
1. Initialize Network.
Pada langkah ini akan dibuat fungsi baru bernama initialize_network yang berfungsi
untuk membuat suatu jaringan baru yang siap dilatih. Fungsi initialize_network memiliki
3 parameter yaitu, n_input = jumlah input n_hidden = jumlah neuron pada hidden layer
n_output = jumlah output. Pada langkah ini juga diberlakukan inisialisasi bobot jaringan
menjadi small random numbers. Pada kasus ini akan digunakan random numbers dengan
range 0 hingga 1.
Pada hidden layer dibuat sejumlah n_hidden neuron dan setiap neuron pada hidden
layer memiliki n_hidden+1 bobot, satu untuk setiap kolom input dalam dataset dan satu
tambahan untuk bias. Output yang terhubung dengan hidden layer memiliki sejumlah
n_output neuron, masing-masing dengan n_hidden + 1 bobot. Artinya setiap neuron pada
lapisan outpu terhubung (memiliki bobot untuk) setiap neuron pada hidden layer.
2. Forward Propagate.
Langkah yang dilakukan pada forward propagate yaitu menghitung output dari
jaringan syaraf dengan melakukan propagasi sinyal input melalui setiap layer sampai
output layer mengeluarka nilainya. Teknik ini digunakan untuk menghasilkan prediksi
selama pelatihan yang perlu dikoreksi, dan ini adalah metode yang kita perlukan setelah
jaringan dilatih untuk membuat prediksi pada data baru..
Pada forward propagate dilakukan 3 langkah yaitu :
1. Neuron Activation.
2. Neuron Transfer.
3. Forward Propagation.
2.1. Neuron Activation.
Pada langkah ini, dihitung aktivasi neuron yang telah diberi input. Aktivasi neuron
dihitung sebagai jumlah tertimbang dari input. Input dapat berupa baris dari dataset
training dan output mungkin saja berasal dari setiap neuron pada hidden layer.
Adapun rumus untuk melakukan aktivasi neuron yaitu:
𝑎𝑐𝑡𝑖𝑣𝑎𝑡𝑖𝑜𝑛 = 𝑠𝑢𝑚(𝑤𝑒𝑖𝑔ℎ𝑡_𝑖 ∗ 𝑖𝑛𝑝𝑢𝑡_𝑖) + 𝑏𝑖𝑎𝑠
Keterangan :
weight : bobot
input: input
i: indeks
bias : bobot yang tidak mempunyai input untuk dikalikan (dianggap
input selalu 1,0)
Dibawah ini dibuat fungsi activate() yang berfungsi menghitung neuron aktivasi pada
input.
2.2 Neuron Transfer
Setelah dilakukan aktivasi neuron, maka langkah selanjutnya yaitu melakukan
neuron transfer. Neuron transfer dilakukan pada neuron yang telah diaktivasi untuk
melihat output neuron yang sebenarnya.
Pada neuron transfer ini digunakan fungsi sigmoid yang dapat mengambil nilai
input apapun dan menghasilkan angka antara nol sampai satu pada kurva S. Fungsi
sigmoid dapat mempermudah dalam menghitung turunan yang diperlukan pada
metode backpropagation.
Rumus fungsi sigmoid untuk mentransfer fungsi aktivasi yaitu:
𝑜𝑢𝑡𝑝𝑢𝑡 = 1 / (1 + 𝑒^ (−𝑎𝑐𝑡𝑖𝑣𝑎𝑡𝑖𝑜𝑛))
Dibawah ini dibuat fungsi transfer() yang yang mengimplementasikan persamaan
sigmoid
3.2 Forward Propagation
Perhitungan output untuk setiap neuron dilakukan melalui setiap lapisan
jaringan. Semua output dari suatu layer menjadi input bagi neuron-neuron pada layer
berikutnya. Dibawah ini merupakan fungsi forward_propagate yang berfungsi untuk
melakukan forward propagation.
Selanjutnya menggabungkan seluruh sintaks dari langkah 2.1, 2.2, dan 2.3
3. Backpropagate Error
Langkah pada Backpropagate Error ini membicarakan mengenai bagaimana bobot
dilatih. Error dihitung berdasarkan selisih output yang diharapkan dan output forward
propagate dari jaringan. Selanjutnya error dilakukan backpropagation melalui jaringan
dari layer output ke hidden layer.
Langkah dalam Backpropagate error dibagi menjadi 2 yaitu :
1. Transfer Derivative
2. Error Backpropagation
3.1 Transfer Derivative
Langkah awal yaitu membuat fungsi transfer derivative, dengan rumus sebagai berikut :
𝑑𝑒𝑟𝑖𝑣𝑎𝑡𝑖𝑣𝑒 = 𝑜𝑢𝑡𝑝𝑢𝑡 ∗ (1.0 − 𝑜𝑢𝑡𝑝𝑢𝑡)
3.2 Error Backpropagation
Langkah selanjutnya yaitu menghitung error dari setiap output jaringan.
Rumus error:
𝑒𝑟𝑟𝑜𝑟 = (𝑜𝑢𝑡𝑝𝑢𝑡 − 𝑒𝑥𝑝𝑒𝑐𝑡𝑒𝑑) ∗ 𝑡𝑟𝑎𝑛𝑠𝑓𝑒𝑟_𝑑𝑒𝑟𝑖𝑣𝑎𝑡𝑖𝑣𝑒(𝑜𝑢𝑡𝑝𝑢𝑡)
Keterangan:
expexted = output jaringan yang diharapkan
output = nilai output jaringan
transfer derivative() = fungsi yang menghitung slope of the
output’s neuron value
Error yang telah dihitung selanjutnya akan digunakan pada neuron pada output
layernya. Sinyal error untuk neuron pada hidden layer dihitung sebagai weighted error dari
setiap neuron pada output layer. Sinyal Backpropagated error dihitung dan selanjutnya
digunakan untuk menentukan error pada hidden layer dengan rumus sebagai berikut :
𝑒𝑟𝑟𝑜𝑟 = (𝑤𝑒𝑖𝑔ℎ𝑡_𝑘 ∗ 𝑒𝑟𝑟𝑜𝑟_𝑗) ∗ 𝑡𝑟𝑎𝑛𝑠𝑓𝑒𝑟_𝑑𝑒𝑟𝑖𝑣𝑎𝑡𝑖𝑣𝑒(𝑜𝑢𝑡𝑝𝑢𝑡)
Keterangan
𝑒𝑟𝑟𝑜𝑟_𝑗= sinyal error dari neuron ke j pada output layer
𝑤𝑒𝑖𝑔ℎ𝑡_𝑘= bobot yang menghubungkan neuron ke-k neuron sekrang
𝑜𝑢𝑡𝑝𝑢𝑡= output sekarang
Selanjutnya mengimplementasikan langkah langkah di atas dengan fungsi
backward_propagate_error(). Sinyal error yang dihitung untuk setiap neuron disimpan
dengan nama delta.
Layer pada jaringan diiterasi dengan reverse order guna memastikan bahwa neuron di
output layer memiliki nilai delta yang dihitung terlebih dahulu, sehingga neuron pada hidden
layer dapat digunakan dalam iterasi berikutnya. Sinyal error untuk neuron pada hidden
layer merupakan akumulasi dari neuron pada output layer, di mana hidden neuron ke j juga
merupakan indeks bobot neuron pada output layer neuron ['weights'][j]
4. Train Network.
Jaringan yang telah dibangun selanjutnya akan dilatih dengan stochastic gradient
descent. Beberapa iterasi digunakan untuk mengekspos kumpulan data pelatihan ke jaringan
dan setiap baris dari data melakukan forward propagating inputnya, melakukan
backpropagating pada errornya dan memperbarui bobot jaringan.
Terdapat 2 tahap pada Train Network :
1. Update weight
2. Train network
4.1 Update weight
Setelah error pada setiap neuron dihitung melalui backpropagation di atas, maka
langkah selanjutnya adalah memperbarui bobot dengan rumus:
𝑤𝑒𝑖𝑔ℎ𝑡 = 𝑤𝑒𝑖𝑔ℎ𝑡 − 𝑙𝑒𝑎𝑟𝑛𝑖𝑛𝑔_𝑟𝑎𝑡𝑒 ∗ 𝑒𝑟𝑟𝑜𝑟 ∗ 𝑖𝑛𝑝𝑢𝑡
Keterangan:
- 𝑏𝑜𝑏𝑜𝑡 = bobot yang diberikan
- 𝑙𝑒𝑎𝑟𝑛𝑖𝑛𝑔 𝑟𝑎𝑡𝑒 = parameter yang harus ditentukan
- 𝑒𝑟𝑜𝑟 = eror yang dihitung dengan prosedur backpropagation untuk neuron
- 𝑖𝑛𝑝𝑢𝑡 = nilai input yang menyebabkan eror
Prosedur yang sama dapat digunakan untuk memperbarui bobot bias, kecuali tidak ada
istilah input atau input adalah nilai tetap 1. Learning rate akan mengontrol perubahan bobot
untuk memperbaiki errornya. Di bawah ini merupakan fungsi bernama update_weight()
yang berfungsi memperbarui bobot jaringan yang diberikan baris input data, learning rate
dan mengasumsikan bahwa forward dan backward propagation telah dilakukan
4.2 Train Network
Jaringan diperbarui dengan menggunakan stochastic gradient descent. Hal ini
melibatkan perulangan pertama untuk sejumlah epoch tetap dan setiap epoch memperbarui
jaringan untuk setiap baris dalam set data train. Pelatihan ini dinamakan online training
karena pembaruan dibuat untuk setiap pola pelatihan.
Dibawah ini dibuat fungsi pelatihan jaringan train_network yang merupakan
implementasi pelatihan dari jaringan neuron yang terlah terinisialisasi dengan diberikan
data training, learning rate, jumlah pengulangan(epoch), dan jumlah nilai output yang
diharapkan. Jumlah nilai output yang diharapkan digunakan untuk mentransformasikan
nilai class pada data training menjadi one hot encoding yang merupakan vektor biner dengan
satu kolom untuk setiap nilai kelas agar sesuai dengan output [Link] ini diperlukan
untuk menghitung kesalahan untuk lapisan keluaran.
5. Predict.
Selanjutnya yaitu melakukan prediksi dengan menggunakan data training. Nilai output
dapat digunakan secara langsung sebagai probabilitas suatu pola yang dimiliki oleh setiap
class [Link] bawah ini adalah fungsi bernama predict() yang mengimplementasikan
prosedur ini. Fungsi ini mengembalikan indeks dalam output jaringan yang memiliki
probabilitas terbesar. Diasumsikan bahwa nilai kelas telah dikonversi ke bilangan bulat
mulai dari 0.
Langkah Backpropagation Menggunakan Dataset Heart disease
1. Memanggil dataset .
2. Melakukan Eksplorasi data.
a. Mengubah kolom berbentuk “string” menjadi “float” dan mengubah kolom
berbentuk “string” menjadi integer
b. Mencari nilai minimum dan nilai maksimum dari setiap kolom.
c. Melakukan normalisasi pada data.
3. Split data ke dalam bentuk k-fold.
4. Melakukan Backpropagation.
5. Mengevaluasi dengan menggunakan cross validation split dan menghitung tingkat
akurasi.
Menerapkan Backpropagation Pada Dataset Heart disease
Ketika melakukan backpropagation, dipilih jumlah n_folds=5, maka artinya 270/5 =54, artinya
dari 270 pengamatan terdapat 54 pengamatan yang diuji untuk setiap fold. Learning rate yang
diuji adalah 0.3 dengan epoch sebanyak 200 dan hidden layer sebanyak 4. Pada dataset ini,
terdapat n_input=13 dan n_output=2
Dengan seed(2) didapatkan hasil akurasi untuk setiap fold secara berturut-turut 77.78, 77.78,
87.04, 79.63, 85.19 dengan rata-rata akurasi sebesar 81.48%. Maka dapat disimpulkan bahwa
klasifikasi dengan menggunakan algoritma backpropagation menghasilkan hasil yang baik
karena memiliki tingkat akurasi yang cukup tinggi.
Referensi
[Link]
[Link]