Pengantar Algoritma Naive Bayes

ML
algoritma ML
klasifikasi
Pengantar Algoritma Naive Bayes cover image

Meja:

Pengantar

Naive Bayes adalah algoritma pembelajaran mesin klasifikasi yang didasarkan pada teorema Bayes. Ini sangat efisien terutama ketika menangani data tekstual seperti: Analisis Sentimen, Deteksi Spam, dan klasifikasi teks.

Algoritme ini disebut “Naif” karena asumsi bahwa semua variabel kumpulan data adalah independen, namun hal ini tidak selalu terjadi.

Sebelum menjelaskan lebih jauh cara kerja Naive bayes, pastikan kita memahami hal berikut:

Probabilitas bersyarat

Algoritme Naive Bayes didasarkan pada teorema Bayes yang didasarkan pada probabilitas bersyarat: yaitu probabilitas terjadinya suatu peristiwa A jika suatu peristiwa B telah terjadi.

Contoh:

Mari kita buat dua toples yang berisi bola berwarna:

  • Toples 1 berisi 3 bola biru, 2 bola merah, dan 4 bola hijau.

  • Toples 2 terdapat 1 bola biru, 4 bola merah, dan 3 bola hijau.

Kita ingin menghitung probabilitas terambilnya bola biru secara acak dari salah satu toples

equations

Ini tidak lain adalah jumlah probabilitas terpilihnya bola biru dari Jar1 atau Jar2.

Sekarang, kita ingin menghitung probabilitas terambilnya bola biru jika kita memilih Jar1:

equations

Terakhir, kita ingin menghitung probabilitas terpilihnya Jar1 jika kita menggambar bola biru. Disini kita menggunakan Teorema Bayes yang dinyatakan sebagai berikut:

equations

equations

Klasifikasi Naif Bayes

Dalam pengklasifikasi Naive Bayes, kami ingin mencari kelas yang memaksimalkan probabilitas bersyarat dengan vektor masukan X; dengan demikian, Naive Bayes dapat dirumuskan sebagai berikut:

equations

Dengan menggunakan Teorema Bayes, fungsinya menjadi:

equations

Dalam rumusan ini mudah untuk menghitung P(Ci) yang tidak lain adalah peluang kelas Ci, dan mudah untuk menghitung P(x) yang merupakan peluang terjadinya kejadian x.

Yang sulit dihitung adalah P(x|Ci); peluang kejadian x jika diberi kelas Ci. Untuk lebih menyederhanakan hal ini, kita perlu berasumsi bahwa semua variabel masukan adalah independen; dengan demikian, kita dapat menulis:

equations

Dan sebenarnya karena asumsi inilah kami menyebut pengklasifikasi ini “Naif”, karena kami tidak selalu dapat menjamin independensi variabel masukan. Pengklasifikasi Naive Bayes menjadi:

equations

Faktanya, rumusan ini bisa kita sederhanakan lebih jauh dengan menghilangkan P(x), karena rumusnya sama untuk semua kelas:

equations

Sekarang, mari kita lihat sebuah contoh:

| Cuaca | Waktu | Hari dalam seminggu | Makan malam |

| ------- | -------- | --------------- | ------ |

| Hapus | Malam | Akhir pekan | juru masak |

| Berawan | Malam | Hari kerja | Pesanan |

| Hujan | Malam | Hari kerja | Pesanan |

| Hujan | Tengah hari | Hari kerja | Pesanan |

| Berawan | Tengah hari | Akhir pekan | juru masak |

| Hapus | Malam | Akhir pekan | juru masak |

| Bersalju | Malam | Akhir pekan | Pesanan |

| Hapus | Malam | Hari kerja | juru masak |

| Hapus | Tengah malam | Akhir pekan | Pesanan |

Di sini, kami memiliki kumpulan data kecil yang berisi 3 variabel masukan: Cuaca, Waktu, dan Hari, dan satu variabel Target: “Makan Malam” yang menunjukkan apakah seseorang memasak atau memesan makan malamnya. Kami ingin mencari kelas input x={Clear, Evening, Weekend}:

equations

Kita perlu menghitung probabilitas kondisional untuk kelas “Cooks” dan kelas “Orders” dengan masukan x={Clear, Evening, Weekend}. Kelas yang diprediksi adalah kelas yang mempunyai probabilitas bersyarat tertinggi.

