Wednesday, April 26, 2023

SVM Studi Kasus Diabetes & Confusion Matrix

Dataset : https://www.kaggle.com/uciml/pima-indians-diabetes-database

Studi kasus : Klasifikasi Diabetes

Dataset yang digunakan adalah Pima Indians Diabetes Database. Dataset ini berisi informasi klinis tentang 768 pasien wanita Pima Indian yang berusia di atas 21 tahun. Dataset ini memiliki 9 kolom, yaitu:

  1. Pregnancies: Jumlah kali hamil
  2. Glucose: Konsentrasi glukosa plasma dalam 2 jam saat tes toleransi glukosa oral
  3. BloodPressure: Tekanan darah diastolik (mm Hg)
  4. SkinThickness: Ketebalan lipatan kulit trisep (mm)
  5. Insulin: Insulin serum dalam 2 jam (mu U/ml)
  6. BMI: Indeks massa tubuh (berat dalam kg / (tinggi dalam meter)^2)
  7. DiabetesPedigreeFunction: Nilai fungsi silsilah diabetes
  8. Age: Umur (tahun)
  9. Outcome: Variabel target, 0 untuk tidak menderita diabetes dan 1 untuk menderita diabetes.

Tujuan dari dataset ini adalah untuk memprediksi apakah seorang pasien wanita Pima Indian akan mengalami diabetes atau tidak berdasarkan informasi klinis yang diberikan.


#SVM diabetes #https://www.kaggle.com/uciml/pima-indians-diabetes-database/download import pandas as pd import numpy as np import requests from io import BytesIO import zipfile from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # Download dataset #file_url = "https://www.kaggle.com/uciml/pima-indians-diabetes-database/download" #r = requests.get(file_url) #z = zipfile.ZipFile(BytesIO(r.content)) #z.extractall() # Load dataset dataset = pd.read_csv('diabetes.csv') # Split into features and label X = dataset.drop('Outcome', axis=1) y = dataset['Outcome'] # Split into train and test set X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Create SVM model svm_model = SVC(kernel='linear') # Train SVM model svm_model.fit(X_train, y_train) # Make prediction y_pred = svm_model.predict(X_test) # Calculate accuracy accuracy = accuracy_score(y_test, y_pred) print('Accuracy:', accuracy) # Print confusion matrix and classification report print('Confusion matrix:\n', confusion_matrix(y_test, y_pred)) print('Classification report:\n', classification_report(y_test, y_pred)) # Display actual and predicted values df_compare = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})
print(df_compare.head(10))

Hasil Program :

Accuracy: 0.7532467532467533
Confusion matrix:
[[80 19]
[19 36]]
Classification report:
precision recall f1-score support

0 0.81 0.81 0.81 99 1 0.65 0.65 0.65 55 accuracy 0.75 154 macro avg 0.73 0.73 0.73 154 weighted avg 0.75 0.75 0.75 154 Actual Predicted 668 0 0 324 0 0 624 0 0 690 0 0 473 0 0 204 0 0 97 0 0 336 0 1 568 0 1
148 0 1


CONFUSION MATRIX

Dalam program di atas, confusion matrix dapat dihitung menggunakan fungsi confusion_matrix() yang tersedia dalam scikit-learn. Hasil confusion matrix kemudian ditampilkan dengan menggunakan fungsi print(). Confusion matrix merupakan suatu tabel yang menunjukkan jumlah prediksi yang benar dan yang salah pada setiap kelas target. Confusion matrix memiliki 4 elemen, yaitu True Positive (TP), False Positive (FP), False Negative (FN), dan True Negative (TN). Berikut penjelasan dari setiap elemen tersebut:

  • True Positive (TP) : jumlah data yang benar diprediksi sebagai positif
  • False Positive (FP) : jumlah data yang salah diprediksi sebagai positif
  • False Negative (FN) : jumlah data yang salah diprediksi sebagai negatif
  • True Negative (TN) : jumlah data yang benar diprediksi sebagai negatif
