Artificial Neural Network (ANN) Menggunakan Rstudio
Assalamu’alaikum, Sahabat Data !
Artificial Neural Network (ANN) atau Jaringan Syaraf Tiruan (JST) merupakan suatu sistem pemrosesan informasi dengan suatu karakteristik menyerupai sistem saraf pada manusia. Pada ANN, strukturnya terdiri dari input layer, hidden layer dan output layer. ANN memiliki kemamuan untuk mentoleransi kesalahan sehingga dapat menghasilkan prediksi yang baik. Namun masalahnya adalah ANN memiliki kelemahan yaitu sulit untuk mengetahui berapa banyak neuron dan lapisan yang diperlukan, dan mengalami perlambatan saat learning (Hasdi Putra, 2020).
Arsitektur dari ANN
1. Jaringan Syaraf Dengan Lapisan Tunggal (Single Layer Net)
2. Jaringan Syaraf Dengan Banyak Lapisan (Multi Layer Net)
3. Jaringan Syaraf Dengan Lapisan Kompetitif (Competitive Layer)
Data yang digunakan dalam klasifikasi ini adalah data sekunder dari pasien Penyakit Kanker Payudara UCI Wisconsin University. Data tersebut merupakan data rata-rata dari karakteristik yang diambil sampelnya dari tubuh pasien yang sedang di diagnosis. Data tersebut bisa kalian download di sini.
Menginstall dan mengaktifkan packages yang akan digunakan.
install.packages("dplyr")
library(dplyr)
install.packages("neuralnet")
library(neuralnet)
install.packages("caret")
library(caret)
Input data, pilih variabel yang akan digunakan yaitu variabel dari kolom 1 sampai kolom 11 saja.
data <- read.csv(file.choose(), header=TRUE)
data <- data[1:11]
Pada ANN, tidak mengenal data kategorik. Sehingga ketika terdapat data kategorik harus dikonversi menjadi data numerik. Oleh karena itu pada variabel diagnosis (dependen), “B” dirubah menjadi 0 dan “M” dirubah menjadi 1.
data[,1]=sapply(data[,1],switch,"B"=0,"M"=1)
str(data)
Membuat function MinMax Scaller untuk menyamakan derajat dari setiap variabel karena skala data dari setiap variabel tersebut tidak sama.
for (i in names(data[,-1])) {
data[i] <- (data[i] - min(data[i]))/(max(data[i]) - min(data[i]))
}
Mengambil data untuk data training sebanyak 75% dan sisanya (25%) sebagai data testing.
set.seed(222)
ind <- sample(2, nrow(data), replace = TRUE, prob = c(0.75, 0.25))
training <- data[ind==1,]
testing <- data[ind==2,]
Single Layer
Membuat model dari data training dengan single layer sebesar 5.
n <- neuralnet(diagnosis~.,
data = training,
hidden = 5,
err.fct = "ce",
linear.output = FALSE)
plot(n)
Terbentuk 1 layer dengan 10 input dimana masing-masing node input mewakili sebuah variabel. Kemudian pada hidden layer memiliki 5 neuron seperti yang sudah didefinisikan sebelumnya dan neuron yang berada di atas merupakan bias yang memiliki bobot terhadap masing-masing neuron. Lalu garis-garis yang menghubungkan masing-masing neuron merupakan synapse yang mewakili bobot masing-masing. Kemudian error merupakan nilai loss yang didapatkan ketika melakukan training pada network ini yaitu sebesar 0,025359. Lalu ada nilai steps yang merupakan jumlah iterasi yang dilakukan oleh mesin, di dapatkan mesin telah melakukan 88434 kali iterasi sehingga menghasilkan bobot yang tertera pada gambar.
Memprediksi data testing lalu membandingkan data aktual dan hasil prediksi.
output <- compute(n, testing[,-1])
results <- data.frame(DataAsli=testing$diagnosis, Prediksi=output$net.result)
roundedresults <- sapply(results, round, digits=0)
Menampilkan nilai akurasi dari model yang sudah diperoleh. Confusion matrix merupakan alat yang berguna untuk menganalisis seberapa baik classifier dapat mengenali tuple dari kelas yang berbeda dimana kelas yang diprediksi akan ditampilkan di bagian atas matriks dan kelas yang diobservasi ditampilkan di bagian kiri.
actual <- round(testing$diagnosis, digits = 0)
prediction <- round(output$net.result, digits = 0)
mtab <- table(actual,prediction)
confusionMatrix(mtab)
Hasil aktual benar diprediksi 0 ke 0 sebanyak 75 dengan salah prediksi sebanyak 4, kemudian untuk 1 ke 1 aktualnya 46 salah prediksi sebanyak 2.
Accuracy digunakan untuk melihat ukuran dari seberapa baik model mengkorelasikan hasil dengan atribut dalam data yang digunakan. Tingkat akurasi dari hasil prediksi dengan data training sebesar 0.9528 atau 95.28%.
Sensitivity digunakan untuk mengukur proporsi jumlah observasi positif yang tepat prediksi. Nilai sensitifitas dari hasil output di atas sebesar 0.9740 atau 97.40%.
Adapun nilai specificity-nya sebesar 92% dan juga nilai balanced accuracy dari hasil output di atas sebesar 94.70%. Balanced accuracy digunakan untuk mengukur akurasi proporsi jumlah observasi kelas positif yang tepat prediksi.
Multi Layer
Membuat model dari data training dengan multi layer sebesar (5,3).
set.seed(333)
n <- neuralnet(diagnosis~.,
data = training,
hidden = c(5,3),
err.fct = "ce",
linear.output = FALSE)
plot(n)
Terbentuk 2 layer dengan 10 input. Kemudian pada hidden layer memiliki (5,3) neuron seperti yang sudah didefinisikan sebelumnya. Jumlah iterasi yang dilakukan oleh mesin sebanyak 8045 kali dan error sebesar 0,015574.
Memprediksi data testing lalu membandingkan data aktual dan hasil prediksi.
output <- compute(n, testing[,-1])
results <- data.frame(DataAsli=testing$diagnosis, Prediksi=output$net.result)
roundedresults <- sapply(results, round, digits=0)
Menampilkan nilai akurasi dari model yang sudah diperoleh.
actual <- round(testing$diagnosis, digits = 0)
prediction <- round(output$net.result, digits = 0)
mtab <- table(actual,prediction)
confusionMatrix(mtab)
Hasil aktual benar diprediksi 0 ke 0 sebanyak 73 dengan salah prediksi sebanyak 6, kemudian untuk 1 ke 1 aktualnya 44 salah prediksi sebanyak 4.
Tingkat akurasi dari hasil prediksi dengan data training sebesar 0.9213 atau 92.13%. Nilai sensitifitas dari hasil output di atas sebesar 0.9481 atau 94.81%. Adapun nilai specificity-nya sebesar 88% dan juga nilai balanced accuracy dari hasil output di atas sebesar 91.40%.
Kesimpulan :
- Hasil prediksi dengan data testing untuk model dengan single layer = 5 memiliki tingkat keakurasian hasil prediksi sebesar 95,28%.
- Hasil prediksi dengan data testing untuk model dengan multi layer = (5,3) memiliki tingkat keakurasian hasil prediksi sebesar 92.13%.
- Model dengan single layer = 5 merupakan model terbaik karena memiliki tingkat akurasi yang lebih tinggi dibandingkan model multi layer = (5,3) yaitu sebesar 95,28%.
Semoga bermanfaat, terima kasih :)