Kita mulai dengan menghitung probabilitas bersyarat dari kelas “Koki”:

equations

Sekarang kita menghitung sendiri setiap probabilitas bersyarat:

Probabilitas cuaca=”Jelas” mengingat kelasnya adalah “Masak” adalah jumlah garis dengan cuaca “Jelas” dan kelas “Masak” dari jumlah total garis dengan kelas “Masak”

equations

Hal yang sama berlaku untuk probabilitas bersyarat lainnya:

equations

Sekarang untuk probabilitas P(Cooks) adalah jumlah baris dengan kelas “Cooks” dari jumlah total baris:

equations

Sekarang kita menghitung produk dari probabilitas berikut:

equations

Itu tadi untuk kelas “Masak”, sekarang kita perlu melakukan hal yang sama untuk kelas “Pesanan”:

equations

Kami menghitung probabilitas individu:

equations

Dan kami akhirnya menghitung produk dari probabilitas:

equations

Terakhir, kita mengambil kelas dengan probabilitas tertinggi yaitu kelas “Masak”:

equations

equations

equations

equations

equations

equations

Kelebihan dan keterbatasan algoritma ini

Keuntungan:

  • Ini adalah pengklasifikasi yang sangat cepat.

  • Mudah diterapkan.

  • Tidak ada fase pelatihan, tetapi hanya inferensi.

  • Tidak memerlukan banyak data untuk membuat kesimpulan.

Keterbatasan:

  • Naive Bayes mengasumsikan bahwa variabel masukan bersifat independen, namun hal ini tidak selalu benar.

  • Naive Bayes mengalami masalah frekuensi nol: yaitu masalah yang menetapkan probabilitas nol pada variabel masukan. Ini akan menghilangkan semua probabilitas bersyarat P(C|x). Salah satu trik untuk menghindari hal ini adalah dengan menggunakan frekuensi minimal 1 ( bukan 0 ) untuk semua variabel.

Latihan

Berikut adalah kerangka data dari kumpulan data yang sama seperti yang telah kita lihat pada contoh.

Tugas Anda adalah mengimplementasikan Naive Bayes sendiri menggunakan python:

import pandas as pd
dataset = pd.DataFrame()
dataset['Weather'] = ['Clear', 'Cloudy', 'Rainy', 'Rainy', 'Cloudy', 'Clear', 'Snowy', 'Clear', 'Clear']
dataset['Time'] = ['Evening', 'Night', 'Night', 'Midday', 'Midday', 'Night', 'Evening', 'Night', 'Midnight']
dataset['Day'] = ['Weekend', 'Weekday', 'Weekday', 'Weekday', 'Weekend', 'Weekend', 'Weekend', 'Weekday', 'Weekend']
dataset['Class'] = ['Cooks', 'Orders', 'Orders', 'Orders', 'Cooks', 'Cooks', 'Orders', 'Cooks', 'Orders']

def naive_bayes(weather, time, day):

# res_dict = {class1: probability of class 1, class1: probability of class 1
return res_dict

Solusi


def naive_bayes(x_weather, x_time, x_day):
  TARGET = 'Dinner' # The name of the target variable
  CLASSES = list(dataset['Dinner'].unique()) # The classes of the target variable
len_dataset = len(dataset) # The length of the dataset
res_dict = {} # res_dict = {class1:probability1, ..., class_n:probability_n}

# for each class of the target classes, we calculate the it's conditional probability
for class_name in CLASSES:
# the number of lines that belong to the class "class_name"
len_c  = len(dataset[ (dataset[TARGET] == class_name) ])

# the number of lines that belong to the class "class_name" and have weather="x_weather"
n_weather = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Weather'] == x_weather) ])
# the number of lines that belong to the class "class_name" and have time="x_time"
n_time = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Time'] == x_time) ])

# the number of lines that belong to the class "class_name" and have day="x_day"
n_day  = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Day'] == x_day) ])

# We calculate the conditional probability:
# P(class|x) = P(weather|class) x P(time|class) x P(day|class) x P(class)
p = (n_weather / len_c) * (n_time / len_c) * (n_day / len_c) * (len_c / len_dataset)        res_dict[class_name] = p
return res_dict



Career Services background pattern

Layanan Karir

Contact Section background image

Mari tetap berhubungan

Code Labs Academy © 2024 Semua hak dilindungi undang-undang.