Machine Learning: Support Vector Machines

Machine Learning: Support Vector Machines

STUDI KASUS

Kali ini kita kembali membahas tentang permasalahan seorang pemilik showroom mobil. Ia bingung di mana ia harus mengiklankan produknya. Ia ingin agar iklannya sesuai target, sehingga mereka yang melihat iklannya memiliki kemungkinan (probability) yang tinggi untuk membeli mobil SUVnya.

Sebelum kita memulai memecahkan masalah ini dengan bahasa Python dan R, silakan download dulu datasetnya di sini.


Pembahasan saya bagi menjadi 4:

  1. Bahasa Python (tanpa kernel, linear)
  2. Bahasa R (tanpa kernel, linear)
  3. Bahasa Python (kernel = gaussian) –> lebih akurat
  4. Bahasa R (kernel = gaussian) –> lebih akurat

Bahasa Python (tanpa kernel, linear)

# Mengimpor library
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Mengimpor dataset
dataset = pd.read_csv('Iklan_sosmed.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values

# Menjadi dataset ke dalam Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# Membuat model SVM terhadap Training set
from sklearn.svm import SVC
classifier = SVC(kernel = 'linear', random_state = 0)
classifier.fit(X_train, y_train)

# Memprediksi hasil test set
y_pred = classifier.predict(X_test)

# Membuat confusion matrix
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

# Visualisasi hasil model SVM dari Training set
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('SVM (Training set)')
plt.xlabel('Usia')
plt.ylabel('Estimasi Gaji')
plt.legend()
plt.show()

# Visualisasi model SVM terhadap Test set
from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('SVM (Test set)')
plt.xlabel('Usia')
plt.ylabel('Estimasi Gaji')
plt.legend()
plt.show()

Penjelasan:

  • Line 1-19 sama persis seperti penjelasan di logistic regression dan K-nearest neighbors. Bisa di klik untuk me-review kembali.
  • Line 22 mengimpor SVM dari sklearn.
  • Line 23 mendefinisikan objek classifier sebagai model SVM dengan parameter kernel=linear dan random number generator = 0. Penentuan random number generator ini bebas ya. Tips: Arahkan kursor pada SVC kemudian ketik di keyboard CTRL+i untuk bisa melihat parameter apa saja yang diperlukan untuk membuat model SVM. Perhatikan bahwa kernel yang kita pilih adalah linear, artinya SVM akan membuat hyperplane yang bersifat linear untuk 2 dimensi. Kernel=linear bisa juga diartikan tanpa kernel, karena itu adalah algoritma SVM biasa, tanpa penambahan kernel. Di halaman selanjutnya kita akan menggunakan kernel yang berbeda.
  • Tampilannya parameternya adalah sebagai berikut.
Parameter SVC di Phyton.
Perlu diperhatikan SVC adalah nama perintahnya, tapi nama modelnya adalah SVM (support vector machines), semoga tidak bingung.
  • Line 24 membuat model SVM nya terhadap Training set.
  • Line 27 mendefinisikan objek y_pred sebagai hasil prediksi dari model yang dibuat di line 24 ke Test set.
  • Line 30-31 membuat Confusion matrix (untuk bisa menilai akurasi modelnya nanti).

Jika kita klik variabel explorer pada Spyder, maka tampilan cm adalah sebagai berikut:

Hasil confusion matriks model SVM terhadap Test set. Akurasinya cukup baik, 90%.
  • Line 34-49 adalah perintah untuk memvisualisasikan hasil model SVM terhadap Training set. Tampilannya akan tampak sebagai berikut:
Model SVM (tanpa kernel) terhadap Training set.
  • Line 52-67 adalah visualisasi model SVM kita terhadap Test set. Tampilannya sebagai berikut:

Model SVM (tanpa kernel) terhadap Test set.

Pada gambar di atas, bisa dilihat bahwa ada 10 dari 100 titik yang salah dideteksi oleh SVM (akurasi 90%). Artinya bahwa model SVM yang menggunakan kernel linear sudah cukup baik untuk membantu pemilik showroom mobil menentukan wilayah yang tepat untuk iklan mobil SUV nya di internet.

Untuk melanjutkan membaca halaman selanjutnya, silakan klik tombol di bawah ini.

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?