Εισαγωγή στον αλγόριθμο Naive Bayes

ML
ML αλγόριθμος
ταξινόμηση
Εισαγωγή στον αλγόριθμο Naive Bayes cover image

Τραπέζι:

Εισαγωγή

Το Naive Bayes είναι ένας αλγόριθμος μηχανικής μάθησης ταξινόμησης που βασίζεται στο θεώρημα Bayes. Είναι πολύ αποτελεσματικό ειδικά όταν ασχολείστε με δεδομένα κειμένου όπως: Ανάλυση συναισθήματος, ανίχνευση ανεπιθύμητων μηνυμάτων και ταξινόμηση κειμένου.

Αυτός ο αλγόριθμος ονομάζεται "Naive" λόγω της υπόθεσης ότι όλες οι μεταβλητές δεδομένων είναι ανεξάρτητες, κάτι που δεν συμβαίνει πάντα.

Πριν προχωρήσουμε περαιτέρω στο να εξηγήσουμε πώς λειτουργεί το Naive bayes, ας βεβαιωθούμε ότι κατανοούμε τα εξής:

Πιθανότητα υπό όρους

Ο αλγόριθμος Naive Bayes βασίζεται στο θεώρημα Bayes, το οποίο βασίζεται στην πιθανότητα υπό όρους: είναι η πιθανότητα εμφάνισης ενός γεγονότος Α, δεδομένου ότι ένα γεγονός Β έχει ήδη συμβεί.

Παράδειγμα:

Ας έχουμε δύο βάζα που περιέχουν χρωματιστές μπάλες:

  • Το βάζο 1 έχει 3 μπλε μπάλες, 2 κόκκινες και 4 πράσινες μπάλες.

  • Το βάζο 2 έχει 1 μπλε μπάλα, 4 κόκκινες και 3 πράσινες μπάλες.

Θέλουμε να υπολογίσουμε την πιθανότητα να επιλέξουμε τυχαία μια μπλε μπάλα από ένα από τα βάζα

equations

Δεν είναι άλλο από το άθροισμα των πιθανοτήτων επιλογής μιας μπλε μπάλας από το Jar1 ή το Jar2.

Τώρα, θέλουμε να υπολογίσουμε την πιθανότητα επιλογής μιας μπλε μπάλας δεδομένου ότι επιλέξαμε το Jar1:

equations

Τέλος, θέλουμε να υπολογίσουμε την πιθανότητα επιλογής Jar1 δεδομένου ότι σχεδιάσαμε μια μπλε μπάλα. Εδώ χρησιμοποιούμε το θεώρημα Bayes που δηλώνεται ως εξής:

equations

equations

Ταξινόμηση Naive Bayes

Στον ταξινομητή Naive Bayes, θέλουμε να βρούμε την κλάση που μεγιστοποιεί την υπό όρους πιθανότητα δεδομένου του διανύσματος εισόδου X. Έτσι, ο Naive Bayes μπορεί να διατυπωθεί ως εξής:

equations

Με τη χρήση του Θεωρήματος Bayes, η συνάρτηση γίνεται:

equations

Σε αυτή τη διατύπωση, είναι εύκολο να υπολογιστεί το P(Ci) που δεν είναι άλλο από την πιθανότητα της κλάσης Ci, και είναι εύκολο να υπολογιστεί το P(x) που είναι η πιθανότητα να συμβεί το γεγονός x.

Αυτό που είναι δύσκολο να υπολογιστεί είναι το P(x|Ci); την πιθανότητα του γεγονότος x δεδομένης της κλάσης Ci. Για να απλοποιηθεί περαιτέρω αυτό, πρέπει να υποθέσουμε ότι όλες οι μεταβλητές εισόδου είναι ανεξάρτητες. έτσι μπορούμε να γράψουμε:

equations

Και είναι στην πραγματικότητα λόγω αυτής της υπόθεσης που ονομάζουμε αυτόν τον ταξινομητή "Αφελής", επειδή δεν μπορούμε πάντα να εγγυηθούμε την ανεξαρτησία των μεταβλητών εισόδου. Ο ταξινομητής Naive Bayes γίνεται:

equations

Στην πραγματικότητα, μπορούμε να απλοποιήσουμε περαιτέρω αυτήν τη διατύπωση εξαλείφοντας το P(x), επειδή είναι το ίδιο για όλες τις κατηγορίες:

equations

Τώρα, ας ρίξουμε μια ματιά σε ένα παράδειγμα:

| Καιρός | Χρόνος | Ημέρα της εβδομάδας | Δείπνο |

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

| Καθαρός | Βράδυ | Σαββατοκύριακο | Μάγειρες |

| Συννεφιά | Νύχτα | Καθημερινή | Παραγγελίες |

| Βροχερό | Νύχτα | Καθημερινή | Παραγγελίες |

