Naive Bayes - Multiple labels
Man könnte damit zum Beispiel einen New - Artikel über Technologie, Politik, oder Wirtschaft klassifizieren. Für das Beispiel verwende ich das Datenset von Iris - Blumen.
Download Iris - Data: https://archive.ics.uci.edu/ml/machine-learning-databases/iris/
Die Merkmale sind Länge und Breite des Kelchblattes und des Blütenblatts. Und je nach Größe dieser Blätter, gibt es drei Iris - Arten: Setosa, Versicolor und Virginica.
Ein Beispiel soll die Vorhersagegenauigkeit demonstrieren.
Datei: NaiveBayesMultipleLabels.py
# Implementierung Naive Bayes - Single Feature
# 2022 Ehrenfried Stuhlpfarrer
# Import der erforderlichen Bibliotheken
# scikit-learn - Dataset Library
from sklearn import datasets
# Train test - split function
from sklearn.model_selection import train_test_split
# Gauss - Naive Bayes Model
from sklearn.naive_bayes import GaussianNB
# Das Iris - Dataset laden
iris_blumen = datasets.load_iris()
# print("Iris Dataset: ", iris_blumen)
# Die Namen der Merkmale ausgeben
print("Merkmale: \n", iris_blumen.feature_names)
# Die Namen der Labels ausgeben
print("Labels: \n", iris_blumen.target_names)
# Ausgabe des Datenformats
print("Datenformat:\n", iris_blumen.data.shape)
# Ausgabe der ersten 10 Datenmerkmale
print(iris_blumen.data[0:10])
# Aufteilen der Daten in Trainingsset u. Testset
# 70% für Training und 30% für das Testen
X_train, X_test, y_train, y_test = train_test_split(iris_blumen.data,
iris_blumen.target, test_size=0.3, random_state=115)
# Gaussian - Klassifizierer generieren
NB_iris = GaussianNB()
# Das Klassifizierungsmodell mit den Trainingsdaten trainieren
NB_iris.fit(X_train, y_train)
# Die Vorhersagen - aus dem Test - Dataset
y_pred = NB_iris.predict(X_test)
print("Vorhersagen: \n", y_pred)
# Modul für die Genauigkeitsmessung der Vorhersage importieren
from sklearn import metrics
print("Genauigkeit: ", metrics.accuracy_score(y_test, y_pred))
Ausgabe: --------------------------------------------------------------
Merkmale: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] Labels: ['setosa' 'versicolor' 'virginica'] Datenformat: (150, 4) [[5.1 3.5 1.4 0.2] [4.9 3. 1.4 0.2] [4.7 3.2 1.3 0.2] [4.6 3.1 1.5 0.2] [5. 3.6 1.4 0.2] [5.4 3.9 1.7 0.4] [4.6 3.4 1.4 0.3] [5. 3.4 1.5 0.2] [4.4 2.9 1.4 0.2] [4.9 3.1 1.5 0.1]] Vorhersagen: [0 0 1 2 0 2 1 1 0 1 0 0 2 0 2 0 2 0 1 2 2 1 1 0 1 0 1 0 0 2 2 2 2 1 1 0 1 2 0 0 0 2 2 1 0] Genauigkeit: 0.9333333333333333
Dies entspricht einer Genauigkeit von ca. 93%. Das ist nicht schlecht.