About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • Data Science
  • /
  • Tutorial Python SVM Classification dan Menampilkan Prediction Report dengan Confusion Matrix

Tutorial Python SVM Classification dan Menampilkan Prediction Report dengan Confusion Matrix

SVM (Support Vector Machine) merupakan salah satu metode yang sering digunakan dalam Python clasification algorithm. SVM merupakan salah satu metode dalam supervised learning yang biasanya digunakan untuk klasifikasi dan regresi. SVM memiliki konsep yang lebih matang dan lebih jelas secara matematis dibandingkan dengan teknik-teknik klasifikasi lainnya di dalam pemodelan klasifikasi. SVM juga dapat mengatasi masalah klasifikasi dan regresi dengan linear maupun non linear.

Adapun untuk memvisualisasikan performance dari sebuah algoritma, dapat menggunakan tabel confusion matrix, yang sering disebut juga error matrix.

Artikel kali ini akan membahas implementasi SVM di Python dan melihat performancenya menggunakan confusion matrix. Untuk memudahkan pembahasan, nantinya akan diambil sebuah studi kasus.

Secara umum, SVM akan memetakan data ke titik-titik dalam ruang untuk memaksimalkan lebar celah antara dua kategori. Dengan begitu dapat terpetakan kategori data dengan batas antar kategori. Ilustrasinya adalah seperti dibawah ini:

Ilustrasi SVM

Kali ini kita akan belajar bagaimana mengimplementasikan SVM dalam classification model dengan Python. Kita akan membuat classification model untuk memprediksi apakah seseorang memiliki peluang yang tinggi mengalami serangan jantung atau tidak. Kita akan menggunakan Heart Attack Possibility dataset dari University of California, Irvine. Dataset tersebut tersedia di Kaggle dan bisa di download di link Kaggle berikut

Dataset memiliki attribute sebagai berikut

  • Age
  • Sex
  • Chest pain type (4 values)
  • Resting blood pressure
  • Serum cholestoral in mg/dl
  • Fasting blood sugar > 120 mg/dl
  • Resting electrocardiographic results (values 0, 1, 2)
  • Maximum heart rate achieved
  • Exercise induced angina
  • Oldpeak = ST depression induced by exercise relative to rest
  • The slope of the peak exercise ST segment
  • Number of major vessels (0-3) colored by flouroscopy
  • Thal (0 = normal, 1 = fixed defect, 2 = reversable defect)
  • Target (0 = less chance of heart attack, 1 = more chance of heart attack)

Dari dataset diatas, kita akan menggunakan kolom ‘target’ sebagai dependent variable dan kolom yang lainnya sebagai independent variable. Untuk membuat classification model seperti yang kita rencanakan, library yang perlu kita import adalah sebagai berikut:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sn
from sklearn import svm
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.model_selection import train_test_split

Penjelasan penggunaan masing-masing library diatas dalam classification model yang kita buat adalah sebagai berikut:

/synta

• pandas = handling dataset
• matplotlib, seaborn = membuat styling confusion matrix
• svm = membuat SVM classifier
• classification_report = membuat classifier report yang berisi accuracy, f-1 score, dsb.
• confusion_matrix = membuat confusion matrix
• train_test_split = membagi dataset menjadi training dan testing data

Import File CSV ke Dataset

Setelah selesai mengimpor library yang kita butuhkan, selanjutnya kita import dataset.

df = pd.read_csv('heart.csv')

Path file csv tersebut diasumsikan ada di folder yang sama dengan Python code yang dibuat. Dalam code di atas digunakan Pandas library untuk membaca data file CSV yang bernama ‘heart.csv’. Karena dataset sudah clean maka tidak perlu dilakukan data cleaning.

Deklarasi Independent dan Dependent Variable

Cara mendeklarasikan variabel adalah dengan menuliskan kolom-kolom mana saja yang akan dimasukkan dalam dependent maupun independent variable seperti dibawah ini:

X = df[['age','sex','cp','trestbps','chol','fbs','restecg','thalach','exang','oldpeak','slope','ca','thal']]
y = df['target']

Seperti yang sudah direncanakan sebelumnya, kita menggunakan kolom ‘target‘ seagai dependent variable dan kolom selain ‘target‘ sebagai independent variable. Dependent variable dilambangkan dengan ‘y’, independent variable dilambangkan dengan ‘X’.

Membagi Dataset Menjadi Training dan Testing Data

Python code untuk membagi dataset adalah sebagai berikut:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)

Arti dari Python code diatas adalah kita membagi dataset menjadi training dan testing data, dengan ‘test_size = 0,2’ yang artinya 80% dataset untuk training dan 20% dataset untuk testing.

