Bahasa R (tanpa kernel, linear)
# 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 = 'linear')
# 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:
- Line 1-18 sama persis seperti penjelasan di logistic regression dan K-nearest neighbors. Bisa di klik untuk me-review kembali.
- Line 21 menginstall package e1071. Hilangkan tanda pagar jika di Rstudio Anda belum terinstall package ini.
- Line 22 mengimpor library e1071.
- Line 23 membuat objek classifier sebagai model SVM kita. Untuk kali ini kernel yang kita gunakan adalah linear. Tips: Arahkan kursor pada svm kemudian ketik F1 di keyboard untuk bisa melihat parameter apa saja yang diperlukan.
- Line 29 memprediksi hasil test set-nya.
- Line 32 membuat confusion matrix. Hasilnya tampak sebagai berikut:

- Line 35-48 adalah perintah untuk visualisasi model SVM kita terhadap training set. Tampilannya adalah sebagai berikut:

Model SVM (tanpa kernel) terhadap Training set.
- Line 51-63 adalah hasil visualisasi model SVM terhadap Test set. Hasilnya tampak sebagai berikut:

Model SVM (tanpa kernel) terhadap Test set.
Melalui gambar di atas masih terlihat ada beberapa titik yang salah prediksi. Melalui confusion matrix kita tahu bahwa model kita memiliki akurasi 80%.
Pertanyaannya, mengapa hasil antara Pyton dan R berbeda? Ada beberapa alasan:
- Random number generatornya berbeda, sehingga pembagian test set dan training set antara Phyton dan R juga berbeda.
- SVM adalah proses heuristik (probabilistik) dan bukan deterministik (kepastian). Salah satu penyebabnya adalah poin pertama di atas,
Dengan demikian, setelah melihat hasil SVM dengan kernel linear di R, bisa kita simpulkan memiliki akurasi yang tidak lebih baik jika dibandingkan Logistik regression ataupun K-nearest neighbor.
Di halaman selanjutnya kita akan memahami konsep kernel dan coba menggunakannya dalam algoritma SVM sehingga hasilnya lebih akurat. Semua kode (script) nya sama, kita hanya merubah di bagian kernel saja (baik di Python maupun R).
Untuk membaca halaman selanjutnya, silakan klik tombol di bawah ini.

Bisa dikasih contoh perhitungan manualnya sampai titi temu bahwa kelas tersebut masuk ke kelas -1 atau +1
terimakasih
Silakan baca referensinya (cari di bagian download) dan berlatih sendiri ya, sekalian belajar menerjemahkan rumus matematika.
Semoga menjawab
permisi pak, apakah boleh minta data setnya sebagai bahan latihan agar lebih mudah dipahami pak
Datasetnya ada di bagian download, dan dicantumkan link nya di artikel. Silakan dicek lagi.
Permisi, Pak.
Saya mau bertanya.
Apakah Support Vector Machine bisa digunakan untuk clustering?
Secara umum SVM dipakai untuk classification (klasifikasi) dan bukan clustering.
Tapi ada paper yang mencoba menggunakan SVM untuk clustering.
Saya belum pernah baca, tapi silakan dicoba metode di paper tersebut.
Semoga menjawab.
kak untuk mendowload data latih terdapat bagian mana ya?
Bisa dibaca di halaman 4, link ya ada di sana.
Permisi pak mau tanya,,,
apa metode SVM bisa mengklasifikasi objek yg bergerak atau objek dalam video??
Belum pernah coba, mungkin bisa dibaca penelitiannya di jurnal internasional.
Kenapa binary class nya digunakan bilangan +1 dan -1? Tidak menggunakan 0 dan 1 saja. Terima kasih?
Di SVM, penggunaan -1,1 lebih umum daripada 0,1
misalnya di library sklearn, svm bisa menambahkan parameter C, dan juga parameter C ini (yang adalah selain kernel) jika digunakan dapat digunakan untuk mencari metode terbaik dengan grid search sebagai caranya yaitu kombinasi antara C dan juga kernel., di pembahasan ini, kenapa seperti tidak menambahkan pembahasan tentang parameter C maupun perhitungan manual seperti SVM dengan tulis tangan?
Di artikel ini yang dibahas adalah dasarnya SVM jadi belum sampai ke hyperparameter tuning seperti menggunakan grid search.