Klasifikasi Spesies Pada Bunga Iris Menggunakan Artificial Neural Network
Artificial Neural Network (ANN) atau umumnya hanya disebut neural network (NN)), adalah jaringan dari sekelompok unit pemroses kecil yang dimodelkan berdasarkan sistem saraf manusia. ANNmerupakan sistem adaptif yang dapat mengubah strukturnya untuk memecahkan masalah berdasarkan informasi eksternal maupun internal yang mengalir melalui jaringan tersebut. Oleh karena sifatnya yang adaptif, ANN juga sering disebut dengan jaringan adaptif. (Sumber : Wikipedia)
Secara umum, lapisan pada ANN dibagi menjadi tiga bagian:
- Lapis masukan (input layer) terdiri dari neuron yang menerima data masukan dari variabel X. Semua neuron pada lapis ini dapat terhubung ke neuron pada lapisan tersembunyi atau langsung ke lapisan luaran jika jaringan tidak menggunakan lapisan tersembunyi.
- Lapisan tersembunyi (hidden layer) terdiri dari neuron yang menerima data dari lapisan masukan.
- Lapisan luaran (output layer) terdiri dari neuron yang menerima data dari lapisan tersembunyi atau langsung dari lapisan masukan yang nilai luarannya melambangkan hasil kalkulasi dari X menjadi nilai Y. (Sumber : Wikipedia)
Sedangkan, bunga iris sangat terkenal di dunia machine learning untuk percobaan klasifikasinya. Bunga Iris memiliki 3 spesies/varietas yaitu Versicolor, Virginica dan Setosa. Lalu masing-masing spesies memiliki Sepal Length, Sepal Width, Petal Length dan Petal Width dalam centimeter yang berbeda-beda.
Nah pada percobaan ini, kita akan klasifikasikan spesies pada bunga iris menggunakan R.
- Aktifkan terlebih dahulu package nnet, seperti berikut.
library(nnet)
Apabila temen-temen tidak familier dengan package nnet, maka bisa ketikkan “help(nnet)” untuk melihat apakah package nnet itu di R.
2. Setelah itu, kita akan menggunakan iris dataset yang sudah tersedia di dalam R. Di dalam R, terdapat dua macam iris dataset yaitu “iris” dan “iris3”, untuk melihat perbedaannya maka ketikkan saja seperti berikut,
data("iris")
iris
data("iris3")
iris3
Maka tampilan nya sebagai berikut
Pada iris dataset, terdapat 5 variabel yang salah satunya ada variabel spesies, sedangkan pada iris3 dataset terdapat 4 variabel yang sudah terkumpul berdasarkan spesiesnya. Maka, karena akan dilakukan pengklasifikasian spesies pada bunga iris maka data yang akan digunakan adalah data iris3.
3. Selanjutnya, menggabungkan data iris3 untuk spesies setosa, versicolor dan virginica.
ir<-rbind(iris3[,,1],iris3[,,2],iris3[,,3])
ir
Pada syntax diatas merupakan penggabungan dari iris[,,1] berisi spesies setosa, iris[,,2] berisis spesies versicolor dan iris[,,3] berisi spesies virginica.
4. Setelah itu membuat target dimana target ini merupakan spesies yang nanti akan diklasifikasikan.
target<-class.ind(c(rep("setosa",50),rep("versicolor",50),rep("virginica",50)))
target
Pada target tersebut, setosa sebanyak 50 data (dari data pertama sampai data ke-50), versicolor sebanyak 50 data (dari data ke-51 sampai data ke-100) dan virginica sebanyak 50 data (dari data ke-101 sampai data ke-150).
5. Selanjutnya, membagi 150 data tersebut menjadi data train dan data test. maka untuk membagi data menjadi data train menggunakan syntax berikut.
samp<-c(sample(1:50,25),sample(51:100,25),sample(101:150,25))
Syntax (sample(1:50,25) artinya dari data pertama sampai data ke-50 akan diambil 25 data untuk data train, sample(51:100,25) artinya dari data ke-51 sampai data ke-100 akan diambil 25 data untuk data train dan sample(101:150,25) artinya dari data ke-101 sampai data ke-150 akan diambil 25 data untuk data train.
Kemudian panggil samp tersebut, maka tampilan nya sebagai berikut.
Dapat dilihat output samp seperti gambar diatas, dan perlu diingat bahwa pengambilan sampel ini dilakukan secara acak dan tanpa pengembalian sehingga kemungkinan besar terjadi perbedaan dalam pengambilan sampel nya akan tetapi jumlah nya tetap 75 data untuk dijadikan data train.
iris.train<-ir[samp,]
iris.train
iris.test<-ir[-samp,]
iris.test
Maka kita sudah mendapat data train sebanyak 75 data. Sedangkan, sisanya ([-samp]) sebanyak 75 data akan digunakan data test.
6. Selanjutnya, membuat mesin untuk proses klasifikasi spesies pada bunga iris tersebut.
ir1<-nnet(ir[samp,],targets[samp,],size = 2, rang = 0.1, decay = 5e-4,maxit = 600)
ir1
Pada ir1 tersebut, size merupakan jumlah hidden layer, rang merupakan initial random weight dari -0.1 sampai +0.1, decay merupakan parameter for weight decay dan maxit merupakan maksimal iterasinya.
Maka outputnya sebagai berikut.
Dari ir1 tersebut menjelaskan bahwa input nya sebanyak 4 input yaitu Sepal Lenght, Sepal Width, Petal Lenght, dan Petal Width. Lalu terdapat 2 hidden layer sesuai dengan isian pada size nya, dan juga akan dihasilkan 3 output untuk klasifikasi spesiesnya yang terdiri dari spesies setosa, versicolor dan virginica.
Untuk melihat plot nnet tersebut, bisa menggunakan syntax berikut.
plot.nnet(ir1)
Maka, tampilan plot dari nnet tersebut akan terlihat seperti berikut.
7. Selanjutnya melihat seberapa besar akurasinya.
test.cl<- function(true,pred) {
true<-max.col(true)
pred<-max.col(pred)
table(true,pred)
}
test.cl(targets[samp,],predict(ir1,ir[-samp,]))
Sehingga tampilannya sebagai berikut.
Dari output diatas, didapatkan tingkat akurasi sebesar 96%, tingkat akurasi ini dikatakan sangat baik sehingga bisa untuk pengklasifikasian pada spesies bunga iris.
8. Memasukkan data bunga baru untuk melihat bunga baru tersebut masuk kedalam spesies setosa atau versicolor atau virginica. Bunga baru memiliki Sepal Length=6.0, Sepal Width=2.7, Petal Length=4.9 dan Petal Width=2.8.
bungabaru<-c(6,2.7,4.9,2.8)
bungabaru
predict(ir1,bungabaru)
round(predict(ir1,bungabaru))
Maka outputnya adalah sebagai berikut.
Ternyata bunga baru tersebut merupakan bunga iris dengan spesies virginica.
Sekian dari saya, semoga bermanfaat ^^