Artificial Neural Network (ANN) dengan R

Halima Tusyakdiah
6 min readJul 13, 2020

Asslamualaikum Wr.Wb

Kali ini kita akan mencoba melakukan klasifikasi dengan metode ANN, dimana sebelumnya pada artikel saya [disini ] sudah menjelaskan klasifikasi dengan menggunakan Naive Bayes Classification, data yang digunakan sama yaitu Heart Diseases UCI. Sebelumnnya mari kita mengenal lebih dekat ANN dengan melihat penjelasan berikut.

Artificial Neural Network (ANN)

Artificial Neural Network (ANN) atau Jaringan Saraf Tiruan (JST) merupakan suatu pendekatan metode AI lainnya. JST merupakan suatu model kecerdasan yang diilhami dari struktur otak manusia dan kemudian diimplementasikan menggunakan program computer yang mampu menyelesaikan sejumlah proses perhitungan selama proses pembelajaran berlangsung. JST salah satu representasi buatan otak manusia, hal ini dikarenakan pemrosesan informasi terletak pada suatu neuron yang memiliki sinyal. Jaringan neuron terdiri atas kumpulan grup neuron yang tersusun dalam lapisan antara lain:

  1. Lapisan input (Input Layer): berfungsi sebagai penghubung jaringan ke dunia luar (sumber data).
  2. Lapisan tersembunyi (hidden Layer): Suatu jaringan dapat memiliki lebih dari satu hidden layer atau bahkan bisa juga tidak memilikinya sama sekali.
  3. Lapisan Output (Output Layer): Prinsip kerja neuron — neuron pada lapisan ini sama dengan prinsip kerja neuron — neuron pada lapisan tersembunyi (hidden layer) dan di sini juga digunakan fungsi Sigmoid, tapi keluaran dari neuron pada lapisan ini sudah dianggap sebagai hasil dari proses

untuk penjelasan lebih lengkap bisa dipahami pada artikel [disini] .

Data:

Data yang digunakan adalah Heart Diseases UCI yaitu data pasien yang memiliki penyakit jantung atau tidak. Data dapat didownload link berikut:

https://www.kaggle.com/ronitf/heart-disease-uci

Keterangan variabel;
age: umur (tahun)
sex: jenis kelamin (1 = laki-laki; 0 = perempuan)
cp: tipe nyeri dada
trestbps: tekanan darah istirahat (dalam mm Hg saat masuk ke rumah sakit)
kol: serum kolestoral dalam mg / dl
fbs : gula darah puasa> 120 mg / dl → (1 = benar; 0 = salah)
restecg: hasil elektrokardiografi istirahat
thalach: detak jantung maksimum
exang: angina yang diinduksi olahraga (1 = ya; 0 = tidak)
oldpeak: ST depression induced by exercise relative to rest
slope: the slope of the peak exercise ST segment
ca: jumlah pembuluh darah utama (0–3) diwarnai dengan fluoroskopi
thal: 3 = normal; 6 = fixed defect; 7 = reversible defect
target: memiliki penyakit atau tidak (1 = ya, 0 = tidak)

Goals:

Membuat model untuk memprediksi apakah pasien masuk di kategori terkena penyakit jantung atau tidak?

Yuk langsung saja…

Langkah 1: Memasukkan Data

setelah data di download, masukkan data menggunakan read.csv atu bisa menggunakan cara lain. file = "D:\\KULIAH\\semester 5\\BIML\\uas\\heart.csv" merupakan alamat file direktori penyimpanan data.

heart<- read.csv(file = "D:\\KULIAH\\semester 5\\BIML\\uas\\heart.csv", sep="")
View(heart)

kemudian gunaan perintah berikut untuk melihat detile data.

dim(heart) #melihat dimensi data
class(heart) #melihat class data
head(heart,6) #melihat 6 data teratas
str(heart) #melihat struktur data

pada data awal, variabel target masih terbaca integer, maka kita ganti struktur varabel menjadi factor sebagai berikut.

heart<-transform(heart,target = as.factor(target))
str(heart)

Langkah 2: Statistika Deskriptif

Sebelum melakukan klasifikasi menggunakan naive bayes, mari kita lihat terlebih dahulu sekilas statistik deskriptif dari data penyakit jantung.

Kita akan melihat dari data berapa pasien yang mengidap penyakit jantung.

heart.target.value_counts()

Diketauhi pasien yang terkena penyakit jantung sebanyak 165 dari 303 pasien. ringkasan statistik data.

summary(heart)

OKE, langsung saja kita melakukan klasifikasi menggunakan ANN

Langkah 3: Memanggil packages nnet

jika packages belum terinstal, maka dapat menginstall terlebih dahulu menggunakan perintah install.packages(“nnet”)

library(nnet)

Langkah 4: membagi data train dan test

pada kasus ini data training dibagi dengan perbandingan 75:25 yaitu:

→ data training=25%

→ data testing=75%

disini saya menggunakan set.seed sebanyak 12. Nilai set.seed menunjukan berapa kali data dilakukan pengacakan. banyaknya pengacakan bebas tergantung peneliti. Tapi, untuk pelajaran kali ini disarankan untuk menggunakan 12 agar hasil random yang didapatkan sama.

