Classification of Iris with Support Vector Machine (SVM) in R
Assalamualaikum Wr. Wb.
Pada kesempatan ini saya akan membuat tulisan sederhana tentang salah satu metode supervised learning, yaitu Support Vector Machine (SVM). Kita akan bersenang-senang dengan salah satu dataset terkenal yang disebut Iris dataset. Untuk teknik klasifikasi, kita akan menggunakan pengklasifikasi Support Vector Machine. Jika kalian belum mengetahuinya, mari simak artikel di bawah ini!!!!
Apakah itu Support Vector Machine?
Salah satu metode statistik yang dapat diterapkan untuk melakukan klasifikasi adalah Support Vector Machine (SVM). Support Vector Machine (SVM) adalah suatu teknik untuk melakukan prediksi, baik dalam kasus klasifikasi maupun regresi. SVM memiliki kelebihan diantaranya adalah dalam menentukan jarak menggunakan support vector sehingga proses komputasi menjadi cepat. SVM memiliki prinsip dasar linier classifier yaitu kasus klasifikasi regresi yang secara linier dapat dipisahkan, namun SVM telah dikembangkan agar dapat bekerja pada masalah klasifikasi regresi secara non-linier dengan memasukkan konsep kernel pada ruang kerja berdimensi tinggi. SVM digunakan untuk mencari hyperplane terbaik dengan memaksimalkan jarak antar kelas. Hyperplane adalah sebuah fungsi yang dapat digunakan untuk pemisah antar kelas.
Banyak teknik data mining atau machine learning yang dikembangkan dengan asumsi kelinieran, sehingga algoritma yang dihasilkan terbatas untuk kasus-kasus yang linier. SVM dapat bekerja pada data non-linier dengan menggunakan pendekatan kernel pada fitur data awal himpunan data. Fungsi kernel yang digunakan untuk memetakan dimensi awal (dimensi yang lebih rendah) himpunan data ke dimensi baru (dimensi yang relatif lebih tinggi). Secara umum, fungsi kernel yang sering digunakan antara lain:
- Kernel Gaussian Radial Basic Function (RBF)
2. Kernel Polynomial
3. Kernel Linear
4. Kernel Sigmoid
5. Kernel KMOD
6. Kernel Exponential Radial Basic Function (RBF)
Pengukuran Kinerja Klasifikasi
Pengukuran kinerja klasifikasi pada data asli dan data hasil dari model klasifikasi dilakukan dengan menggunakan tabulasi silang (matriks konfusi) yang berisi informasi tentang kelas data asli yang direpresentasikan pada baris matriks dan kelas data hasil prediksi suatu algoritma direpresentasikan pada kolom klasifikasi. Berikut merupakan contoh matriks konfusi:
Ketepatan klasifikasi dapat dilihat dari akurasi klasifikasi. Akurasi klasifikasi menunjukkan performansi model klasifikasi secara keseluruhan, dimana semakin tinggi akurasi klasifikasi hal ini berarti semakin baik performansi model klasifikasi.
Semua klasifikasi berusaha untuk membentuk model dengan nilai akurasi tinggi dan laju error rendah.
Iris Dataset
Iris dataset digunakan dalam makalah klasik Fisher tahun 1936 yang berjudul “The Use of Multiple Measurements in Taxonomic Problems”. Dataset iris diperoleh dengan membangkitkan data dalam R. Iris dataset mencakup tiga spesies yaitu Versicolor, Virginica, dan Setosa dengan masing-masing 150 sampel. Kemudian, ketiga spesies tersebut memiliki Sepal Length, Sepal Width, Petal Length, dan Petal Width dalam satuan centimeter yang berbeda-beda.
Sebelum melakukan analisis, siapkan R terlebih dahulu dan install packages yang akan digunakan dan mengaktifkan packages di bawah ini.
install.packages("e1071")
install.packages("caret")
install.packages("devtools")
library(e1071)
library(caret)
library(devtools)
Selanjutnya, kita akan menggunakan iris dataset yang sudah tersedia di dalam R menggunakan sintaks data() dan disimpan dalam objek bernama “iris”.
iris=datasets::iris
View(iris)
Kemudian, tampilkan data menggunakan fungsi “View()” seperti sintaks diatas. Berikut data yang akan digunakan dengan banyak data sebanyak 150:
Untuk mengetahui tipe data dari variabel-variabel yang akan digunakan dalam analisis gunakan fungsi “class()” dengan menggunakan sintaks sebagai berikut:
#Melihat tipe data
class(iris)
c(class(iris$Sepal.Length), class(iris$Sepal.Width), class(iris$Petal.Length),class(iris$Petal.Width),
class(iris$Species))
Maka, akan muncul hasilnya sebagai berikut:
Berdasarkan hasil pada gambar 3, dapat dilihat bahwa secara keseluruhan data yang digunakan yaitu iris tergolong ke dalam data frame. Sedangkan tipe data untuk masing-masing variabel antara lain :
1. Sepal Length : Numerik
2. Sepal Width : Numerik
3. Petal Length : Numerik
4. Petal Width : Numerik
5. Species : Numerik
Data frame merupakan kerangka data yang berisi variabel yang memiliki karakteristik seperti matriks. Jadi data frame ini berbentuk seperti tabel, sedangkan tipe data numerik adalah jenis data yang terdiri dari angka, yang dapat dihitung secara matematis dengan berbagai operator standar seperti penambahan, pengurangan, perkalian, dan pembagian.
Berikutnya, praktikan ingin melihat ringkasan data dengan menggunakan sintaks sebagai berikut:
#Melihat ringkasan data
summary(iris)
Maka, akan muncul hasilnya sebagai berikut:
Berdasarkan hasil pada gambar 4, dapat diketahui bahwa ringkasan dari dataset iris yang terdiri dari nilai minimum, maksimum, mean, median, kuartil pertama (Q1), dan kuartil ketiga (Q3) dari masing-masing variabel. Setelah itu, dilakukan membagi dataset “iris” sebanyak 150 data untuk digunakan data training sebesar 75% dan data testing sebesar 25% dengan pengambilan sampel secara acak, sehingga dilakukan perintah set.seed() dengan menggunakan sintaks sebagai berikut:
#75% data sebagai data training
n = round(nrow(iris)*0.75)
n
Maka, akan muncul hasilnya sebagai berikut:
Berdasarkan hasil pada gambar 5, dapat diketahui bahwa dari 150 iris dataset, 112 nya merupakan data training. Kemudian, praktikan melakukan penarikan data sampel sebanyak n=112 menggunakan perintah sample(). Sebanyak 112 data sampel tersebut disimpan dalam objek bernama “data.train” menggunakan perintah data[sample,] sedangkan sisanya disimpan dalam objek bernama “data.test” dengan menggunakan sintaks sebagai berikut:
set.seed(12345)
sample_iris = sample(seq_len(nrow(iris)), size = n)
data.train = iris[sample_iris,]
data.test = iris[-sample_iris,]
head(data.train,5); head(data.test,5)
Maka tampilan nya sebagai berikut:
Kemudian, praktikan melihat cuplikan dari lima data training dan data testing sebagai berikut:
Setelah data terbagi, praktikan melakukan proses klasifikasi dengan membuat model menggunakan metode SVM dengan variabel dependennya “species” data data yang digunakan berupa data training. Hasil klasifikasi SVM disimpan dengan objek bernama “svm.iris”.
#Model support vector machine & training prediction
svm.iris <- svm(factor(Species) ~., data = data.train)
svm.iris
Maka, hasilnya dapat dilihat pada gambar berikut:
Berdasarkan hasil pada gambar 8, dapat diketahui bahwa jenis dari metode SVM adala C-classification dengan kernel yang digunakan dalam SVM adalah radial. Nilai parameter dari kernel (cost) adalah sebesar 1 dan banyak support vector pada klasifikasi SVM sebesar 41. Langkah selanjutnya dalam melakukan analisis SVM adalah melakukan pengujian model SVM yang diperoleh menggunakan data training. Praktikan melakukan prediksi terhadap data training dengan menggunakan sintaks sebagai berikut:
#Pengujian Model SVM Data Training
prediksi1 <- predict(svm.iris, data.train)
prediksi1
head(prediksi1,10); tail(prediksi1,10)
Maka, hasilnya dapat dilihat pada gambar berikut:
Berdasarkan hasil pada gambar 9, praktikan hanya menampilkan 10 data training teratas dan 10 data training terbawah pada data prediksi. Virginica, Versicolor, dan Setosa merupakan jenis spesies dari bunga iris, sedangkan angka yang letaknya tepat di atas jenis spesies merupakan urutan dari data yang digunakan. Sebagai contoh, data ke-142 diprediksi sebagai spesies Virginica, data ke-58 diprediksi sebagai Versicolor, dan sebagainya. Kemudian, praktikan melihat tingkat akurasi dari data training yang telah diprediksi dengan menggunakan sintaks sebagai berikut:
#Training Accuracy
confusionMatrix(prediksi1, factor(data.train$Species))
Maka, hasilnya dapat dilihat pada gambar berikut:
Berdasarkan hasil pada gambar 10, dapat diketahui bahwa tingkat akurasi dari hasil prediksi untuk data training sebesar 0.9821 atau 98.21% dengan jumlah spesies Setosa yang diprediksi Setosa adalah 38 bunga, Versicolor yang diprediksi Versicolor sebanyak 36 bunga, Virginica yang diprediksi sebagai Versicolor sebanyak 2 bunga, dan Virginica yang diprediksi benar Virginica sebanyak 36 bunga. Nilai sensitivity pada hasil yang diperoleh digunakan untuk mengukur proporsi jumlah observasi positif yang tepat diprediksi. Nilai specificity pada hasil yang diperoleh digunakan untuk mengukur proporsi jumlah observasi negatif yang tepat prediksi. Nilai balance accuracy digunakan untuk mengukur akurasi proporsi jumlah observasi kelas positif yang tepat diprediksi. Nilai-nilai tersebut pada masing-masing spesies dapat dilihat pada gambar berikut:
Kemudian, praktikan melakukan pengujian model SVM untuk data testing dengan menggunakan sintaks seperti berikut:
#Pengujian Model SVM Data Testing
prediksi2 <- predict(svm.iris, data.test)
prediksi2
head(prediksi2,10); tail(prediksi2,10)
Maka, hasilnya dapat dilihat sebagai berikut:
Berdasarkan hasil pada gambar 12, dapat diketahui bahwa urutan data ke-8, ke-19, ke-21, ke-22, ke-24, ke-27, ke-33, ke-39, ke-41, dan ke-43 diprediksi sebagi Setosa. Untuk data ke-117, ke-121, ke-123, ke-126, ke-127, ke-129, ke-130, ke-134, ke-140, dan ke-144 diprediksi sebagai Virginica. Kemudian, praktikan melihat tingkat akurasi dari data yang telah diprediksi dengan menggunakan sintaks sebagai berikut:
#Testing Accuracy
confusionMatrix(prediksi2, factor(data.test$Species))
Maka, hasilnya dapat dilihat sebagai berikut:
Berdasarkan hasil pada gambar 13, dapat diketahui bahwa tingkat akurasi dari hasil prediksi untuk data testing sebesar 0.9474 atau 94.74% dengan jumlah spesies Setosa yang diprediksi Setosa adalah 12 bunga, Versicolor yang diprediksi Versicolor sebanyak 12 bunga, Versicolor yang diprediksi sebagai Virginica sebanyak 2 bunga, dan Virginica yang diprediksi benar Virginica sebanyak 12 bunga. Nilai sensitivity, specificity, dan balance accuracy pada masing-masing spesies dapat dilihat pada gambar berikut:
Kesimpulan
Berdasarkan analisis yang telah dilakukan oleh peneliti maka dapat disimpulkan bahwa :
- Dengan proporsi 75% data training dan 25% data testing, jenis dari metode SVM adalah C-classification dengan kernel yang digunakan dalam SVM adalah radial. Nilai parameter dari kernel adalah sebesar 1 dan banyak support vector pada klasifikasi SVM sebesar 41.
- Berdasarkan pengujian model SVM data training, hasil prediksi menunjukan bahwa tingkat akurasi dari hasil prediksi untuk data training sebesar 0.9821 atau 98.21% dengan jumlah spesies Setosa yang diprediksi setosa adalah 38 bunga, Versicolor yang diprediksi Versicolor sebanyak 36 bunga, Virginica yang diprediksi sebagai Versicolor sebanyak 2 bunga, dan Virginica yang diprediksi benar Virginica sebanyak 36 bunga.
- Berdasarkan pengujian model SVM data testing, hasil prediksi menunjukan bahwa tingkat akurasi dari hasil prediksi untuk data testing sebesar 0.9474 atau 94.74% dengan jumlah spesies Setosa yang diprediksi Setosa adalah 12 bunga, Versicolor yang diprediksi Versicolor sebanyak 12 bunga, Versicolor yang diprediksi sebagai Virginica sebanyak 2 bunga, dan Virginica yang diprediksi benar Virginica sebanyak 12 bunga.
Terimakasih teman-teman. Sekian dulu terkait tentang klasifikasi Support Vector Machine dari iris dataset….
Maaf jika ada salah kata dan banyak kesalahan semoga bermanfaat bagi kita semua. Jangan lupa jaga kesehatan dan tetap mengikuti protokol kesehatan yaaa! Stay safe and stay healty guys!
Wassalamu’alaikum Wr. Wb.
Reference :
[1] Prasetyo, E. (2012). Data Mining Konsep dan Aplikasi Menggunakan MATLAB. Andi : Yogyakarta.
[2] Santosa, B. (2007). Data Mining Teknik Pemanfaatan Data untuk Keperluan Bisnis. Graha Ilmu : Yogyakarta.
[3] Vapnik, V dan Cortes, C. (1995). Support Vector Networks. Machine Learning, 20, 273–297.
[4] https://haydar-ai.medium.com/learning-data-science-day-21-decision-tree-on-iris-dataset-267f3219a7fa