| Βροχερό | Μεσημέρι | Καθημερινή | Παραγγελίες |

| Συννεφιά | Μεσημέρι | Σαββατοκύριακο | Μάγειρες |

| Καθαρός | Νύχτα | Σαββατοκύριακο | Μάγειρες |

| Χιονισμένο | Βράδυ | Σαββατοκύριακο | Παραγγελίες |

| Καθαρός | Νύχτα | Καθημερινή | Μάγειρες |

| Καθαρός | Μεσάνυχτα | Σαββατοκύριακο | Παραγγελίες |

Εδώ, έχουμε ένα μικρό σύνολο δεδομένων που περιέχει 3 μεταβλητές εισαγωγής: Καιρός, Ώρα και Ημέρα της εβδομάδας και μία μεταβλητή Στόχος: "Δείπνο" που υποδεικνύει εάν ένα άτομο μαγειρεύει ή παραγγέλνει το δείπνο του . Θα θέλαμε να βρούμε την κλάση της εισόδου x={Clear, Evening, Weekend}:

equations

Πρέπει να υπολογίσουμε την υπό όρους πιθανότητα για την κλάση "Μάγειρες" και την κλάση "Παραγγελίες" με την είσοδο x={Καθαρό, Βράδυ, Σαββατοκύριακο}. Η προβλεπόμενη κλάση είναι αυτή που έχει την υψηλότερη υπό όρους πιθανότητα.

Ξεκινάμε υπολογίζοντας την υπό όρους πιθανότητα της κλάσης «Μάγειρες»:

equations

Τώρα υπολογίζουμε κάθε υπό όρους πιθανότητα από μόνη της:

Η πιθανότητα καιρού=”Clear” δεδομένου ότι η κλάση είναι “Cooks” είναι ο αριθμός των γραμμών με καιρό “Clear” και η κατηγορία “Cooks” σε σχέση με τον συνολικό αριθμό των γραμμών με την κατηγορία “Cooks”

equations

Το ίδιο ισχύει και για τις υπόλοιπες πιθανότητες:

equations

Τώρα για την πιθανότητα P(Cooks) είναι ο αριθμός των γραμμών με την κατηγορία "Cooks" σε σχέση με τον συνολικό αριθμό των γραμμών:

equations

Τώρα υπολογίζουμε το γινόμενο αυτών των πιθανοτήτων:

equations

Αυτό ήταν για την τάξη "Μάγειρες", τώρα πρέπει να κάνουμε το ίδιο για την τάξη "Παραγγελίες":

equations

Υπολογίζουμε τις επιμέρους πιθανότητες:

equations

Και τελικά υπολογίζουμε το γινόμενο των πιθανοτήτων:

equations

Τέλος, παίρνουμε την τάξη με την υψηλότερη πιθανότητα που είναι η κλάση «Μάγειρες»:

equations

equations

equations

equations

equations

equations

Πλεονεκτήματα και περιορισμοί αυτού του αλγορίθμου

Φόντα:

  • Είναι ένας πολύ γρήγορος ταξινομητής.

  • Είναι εύκολο να εφαρμοστεί.

  • Δεν υπάρχει προπονητική φάση, αλλά είναι μόνο συμπέρασμα.

  • Δεν απαιτεί πολλά δεδομένα για να βγάλετε συμπεράσματα.

Περιορισμοί:

  • Ο Naive Bayes υποθέτει ότι οι μεταβλητές εισόδου είναι ανεξάρτητες, κάτι που δεν είναι πάντα αληθές.

  • Ο Naive Bayes πάσχει από το πρόβλημα της μηδενικής συχνότητας: είναι όταν εκχωρεί μηδενική πιθανότητα σε μια μεταβλητή εισόδου. Αυτό θα μηδενίσει όλη την υπό όρους πιθανότητα P(C|x). Ένα κόλπο για να αποφευχθεί αυτό είναι να χρησιμοποιήσετε μια ελάχιστη συχνότητα 1 (αντί για 0) σε όλες τις μεταβλητές.

Άσκηση

Εδώ είναι το πλαίσιο δεδομένων του ίδιου συνόλου δεδομένων που είδαμε στο παράδειγμα.

Ο στόχος σας είναι να εφαρμόσετε μόνοι σας τον Naive Bayes χρησιμοποιώντας 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

Λύση


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



Master Data Science and AI με τον Code Labs Academy! Εγγραφείτε στο διαδικτυακό μας Bootcamp – Διαθέσιμες ευέλικτες επιλογές μερικής και πλήρους απασχόλησης.


Career Services background pattern

Υπηρεσίες καριέρας

Contact Section background image

Ας μείνουμε σε επαφή

Code Labs Academy © 2024 Όλα τα δικαιώματα διατηρούνται.