Naive Bayes Klassifikator mit Scikit

off the rack classifiers

Im vorigen Kapitel haben wir einen Naive Bayes Klassifikator von Grund auf geschrieben. In diesem Kapitel zeigen wir, wie Sie den bereits fertigen Naive Bayes Klassifikator "von der Stange" zur Verfügung.

In unserem ersten Beispiel verwenden wir das Iris-Dataset um den Klassifikator zu trainieren und zu testen.

# Gaussian Naive Bayes
from sklearn import datasets
from sklearn import metrics
from sklearn.naive_bayes import GaussianNB

# Iris-Datasets laden
dataset = datasets.load_iris()

# Naive Bayes Model mit den Daten füttern
model = GaussianNB()
model.fit(dataset.data, dataset.target)

# Vorhersagen treffen
expected = dataset.target
predicted = model.predict(dataset.data)

#  Zusammenfassung
print("Report:\n", metrics.classification_report(expected, predicted))
print("Konfusionsmatrix:\n", metrics.confusion_matrix(expected, predicted))
Report:
              precision    recall  f1-score   support

          0       1.00      1.00      1.00        50
          1       0.94      0.94      0.94        50
          2       0.94      0.94      0.94        50

avg / total       0.96      0.96      0.96       150

Konfusionsmatrix:
 [[50  0  0]
 [ 0 47  3]
 [ 0  3 47]]

Wir verwenden nun einmal die Personen-Daten aus dem vorigen Kapitel um einen weiteren Klassifikator zu trainieren:

import numpy as np

def prepare_person_dataset(fname):
    genders = ["male", "female"]
    persons = []
    with open(fname) as fh:
        for line in fh:
            persons.append(line.strip().split())
            
    dataset = [] #Größe, Gewicht und Geschlecht
    
    for person in persons:
        height_weight = (float(person[2]), float(person[3]))
        dataset.append( (height_weight, person[4])) 
    return dataset

learnset = prepare_person_dataset("data/person_data.txt")
testset = prepare_person_dataset("data/person_data_testset.txt")
#print(learnset)
# Gaussian Naive Bayes
from sklearn import datasets
from sklearn import metrics
from sklearn.naive_bayes import GaussianNB

model = GaussianNB()
w, l = zip(*learnset)
w = np.array(w)
l = np.array(l)

model.fit(w, l)
#print(model)

w, l = zip(*testset)
w = np.array(w)
l = np.array(l)
predicted = model.predict(w)

# Zusammenfassung
print("Report:\n", metrics.classification_report(l, predicted))
print("Konfusionsmatrix:\n", metrics.confusion_matrix(l, predicted))
Report:
              precision    recall  f1-score   support

     female       0.68      0.80      0.73        50
       male       0.76      0.62      0.68        50

avg / total       0.72      0.71      0.71       100

Konfusionsmatrix:
 [[40 10]
 [19 31]]