Modul Praktikum Machine Learning - SVM
Modul Praktikum Machine Learning - SVM
I. Pendahuluan
Support Vector Machine (SVM) diperkenalkan oleh Vapnik dan kawan-kawan pada tahun
1992 yang dikembangkan berdasarkan statistical learning theory. SVM merupakan
supervised learning dan binary classification. SVM merupakan contoh metoda learning
yang memanfaatkan kernel function. Implementasi SVM antara lain: text and hypertext
classification, image classification, recognizing handwritten characters, biological sciences,
protein classification.
.
SVM banyak diimplementasikan untuk menyelesaikan berbagai persoalan linear dan non
linear yang terkait dengan classification. Beberapa karakteristik SVM:
a. Bersifat non-probabilistic
b. Membagi data menjadi dua katagori
c. Masing-masing kelompok data dibatasi oleh hyperplane
II. Teori
SVM berusaha menemukan hyperplane (pemisah) terbaik untuk memisahkan ke dalam dua
kelas dan memaksimalkan margin antara dua kelas tersebut. Jarak terdekat dari hyperplane
dengan input vectors disebut margin. Data (input vectors) yang bersentuhan dengan
boundary disebut support vectors.
Pada beberapa kasus, data tidak bisa diklasifikasi menggunakan metode linier SVM,
sehingga dikembangkan fungsi kernel untuk mengklasifikasikan data dalam bentuk non-
linier.
Algoritma linier SVM dalam bentuk pseudo code sebagai berikut:
IV. Permasalahan
Diberikan sejumlah data hasil riset, gunakan algoritma SVM untuk melakukan klasifikasi
dari dataset yang disediakan.
V. Menganalisa Permasalahan
A. Dataset
SVM memerlukan dataset yang diperoleh dari file atau langsung dari R (bawaan R, misal:
IRIS, Boston, dsb).
B. Parameter
C. Solusi
Solusi dari algoritma SVM adalah class dari data. Algoritma SVM siap pakai sudah
disediakan oleh aplikasi R.
atau
rstudio
2. Untuk menyelesaikan persoalan SVM diperlukan library bernama e1071. Aktifkan Internet
kemudian ketikkan perintah berikut ini:
install.packages("e1071")
library(e1071)
4. Siapkan data yang dibutuhkan untuk keperluan praktikum. Data ini adalah data bunga, bernama
IRIS yang sudah disediakan oleh R. Untuk melihat dataset IRIS sebanyak 5 baris, ketikkan:
head(iris,5)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
4. Agar data IRIS dapat dicari oleh R berdasarkan namanya, ketikkan perintah berikut ini:
attach(iris)
Species
[1] setosa setosa setosa setosa setosa setosa
[7] setosa setosa setosa setosa setosa setosa
[13]setosa setosa setosa setosa setosa setosa
Sepal.Length
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1
[19] 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0
6. Pisahkan data menjadi x dan y. Objek x berisi semua features (kolom) yang dimiliki oleh IRIS
kecuali kolom Species. Sedangkan objek y hanya berisi kolom Species.
x < subset(iris, select=Species)
y < Species
Notes: perintah terakhir hanya akan berhasil jika sebelumnya sudah mengetikkan perintah
attach(iris). Kebalikan dari perintah attach adalah dettach.
7. Amati hasilnya.
head(x,5)
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
4 4.6 3.1 1.5 0.2
5 5.0 3.6 1.4 0.2
head(y,5)
[1] setosa setosa setosa setosa setosa
Levels: setosa versicolor virginica
svm_model < svm(Species ~ ., data=iris)
9. Lihat hasilnya:
summary(svm_model)
Call:
svm(formula = Species ~ ., data = iris)
Parameters:
SVMType: Cclassification
SVMKernel: radial
cost: 1
gamma: 0.25
Number of Support Vectors: 51
( 8 22 21 )
Number of Classes: 3
Levels:
setosa versicolor virginica
plot(svm_model, iris, Petal.Width ~ Petal.Length,
slice = list(Sepal.Width = 3, Sepal.Length = 4))
svm_model1 < svm(x,y)
summary(svm_model1)
Call:
svm.default(x = x, y = y)
Parameters:
SVMType: Cclassification
SVMKernel: radial
cost: 1
gamma: 0.25
Number of Support Vectors: 51
( 8 22 21 )
Number of Classes: 3
Levels:
pred < predict(svm_model1,x)
system.time(pred < predict(svm_model1,x))
table(pred,y)
svm_tune < tune(svm, train.x=x, train.y=y,
kernel="radial", ranges=list(cost=10^(1:2),
gamma=c(.5,1,2)))
print(svm_tune)
svm_model_after_tune < svm(Species ~ ., data=iris, kernel="radial",
cost=1, gamma=0.5)
summary(svm_model_after_tune)
pred < predict(svm_model_after_tune,x)
system.time(predict(svm_model_after_tune,x))
table(pred,y)
plot(svm_model_after_tune, iris, Petal.Width ~ Petal.Length,
slice = list(Sepal.Width = 3, Sepal.Length = 4))
1. Diskusikan dengan teman Anda baris-baris Perintah yang terkait dengan tuning
SVM!
2. Menurut Anda, apakah hasil tuning SVM jauh lebih baik dibandingkan sebelumnya?