Dalam program di atas, confusion matrix menunjukkan hasil sebagai matriks 2x2, dengan baris pertama menunjukkan kelas "0" (yang negatif) dan baris kedua menunjukkan kelas "1" (yang positif). Oleh karena itu, kita dapat membaca hasil confusion matrix sebagai berikut:

  1. Pada baris pertama, kolom pertama menunjukkan jumlah data yang benar diprediksi sebagai negatif (True Negative, TN) dan kolom kedua menunjukkan jumlah data yang salah diprediksi sebagai positif (False Positive, FP).
  2. Pada baris kedua, kolom pertama menunjukkan jumlah data yang salah diprediksi sebagai negatif (False Negative, FN) dan kolom kedua menunjukkan jumlah data yang benar diprediksi sebagai positif (True Positive, TP).
Dengan mengetahui elemen-elemen dalam confusion matrix, kita dapat menghitung berbagai metrik evaluasi model seperti akurasi, precision, recall, dan F1-score.

Tuesday, April 25, 2023

Support Vector Machine & Quadratic Programming

Algoritma SVM (Support Vector Machine) adalah algoritma pembelajaran mesin yang digunakan untuk klasifikasi dan regresi. Algoritma ini mencari hyperplane (garis pembatas) yang terbaik memisahkan dua kelas dengan margin terbesar.

Proses pembelajaran SVM dimulai dengan memberikan data latih kepada algoritma, yang kemudian menghitung hyperplane terbaik. Hyperplane ini dipilih sedemikian rupa sehingga margin (jarak antara hyperplane dan titik-titik terdekat pada setiap kelas) sebesar-besarnya. Titik-titik ini disebut sebagai support vector.

SVM mengoptimalkan margin dengan mencari hyperplane yang memiliki margin terbesar. Hal ini dilakukan dengan menggunakan teknik matematika yang disebut "quadratic programming" untuk menemukan parameter optimal yang diperlukan untuk menentukan hyperplane terbaik.

Setelah hyperplane terbaik ditemukan, algoritma dapat digunakan untuk memprediksi label dari data yang belum diketahui. Data baru akan ditempatkan pada satu sisi hyperplane atau sisi lainnya tergantung di mana letaknya relatif terhadap hyperplane, dan akan diberikan label yang sesuai dengan sisi yang dipilih.

Dalam beberapa kasus, data tidak dapat dipisahkan secara linier menggunakan hyperplane. Dalam hal ini, SVM menggunakan teknik kernel untuk memproyeksikan data ke dalam dimensi yang lebih tinggi, di mana data dapat dipisahkan secara linier. Teknik kernel dapat diterapkan pada berbagai jenis fungsi kernel, seperti linear, polinomial, sigmoid, atau radial basis function (RBF).

Dalam kesimpulannya, SVM adalah algoritma pembelajaran mesin yang kuat dan efektif untuk klasifikasi dan regresi. Algoritma ini dapat menangani data dengan baik dalam kasus-kasus di mana kelas tidak dapat dipisahkan secara linier, dan memiliki keuntungan dalam mengoptimalkan margin untuk meningkatkan kinerja model.

---

Quadratic programming (QP) adalah suatu metode optimasi yang digunakan dalam SVM untuk menyelesaikan masalah pemrograman kuadrat. SVM memerlukan QP untuk menentukan hyperplane optimal yang memisahkan dua kelas data dengan margin yang maksimal.

Dalam konteks SVM, QP mengambil data latih sebagai input dan meminimalkan fungsi biaya yang terkait dengan margin maksimal. Fungsi biaya ini melibatkan parameter λ yang digunakan untuk mengontrol trade-off antara margin dan kesalahan klasifikasi.

Dalam praktiknya, QP digunakan untuk menyelesaikan masalah pemrograman kuadrat yang melibatkan konstrain seperti ketidaknegatifan dari variabel dan kesetimbangan dari jumlah kesalahan klasifikasi positif dan negatif. Dalam hal ini, QP digunakan untuk menentukan koefisien hyperplane yang optimal dan memisahkan dua kelas data dengan margin maksimal.

Secara umum, QP adalah proses yang kompleks dan membutuhkan perhitungan matematis yang rumit. Namun, implementasi QP dalam SVM telah diperbaiki seiring berkembangnya teknologi, sehingga saat ini telah tersedia beberapa pustaka atau library QP open source yang dapat digunakan untuk menyelesaikan masalah SVM secara efektif dan efisien.