Membuat Classifier dan Menampilkan Classification Accuracy

SVM classifier akan dibuat terlebih dahulu dengan menggunakan library svm. Kemudian classification report dapat ditampilkan dengan library classification_report. Caranya adalah sebagai berikut:

#menggunakan SVM library untuk membuat SVM classifier
classifier = svm.SVC(kernel = 'linear')

#memasukkan training data kedalam classifier
classifier.fit(X_train, y_train)

#memasukkan testing data ke variabel y_predict
y_predict = classifier.predict(X_test)

#menampilkan classification report
print(classification_report(y_test, y_predict))

Setelah di run, akan muncul classification report seperti dibawah ini:

Classification Report

Dari report diatas dapat diartikan bahwa classification model yang dibuat mendapat akurasi 86% pada saat memprediksi kategori ‘0’ (less chance of heart attack), dan mendapat akurasi 100% pada saat memprediksi kategori ‘1’ (more chance of heart attack). Dan secara keseluruhan, classification model memiliki akurasi 94%.

Menampilkan Classification Report dengan Confusion Matrix

Kita bisa menampilkan detail dari hasil prediksi yang diberikan oleh classification model yang kita buat dengan confusion matrix. Caranya adalah sebagai berikut:

#mengimplementasikan testing data dan hasil prediksi dalam confusion matrix
cm = confusion_matrix(y_test, y_predict)

#membuat plotting confusion matrix
%matplotlib inline
plt.figure (figsize=(10,7))
sn.heatmap(cm, annot=True)
plt.xlabel('Predicted')
plt.ylabel('Truth')

Setelah di run, akan muncul confusion matrix sebagai berikut:

Confusion Matrix

Karena kita menggunakan kolom ‘target’ sebagai dependent variable, maka kategorinya ada 2 yaitu 0 dan 1. Sumbu X (Truth) dari tabel diatas merupakan data sebenarnya dalam dataset yang terdiri dari 0 dan 1. Sumbu Y (Predicted) dari tabel diatas merupakan prediksi yang diberikan oleh model yang terdiri dari 0 dan 1.

Di koordinat (0,0) dan (1,0) terdapat nilai 12 dan 2 yang artinya ketika data sebenarnya adalah ‘0’, classification model berhasil memprediksinya sebagai ‘0’ sebanyak 12 kali dan memprediksinya sebagai ‘1’ sebanyak 2 kali. Kemudian di koordinat (1,0) dan (1,1) terdapat nilai 0 dan 17 yang artinya ketika data sebenarnya adalah ‘1’, classification model berhasil memprediksinya sebagai ‘1’ sebanyak 17 kali dan tidak pernah memprediksinya sebagai ‘0’.

Python code lengkap nya adalah sebagai berikut:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sn
from sklearn import svm
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.model_selection import train_test_split

#impor CSV ke dataset
df = pd.read_csv('heart.csv')

#deklarasi training dan testing data
X = df[['age','sex','cp','trestbps','chol','fbs','restecg','thalach','exang','oldpeak','slope','ca','thal']]
y = df['target']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)

#menggunakan SVM library untuk membuat SVM classifier
classifier = svm.SVC(kernel = 'linear')

#memasukkan training data kedalam classifier
classifier.fit(X_train, y_train)

#memasukkan testing data ke variabel y_predict
y_predict = classifier.predict(X_test)

#menampilkan classification report
print(classification_report(y_test, y_predict))

#mengimplementasikan testing data dan hasil prediksi dalam confusion matrix
cm = confusion_matrix(y_test, y_predict)

#membuat plotting confusion matrix
%matplotlib inline
plt.figure (figsize=(10,7))
sn.heatmap(cm, annot=True)
plt.xlabel('Predicted')
plt.ylabel('Truth')

Demikian tutorial Python SVM classification dan menampilkan prediction report dengan confusion matrix. Semoga bermanfaat.


Article by Request

Anda belum memahami konsep pemrograman PHP Native, Python, Java, atau SQL? atau Anda belum punya ide penyelesaian dari studi kasus yang dihadapi sampai saat ini.

Silakan manfaatkan layanan Article by Request di blog ini.


Bagikan artikel ini jika bermanfaat !

Alumni dari Pendidikan Teknik Informatika dan Komputer, Universitas Sebelas Maret. Master Graduate of Computer Science and Information Engineering di National Central University, Taiwan. Sekarang bekerja sebagai Data Analyst di Teaching Excellence Center Divison, National Yunlin University of Science and Technology, Yunlin, Taiwan.

Leave a Reply