Klasifikasi Menggunakan ANN Pada R Studio

Afdhah Nur Riadhoh
6 min readJul 26, 2021

--

Assalamu’alaikum Warahmatullahi Wabarakatuh!

Haloo, afdhah kembali lagi ni. Pembahasan kita kali ini mengenai ANN. Apa itu ANN?

Artificial Neural Network Artificial (ANN) atau Jaringan Syaraf Tiruan ialah pendekatan pengolahan informasi yang terinspirasi cara kerja sistem saraf biologis, khususnya sel otak manusia saat memproses informasi. ANN terdiri dari sejumlah besar elemen pemrosesan informasi (neuron) yang saling ter-hubung dan bekerja bersama menyelesaikan masalah tertentu, pada umum-nya ialah masalah klasifikasi ataupun prediksi. (dosen.perbanas.id)

Penggunaan ANN memiliki keuntungan:

  1. Pembelajaran adaptif: Kemampuan untuk belajar dalam melakukan tugas-
    tugas berdasarkan data yang diberikan
  2. Self-Organization: Dapat membangun represen-tasi dari informasi yang diterimanya selama proses pembelajaran secara mandiri.
  3. Operasi Real-Time: Penghitungan dapat dilakukan secara paralel, sehingga proses komputasi menjadi lebih cepat.

Studi Kasus

1.) Sebelum melakukan klasifikasi ANN dengan ‘nnet’, maka perlu mengak-tifkan package tersebut terlebih dahulu menggunakan perintah ‘library. Namun, apabila belum memiliki package ini, bisa diinstal terlebih dahulu dengan install.packages (‘nama package’).

#install package
install.packages("nnet")
#Mengaktifkan package
library(nnet)

2.) Data yang akan digunakan pada klasifikasi dengan ANN ini adalah dataset yang berasal dari R, yakni data mengenai 3 spesies anggrek, masing-masing jumlah tiap spesiesnya sebanyak 50 data. Sehingga ada 150 data. Nama dataset ini adalah ‘iris’.

Okee, langsung sajaa kita panggil datanya…

#panggil data
data(iris)
#melihat data teratas
head(iris)

Terlihat data pertama dari data iris ialah species setosa dengan Sepal.Length sepanjang 5.1 cm, Sepal.Width sepanjang 3.5 cm, Petal.Length sepanjang 1.4 cm, dan Petal.Width sepanjang 0.2, dan seterusnya.

3.) Melihat Dimensi Data, Jenis Data, dan Struktur Data

#dimensi data
dim(iris)
#jenis data
class(iris)
#struktur data
str(iris)

Pada gambar diatas memperlihatkan bahwa ada 5 variabel dari 150 data yang berupa data frame. Dimana, variabel Sepal.Length, Sepal.Width, Petal.Length, dan Petal.Width akan kita gunakan sebagai variabel independen, serta varia-bel Species (setosa, versicolor, dan virginica) sebagai target atau variabel dependen.

3.) Dalam ANN, terdapat pembagian data berupa data training dan data testing. Terlebih dahulu melakukan pembentukan data training yang akan digunakan fungsi sample untuk mengambil data secara acak. Sehingga, hasilnya bisa berbeda-beda antara device lainnya.

#pengambilan sampel untuk data training
sampel<-c(sample(1:50,25), sample(51:100,25), sample(101:150,25))
sampel

Pembagian data dilakukan setengah dari data berdasarkan variabel species karena merupakan variabel dependen. Dari 150 data, setengah untuk data training sebanyak 75 data dan 75 data untuk data testing. Data dari objek “sampel” akan dijadikan sebagai data training, yang masing-masing species-nya terdiri dari 25 data.

4.) Data Training dan Data Testing

#Data Training dan Data Testing
iris.train<-iris[sampel,]
head(iris.train)
iris.test<-iris[-sampel,]
head(iris.test)

Kemudian akan dibagi menjadi “iris.train” yang diambil dari objek ‘sampel’, dan “iris.test” yang berarti diambil selain dari objek ‘sampel’.

5.) Sesudah melakukan pembagian data training dan testing, kita akan mem-buat mesin ANN dengan menggunakan package ‘nnet’, dimana mesin ini da-pat memprediksi data dan melihat keakuratan dari mesin yang terbentuk.

iris1<-nnet(Species~.,data=iris.train,size=2,decay=5e-4,maxit=250)

Tanda ‘~.’ tmenandakan semua variabel x atau independen agar tidak menu-liskan satu-persatu, perintah ‘size’ menunjukkan node yang digunakan pada hidden layer, lalu ‘decay’ untuk melihat penurunan gradien descent saat scan (seberapa cepat), dan ‘maxit’ menunjukkan banyaknya maksimal iterasi.

Terlihat pada gambar dibawah ini jika pada iterasi ke-200, mesin ANN ‘iris1’ telah converged dengan final value sebesar 3.421122.

6.) Melakukan prediksi menggunakan model atau mesin ‘iris1’ dengan ‘iris.test’, lalu gunakan type “class” untuk klasifikasi.

