Machine Learning: Support Vector Machines

Machine Learning: Support Vector Machines

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:
Confusion matrix model SVM (kernel=linear) terhadap Test set.
  • 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:

  1. Random number generatornya berbeda, sehingga pembagian test set dan training set antara Phyton dan R juga berbeda.
  2. 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.

Pages: 1 2 3 4 5 6 7

Subscribe
Notify of
guest

14 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Bobby
Bobby
5 years ago

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

agi
agi
5 years ago

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

Hera Masri'an
Hera Masri'an
5 years ago

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

aninda
aninda
5 years ago

kak untuk mendowload data latih terdapat bagian mana ya?

adhy
adhy
5 years ago

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

Amel
Amel
4 years ago

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

MaruIchi
MaruIchi
10 months ago

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?