Data-MiningMachine LearningProjectTutorial

Machine Learning – Spam-Erkennung


Der heutige Post beschäftigt sich mit der Frage wie Machine Learning im einfachsten Fall funktioniert. Um uns das Konzept hinter Machine Learning zu verdeutlichen werden wir eine sehr einfache Spam-Erkennung entwickeln. Konkret lernen wir dabei folgendes:

  • Machine Learning Übersicht: Wie kann eine Maschine lernen? Was lernt die Maschine überhaupt?
  • Naiver Bayes-Classifier: Was ist das? Was macht er und wie macht er es?
  • Implementierung: Wie sieht der konkrete Code aus?

Voraussetzungen

Ihr solltet folgenden Post verstanden haben (vor allem das Thema “Classifier”):


Machine Learning Übersicht

Wikipedia definiert Machine Learning als einen “Oberbegriff für die ‘künstliche’ Generierung von Wissen aus Erfahrung: Ein künstliches System lernt aus Beispielen und kann diese nach Beendigung der Lernphase verallgemeinern. Das heißt, es werden nicht einfach die Beispiele auswendig gelernt, sondern es ‘erkennt’ Muster und Gesetzmäßigkeiten in den Lerndaten”1.

Es geht also darum dem Computer immer wieder Beispiele zu zeigen (z.B. Bilder von einem Hunden) und dem Computer anschließend zu sagen was das ist (z.B. Ein Hund). Machine Learning versucht dann selbstständig die Regeln zu lernen mit denen es einen Hund von einer Katze unterscheiden kann.


Naiver Bayes-Classifiers

Der Naive-Bayes-Classifiers funktioniert sehr intuitiv und dementsprechend einfach ist auch die Mathematik rund um den Naive-Bayes-Classifier.

Die Grundidee des Naive-Bayes-Classifiers ist (bezogen auf unser E-Mail-Problem), dass man aus den Wahrscheinlichkeiten,

  • dass eine Spam-Email ein Spam-Wort enthält (z.B. Viagra)
  • dass die Email eine Spam-Email ist (d.h. Wie viel Prozent der Mails sind durchschnittlich Spam?)
  • dass das Spam-Wort in einer E-Mail vorkommt (d.h. Wie viele E-Mails enthalten im Durchschnitt dieses eine Wort?)

zu berechnen versucht, wie hoch die Wahrscheinlichkeit ist, dass die zu untersuchende Mail eine Spam-Email ist.
Dabei werden sich alle Wörter in der E-Mail angeschaut und die E-Mail erst verworfen, wenn ausreichend Spam-Wörter gefunden wurden. In diesem Punkt unterscheidet sich der vorgestellte Ansatz von der naiven Keyword-Suche. Die Keyword-Suche ordnet eine Mail sofort als Spam ein, wenn auch nur ein Wort, welches auf der Spam-Worte-Liste steht, in ihr enthalten ist.

Konkret könnte man die Wahrscheinlichkeit dafür, dass eine E-Mail eine Spam-Mail ist also wie folgt berechnen:

Das Lernen der Spam-Wörter und Nicht-Spam-Wörter passiert also nur dadurch, dass sich der Classifier speichert wie oft ein gegebenes Wort, in der Vergangenheit, Teil einer Spam-Mail war.


Implementierung

In dem nachfolgenden IFrame ist eine simple Javascript-Only Implementierung des Naiven-Bayes-Classifiers zu sehen. Probiert einfach etwas rum, sowohl der Zufallsgenerator als auch der restliche Code sind alles andere als komplex und demsntsprechend sind auch die generierten Sätze. Der Classifier hingegen wird in ähnlicher Form, wie ich ihn implementiert habe auch in echten Spam-Filtern verwendet. Natürlich kommt bei den großen Spam-Filter-Projekten noch ein Haufen Zeugs außenrum dazu, aber für den Einstieg soll uns das so reichen.

Open in new window

Kurze Erklärung zu den Buttons:

Check – Prüft ob der im Text-Area stehende Text ein Spam-Text ist (basierend auf den gelernten Wahrscheinlichkeiten)
Save as Spam – Erhöht die Wahrscheinlichkeit der Wörter Spam zu sein
Save as NO Spam – Verringert die Wahrscheinlichkeit der Wörter Spam zu sein
Auto learning – Generiert ein paar pseudo zufällige Texte und trainiert den Bayes-Classifier damit

Generate random spam text – Generiert einen zufälligen Spam-Text
Generate random no spam text – Generiert einen zufälligen No-Spam-Text
Generate random mixed text – Generiert einen zufälligen gemischten Text (also einen Text, der nur schwer als Spam/Nicht-Spam erkennbar ist)

1.
Maschinelles Lernen. Wikipedia. //de.wikipedia.org/wiki/Maschinelles_Lernen. Accessed January 5, 2017.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.