Machine Learning: Support Vector Machines

Machine Learning: Support Vector Machines

Bahasa R (Kernel = Gaussian)

# Mengimpor dataset
dataset = read.csv('Iklan_sosmed.csv')
dataset = dataset[3:5]

# Mengencode variabel dependen sebagai factor
dataset$Beli = factor(dataset$Beli, levels = c(0, 1))

# Membagi dataset ke dalam Training set and Test set
# install.packages('caTools')
library(caTools)
set.seed(123)
split = sample.split(dataset$Beli, SplitRatio = 0.75)
training_set = subset(dataset, split == TRUE)
test_set = subset(dataset, split == FALSE)

# Feature Scaling
training_set[, 1:2] = scale(training_set[, 1:2])
test_set[, 1:2] = scale(test_set[, 1:2])

# Membuat model SVM terhadap Training set
# install.packages('e1071')
library(e1071)
classifier = svm(formula = Beli ~ .,
                 data = training_set,
                 type = 'C-classification',
                 kernel = 'radial')

# Memprediksi hasil Test set
y_pred = predict(classifier, newdata = test_set[1:2])

# Making the Confusion Matrix
cm = table(test_set[, 3], y_pred)

# Visualisasi model SVM terhadap Training set
library(ElemStatLearn)
set = training_set
X1 = seq(min(set[, 1]) - 1, max(set[, 1]) + 1, by = 0.01)
X2 = seq(min(set[, 2]) - 1, max(set[, 2]) + 1, by = 0.01)
grid_set = expand.grid(X1, X2)
colnames(grid_set) = c('Usia', 'EstimasiGaji')
y_grid = predict(classifier, newdata = grid_set)
plot(set[, 1:2],
     main = 'SVM (Training set)',
     xlab = 'Usia', ylab = 'Estimasi Gaji',
     xlim = range(X1), ylim = range(X2))
contour(X1, X2, matrix(as.numeric(y_grid), length(X1), length(X2)), add = TRUE)
points(grid_set, pch = '19', col = ifelse(y_grid == 1, 'springgreen3', 'tomato'))
points(set, pch = 21, bg = ifelse(set[, 3] == 1, 'green4', 'red3'))

# Visualisasi model SVM terhadap Test set
library(ElemStatLearn)
set = test_set
X1 = seq(min(set[, 1]) - 1, max(set[, 1]) + 1, by = 0.01)
X2 = seq(min(set[, 2]) - 1, max(set[, 2]) + 1, by = 0.01)
grid_set = expand.grid(X1, X2)
colnames(grid_set) = c('Usia', 'EstimasiGaji')
y_grid = predict(classifier, newdata = grid_set)
plot(set[, 1:2], main = 'SVM (Test set)',
     xlab = 'Usia', ylab = 'Estimasi Gaji',
     xlim = range(X1), ylim = range(X2))
contour(X1, X2, matrix(as.numeric(y_grid), length(X1), length(X2)), add = TRUE)
points(grid_set, pch = '19', col = ifelse(y_grid == 1, 'springgreen3', 'tomato'))
points(set, pch = 21, bg = ifelse(set[, 3] == 1, 'green4', 'red3'))

Penjelasan:

  • Semua perintah sama seperti di pembahasan bahasa R sebelumnya, yang berbeda hanya pada line 26, di mana kernel diganti dengan ‘radial’ yang artinya kita menggunakan kernel gaussian.

Sekarang kita akan melihat berapa akurasinya melalui confusion matrix:

Hasil confusion untuk test set dengan kernel gaussian

Ternyata akurasinya cukup baik yaitu 90% dibandingkan dengan sebelumnya tanpa kernel yaitu 80%. Peningkatan yang sangat signifikan.

Sekarang mari kita lihat visualisasi model SVM dengan kernel gaussian terhadap training set:


Model SVM (kernel=gaussian) terhadap Training set.

Sekarang kita lihat visualisasi untuk Test set:


Model SVM (kernel=gaussian) terhadap Test set.

Akurasinya sangat baik, terlihat di gambar atas hanya ada 10 salah deteksi.

Dengan demikian, kita rekomendasikan kepada pemilik showroom mobil untuk mengiklankan produk SUV nya di internet pada zona hijau saja, sehingga peluang terjadinya pembelian semakin besar.

Demikian pembahasan SVM. Hal lain yang perlu diperhatikan adalah ada banyak kernel di dalam SVM. Pembaca bisa mencobanya satu demi satu hingga mendapatkan hasil yang diinginkan, karena tidak semua permasalahan hanya bisa diselesaikan dengan satu metode saja. Terkadang satu metode cocok untuk masalah A, namun tidak cocok untuk masalah B.

Semoga pembaca paham tentang SVM, kernel dan yang tidak kalah penting adalah mengerti aplikasi-aplikasi SVM.

Semoga bermanfaat.

Bagikan artikel ini:

Pages: 1 2 3 4 5 6 7

Subscribe
Notify of
guest
12 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Bobby
Bobby
3 years ago

Bisa dikasih contoh perhitungan manualnya sampai titi temu bahwa kelas tersebut masuk ke kelas -1 atau +1
terimakasih

agi
agi
3 years ago

permisi pak, apakah boleh minta data setnya sebagai bahan latihan agar lebih mudah dipahami pak

Hera Masri'an
Hera Masri'an
3 years ago

Permisi, Pak.
Saya mau bertanya.
Apakah Support Vector Machine bisa digunakan untuk clustering?

aninda
aninda
3 years ago

kak untuk mendowload data latih terdapat bagian mana ya?

adhy
adhy
2 years ago

Permisi pak mau tanya,,,
apa metode SVM bisa mengklasifikasi objek yg bergerak atau objek dalam video??

Amel
Amel
1 year ago

Kenapa binary class nya digunakan bilangan +1 dan -1? Tidak menggunakan 0 dan 1 saja. Terima kasih?