Beberapa contoh library QP yang dapat digunakan untuk mendukung implementasi SVM dengan quadratic programming adalah:

  1. CVXOPT: library ini menyediakan alat untuk menyelesaikan masalah optimasi konveks dengan menggunakan bahasa pemrograman Python. CVXOPT mendukung berbagai jenis masalah optimasi, termasuk quadratic programming yang digunakan dalam SVM. CVXOPT juga dapat digunakan untuk menyelesaikan masalah optimasi dalam bentuk umum dengan memanfaatkan fungsi yang tersedia pada library tersebut.
  1. CVXOPT: library ini menyediakan alat untuk menyelesaikan masalah optimasi konveks dengan menggunakan bahasa pemrograman Python. CVXOPT mendukung berbagai jenis masalah optimasi, termasuk quadratic programming yang digunakan dalam SVM. CVXOPT juga dapat digunakan untuk menyelesaikan masalah optimasi dalam bentuk umum dengan memanfaatkan fungsi yang tersedia pada library tersebut.
  1. LIBSVM: library ini menyediakan implementasi SVM dengan menggunakan quadratic programming. LIBSVM merupakan library populer yang mendukung berbagai jenis SVM, termasuk SVM dengan kernel non-linear. LIBSVM dapat digunakan dalam bahasa pemrograman C, C++, dan Java, dan memiliki dukungan untuk beberapa jenis format data.
  1. QuadProg++: library ini merupakan implementasi open-source dari algoritma quadratic programming. QuadProg++ menyediakan solusi untuk masalah optimasi quadratic dengan memanfaatkan metode active-set. Library ini dapat digunakan dalam bahasa pemrograman C++, dan mendukung berbagai jenis masalah optimasi, termasuk yang terkait dengan SVM.


Wednesday, April 5, 2023

Class Full Network - Subnetting Alamat Class C

Contoh Subnetting untuk alamat Class C

Contoh 1
Alamat Network = 192.168.10.0
Subnet Mask  = /26 (255.255.255.192)

Menghitung jumlah subnet dan host yang valid

Perhatikan bit oktet ke 4 pada subnet mask : 11000000, menunjukkan alokasi subnet 2 bit (bernilai 1) dan alokasi host 6 bit (bernilai 0)
  • Jumlah subnet valid = 2^2 -2 = 2 subnet, jika bit bernilai 1 di variasikan maka didapatkan : 11,10,01 dan 00. Karena tidak boleh semua bit bernilai 1 dan bernilai 0 sehingga jumlah subnet yang valid di kurangi 2 (2^2 -2)
  • Blog subnet. dari variasi nilai bit (yang bernilai 1) blog subnet yang valid adalah : 10 (128) dan 01 (64). atau dengan cara cepat
    • 256 - 192 = 64, dan kelipatannya yaitu 64+ 64= 128
    • jadi alamat blog subnet yang valid adalah 64 dan 128
  • Jumlah host tiap subnet yang valid. Jumlah host yang valid adalah variasi dari semua bit bernilai 0 (6 bit tsb) kecuali semau bit bernilai 1 dan semua bit bernilai 0. atau dengan cara cepat :
    • 2^6 - 2 = 60 host tiap subnet.
Subnet                192.168.10.64         192.168.10.128
Host pertama      192.168.10.65         192.168.10.129
Host terakhir       192.168.10.126       192.168.10.190
Broadcast           192.168.10.127       192.168.10.191

Tuesday, April 4, 2023

Class Full Network - Subnetting Alamat Class B

Pada tulisan ini akan diberikan beberapa contoh untuk subnetting alamat Class B

1. Alamat network : 172.16.0.0. Subnet mask  = /18 (255.255.192.0)

Perhatikan oktet ke 3 dan ke 4pada subnet mask 11000000.00000000. alokasi untuk subnet = 2 bit dan alokasi host = 14 bit

  • jumklah subnet yang valid = 2^2 - 2 = 2
  • jumlah host setiap subnet = 2^14 - 2 = 16.382
  • Blok subnet yang valid = 256 - 192 = 64, 64 + 64=128
Subnet             172.16.64.0           172.16.128.0
host pertama    172.16.64.1           172.16.128.1
Host terakhir    172.16.127.254     172.16.192.254
Broadcast        172.16.127.255     172.16.192.254 

2. Alamat network : 172.16.0.0. Subnet mask  = /20 (255.255.240.0)