#data testing
y<-iris.test$Species
y
#prediksi
p<-predict(iris1,iris.test,type="class")
p

Gambar sebelah kiri adalah data testing dan yang sebelah kanan merupakan hasil prediksi. Dapat kita lihat bahwa terdapat 4 kesalahan prediksi. Yang ha-rusnya species versicolor, tapi malah terprediksi sebanyak 2 species virginica. Lalu, yang harusnya species virginica, namun prediksi menghasilkan species versicolor. Agar lebih mudah melihat hasil prediksinya, akan disajikan dalam bentuk tabel.

#tabel hasil prediksi
tabelhasil<-table(y,p)
tabelhasil

Ternyata benar, terdapat salah prediksi sebanyak 4, yang terjadi pada species versicolor dan virginica. Sedangkan, species setosa tidak terdapat kesalahan dalam prediksi.

Melihat nilai akurasi dan error hasil prediksi pada ‘iris1’.

#nilai akurasi
sum(diag(tabelresult))/75
#error atau kesalahan
error<-mean(y!=p)
error

Nilai akurasi didapatkan dari menghitung jumlah diagonal berdasarkan ‘tabelresult’, dibagi sama banyaknya data di ‘iris.test’ (75 data). Untuk menghitung error-nya, diperoleh dari rata-rata ‘y’ yang berbeda dengan ‘p’ (nilai species tidak sama dengan hasil prediksinya).

Nilai akurasi yang dihasilkan sebesar 0.9466667 atau 94.66667% dan nilai error-nya sebesar 0.05333333 atau 5.333333%.

7.) Kemudian, kita akan memvisualisasikan mesin ‘iris1’ untuk melihat struktur jaringan mesin tersebut.

library(devtools)
library(reshape)
source_url('https://gist.githubusercontent.com/fawda123/7471137/raw/466c1474d0a505ff044412703516c34f1a4684a5/nnet_plpt_update.r')
plot.nnet(iris1)

Pada plot, ukuran bunga iris (I1 — I4) merupakan suatu input, species (O1, O2, O3) ialah output, dan layer hidden ada H1 dan H2. Di dalam setiap layer, terdapat node bias, yaitu B1 dan B2, sehingga tiap bias punya arah panah ke masing-masing node (B1 ke dalam layer hidden dan B2 ke layer output). Garis-garis yang ada pada plot mewakili 1 bobot. Apabila ingin melihat nilai dari masing-masing bobot (weight) tersebut, gunakan perintah ‘summary(iris1’).

Ternyata, mesin ‘iris1’ merupakan jaringan dengan 4 input (Sepal Length, Sepal Width, Petal Length, Petal Width), 2 node di hidden layer, dan 3 node pada output (setosa, versicolor, virginica). Mesin ini mempunyai ada 19 weights). Yang berarti, plot mesin ‘iris1’ ada 19 garis. Jadi, dari b ke h1 memiliki bobot 27.86, dan begitu seterusnya.

Melakukan Prediksi Data Bunga Baru

Karena sudah dimiliki mesin ‘iris1’, maka akan digunakan untuk memprediksi species pada data bunga yang baru.

Sepal.Length<-4.1
Sepal.Width<-3.1
Petal.Length<-1.9
Petal.Width<-0.9
tambahbunga<-data.frame(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)
tambahbunga

Agar membuat data yang baru seperti data iris, maka data baru ini perlu diubah menjadi bentuk data frame, seperti yang terlihat pada output ‘tambahbunga’. Lalu, akan dilakukan prediksi.

prediksibaru<-predict(iris1,tambahbunga)
prediksibaru

Ternyata, didapatkan bahwa probabilitas terbesar yang mendekati
1 sebesar 0.9950199, dimana species ini berasal dari species setosa. Maka, data bunga baru diklasifikasikan sebagai species setosa.

Supaya mendapatkan nilai error paling kecil, dapat mengetahuinya melalui jumlah hidden yang digunakan, menggunakan script berikut ini.

#mencari node hidden layer dengan error terkecil
errorklasifikasi<-function(jumlahhidden)
{
iris1<-nnet(Species~.,data=iris.train,size=jumlahhidden,
decay=5e-4,trace=F)
y<-iris.test$Species
p<-predict(iris1,iris.test,type="class")
err<-mean(y!=p)
c(jumlahhidden,err)
}
hasilakhir<-t(sapply(2:10,FUN=errorklasifikasi))
plot(hasilakhir,type="b",xlab="Jumlah Hidden Unit", ylab="Error",
main="Plot Jumlah Hidden Unit vs Error")

Berdasarkan plot, maka jumlah hidden yang dapat dipakai adalah 9, karena
menghasilkan error terkecil. Hal ini terlihat dari letak lingkaran kecil yang ada pada paling bawah.

Mungkin sekian yang dapat kita bahas. Semoga Bermanfaat!

Wassalamu’alaikum Warahmatullahi Wabarakatuh…

--

--

Afdhah Nur Riadhoh
Afdhah Nur Riadhoh

No responses yet