n <- round(nrow(heart)*0.75);n
set.seed(12)
samp=sample(1:nrow(heart),n)
head(samp)

setelah itu pisahkan masing-masing data training dan testing. Dimana data training untuk membangun model, sedangkan data testing untuk menguji model atau mem-validasi.

heart.train = heart[samp,]
heart.test = heart[-samp,]
dim(heart.train)
dim(heart.test)

Langkah 5: Klasifikasi ANN

langkah selanjutnya yaitu membangun model klasifikasi dengan ANN.

#nnet
heart1<-nnet(target~., data = heart.train, size=2, decay=5e-4, maxit=200)
heart1

dari mesin heart1 diketahui 13-2-1 network → 13 variabel input-2 hidden layer - 1 variabel output dan 31 bobot.

Visualisasi jaringan syaraf tiruan(ANN) menggunakan website didalam GIS yang bisa digunakan membuat plot.

library(devtools)
library(reshape)
source_url('https://gist.githubusercontent.com/fawda123/7471137/raw/466c1474d0a505ff044412703516c34f1a4684a5/nnet_plot_ipdate.r')
plot.nnet(heart1)
visualisasi ANN

dari visualisasi ANN diatas dapat diketahui kita memiliki 14 input yaitu variabel independen age, sex, cp, trestbps, chol, fbs, restecg, thalach, exang, oldpeak, slope, ca,thal. Kemudian ada output yaitu variabel target sebagai variabel independen. jumlah layer hidden sebanyak 2 yaitu H1, H2. Didalam setiap layer ada node bias yaitu B1 dan B2.

Garis-garis penghubung merupakan bobot, terdapat 31 bobot. Pada ANN bobot selalu diupdate setiap proses, sehingga errornya kecil. berikut adalah nilai masing-masing bobot.

kemudian melakukan klasifikasi menggunakan data testing.

y<-heart.test$target
p<-predict(heart1, heart.test, type="class")

melihat hasil prediksi menggunakan data testing.

data.frame(y,p)

Confussion Matrix. Confusion matrix merupakan matrik yang berisi ketepatan prediksi.

tabelhasil<-table(y,p)
tabelhasil
Hasil confusion matrix

Langkah 6: Melihat Akurasi Model

nilai 76 pada sintaks dibawah adalah jumlah data testing.

#akurasi
sum(diag(table(y,p)))/76
jumlaherror<-mean(y!=p)
jumlaherror

dari hasil akurasi diketahui mesin(heart1) dalam mengklasifikasi data testing mengasilkan akurasi sebesar 78% dan miss klasifikasi sebesar 21%, yang artinya mesin sudah baik dalam memprediksikan pasien penyakit jantung.

Langkah 7: Prdiksi Data Baru

Kemudian kita coba menggunakan mesin heart1 untuk mengklasifikasikan data baru. Digunakan nilai berikut.

### mencoba klasifikasi dengan mesin heart1 #####
data.baru<-data.frame(age=50, sex=0, cp=2, trestbps=145, chol=220,
fbs=0, restecg=1, thalach=140,exang=0,
oldpeak=1.4, slope=1, ca=0, thal=2)
data.baru

dilakukan klasifikasi menggunakan mesin heart1

prediksi<-predict(heart1, data.baru)
prediksi

didapatkan nilai probabilitas yaitu sebesar 0,9756 yang artinya lebih mendekati 1. Maka dapat disimpulkan pasien dengan ciri-ciri data baru diatas diprediksi mengidap penyakit jantung.

Langkah 8: Melihat Kesalahan Klasifikasi

Dibuat fungsi untuk melihat perbedaan dari masing-masing jumlah node pada hidden layer. Kesalahan prediksi adalah nilai dari target yang seharusnya tidak sama dengan hasil prediksinya.

#membuat fungsi untuk mesin heart1
errorklasifikasi<-function(jumlahhidden)
{
heart1<-nnet(target~.,data = heart.train,size=jumlahhidden,
decay=5e-4,trace=F)
y<-heart.test$target
p<-predict(heart1,heart.test,type = "class")
err<-mean(y!=p)
c(jumlahhidden,err)
}
errorklasifikasi(2)
errorklasifikasi(3)
errorklasifikasi(4)
errorklasifikasi(5)
hasilakhir<-t(sapply(2:10,FUN=errorklasifikasi))
hasilakhir

dicobakan node hiden layer sebanyak 2,3,4,5,6,7,8,9,10 menghasilkan nilai error klasifikasi sebagai berikut.

kemudian hasil akhir di tampilkan dengan plot.

plot(hasilakhir,type = "b", xlab = "jumlah hidden unit", ylab = "error", main = "plot jumlah hidden vs error")

ketika jumlah node pada hidden layernya sebanyak 2 terjadi error klasifikasi sebsedar 0,3421 dst.. Jadi dari plot diatas, dapat dilihat jumlah node pada hidden layer sebaiknya 6.

cukup sekian terimakasih :))

--

--

Halima Tusyakdiah

Statistics student at Islamic University of Indonesian