Perhatikan oktet ke 3 dan ke 4pada subnet mask 11110000.00000000. alokasi untuk subnet = 4 bit dan alokasi host = 12 bit.
  • jumklah subnet yang valid = 2^4 - 2 = 14
  • jumlah host setiap subnet = 2^12 - 2 = 4094
  • Blok subnet yang valid = 256 - 240 =16, 32, 48.....dst
tiga subnet pertama
Subnet                 172.16.16.0        172.16.32.0          172.16.48.0        ......
host pertama        172.16.16.1        172.16.32.1          172.16.48.1        ......
Host terakhir        172.16.31.254    172.16.47.254      172.16.63.254    .....
Broadcast            172.16.31.255    172.16.47.254      172.16.63.255    ......


3. Alamat network : 172.16.0.0. Subnet mask  = /26 (255.255.255.192) 

Perhatikan oktet ke 3 dan ke 4pada subnet mask 11111111.11000000. alokasi untuk subnet = 10 bit dan alokasi host = 6 bit

  • jumklah subnet yang valid = 2^10 - 2 = 1022
  • jumlah host setiap subnet = 2^6 - 2 = 62
  • Blok subnet yang valid = 256 - 192 = 64 dan 128. Dan selama semua bit subnet pada oktet ke 3 tidak off ( bernilai 0) semuanya, maka subnet 0 di oktet ke 4 menjadi valid, selama bit subnet di oktet ke 3 tidak semuanya on (bernilai 1) maka 192 adalah valid di oktet ke 4 sebagai sebuah subnet.
Subnet             172.16.0.64     172.16.0.128    172.16.0.192    172.16.1.0     172.16.1.64     ......
host pertama    172.16.0.65     172.16.0.129    172.16.0.193    172.16.1.1     172.16.1.65      ......
Host terakhir    172.16.0.126   172.16.0.190    172.16.0.254    172.16.1.62   172.16.1.126    .....
Broadcast        172.16.0.127   172.16.0.191    172.16.0.255    172.16.1.63    172.16.1.127    ......

Sunday, April 2, 2023

Mendownload Dataset dari Kaggle ke Google Driver

Pada tulisan ini akan diberikan contoh untuk mendownload dataset pada kaggle dan tersimpan langsung pada Google Drive, tanpa terlebih dahulu di download ke storage pada PC/Laptop. Proses download dilakukan melalui Google Colab.

  1. Jalankan perintah berikut :
    • !pip install kaggle
    • !pip install google-auth google-auth-oauthlib google-auth-httplib2
  2. Buat API pada web kaggle, kemudian pada program di bawah isi dengan username dan key yang didapatkan.
  3. Upload file kaggle.jason pada directory google drive

from google.colab import drive
from google.colab import files
from google.colab import auth
import os

# Mount Google Drive
drive.mount('/content/drive')

# Path untuk menyimpan file kaggle.json yang sudah diupload ke Google Drive
kaggle_json_path = '/content/drive/MyDrive/kaggle.json'

# Path untuk dataset pada Kaggle
kaggle_dataset_path = 'tawsifurrahman/tuberculosis-tb-chest-xray-dataset'

# Jalankan autentikasi
auth.authenticate_user()

# Set konfigurasi API Kaggle
os.environ['KAGGLE_USERNAME'] = "xxxxxx"
os.environ['KAGGLE_KEY'] = "xxxxxxx"

# Mengcopy file kaggle.json dari Google Drive ke direktori .kaggle
!mkdir -p ~/.kaggle
!cp "/content/drive/MyDrive/Colab Notebooks/kaggle.json" ~/.kaggle/kaggle.json
!chmod 600 ~/.kaggle/kaggle.json

# Mengunduh dataset dari Kaggle
!kaggle datasets download -d {kaggle_dataset_path} -p "/content/drive/MyDrive/dataset/"

# Menampilkan file yang sudah terunduh
!ls "/content/drive/MyDrive/dataset/"

Ekstrak DataSet pada Google Drive

import zipfile

zip_file = "/content/drive/MyDrive/dataset/tuberculosis-tb-chest-xray-dataset.zip"
destination_folder = "/content/drive/MyDrive/dataset/tuberculosis-tb-chest-xray-dataset"

with zipfile.ZipFile(zip_file, 'r'as zip_ref:
    zip_ref.extractall(destination_folder)