Maschinelles Lernen für den faulen Anfänger

Dieser Artikel wurde durch einen Tweet veranlasst, den ich gesehen habe und in dem um eine exemplarische Vorgehensweise zum Trainieren eines maschinellen Lerndienstes gebeten wurde, um neue Mitglieder von 3 verschiedenen Datensätzen zu erkennen.

@rem: Hier faul sein: Ich bin auf der Suche nach einem (maschinellen Lern-) Dienst, den ich mit drei separaten Datensätzen füttern kann (um damit zu trainieren), und dann möchte ich fragen: „Welcher Datensatz ist Dies neue Stückchen Inhalt am liebsten“.

Gibt es dafür eine Komplettlösung/Cheatsheet/Service?

Mein erster Gedanke war, dass das wie a klingt Einstufung Aufgabe, und die Idee, dass es 3 Datensätze gibt, sollte umgekehrt sein: Es gibt einen Datensatz und jedes Element im Satz hat eines von 3 Labels.

Ich hatte keine exemplarische Vorgehensweise im Sinn, aber ich weiß, wie man einen Klassifizierer trainiert, um genau diese Aufgabe auszuführen, also ist hier meine exemplarische Vorgehensweise zum Klassifizieren von Textdokumenten mit Javascript.

Haben Sie eine angemessene Aufsicht?

Maschinelles Lernen kann (kein Wortspiel beabsichtigt) als überwacht oder unüberwacht klassifiziert werden. Letzteres bezieht sich auf Probleme, bei denen die Daten, die Sie dem Algorithmus zuführen, keine vorgegebene Bezeichnung haben. Möglicherweise haben Sie eine Reihe von Textdokumenten und möchten herausfinden, ob sie in ähnlichen Kategorien zusammengefasst werden können – das wäre ein Beispiel für Clusterung.

Beim überwachten Lernen kennen Sie das Ergebnis bereits. Sie haben einen Datensatz, in dem jedes Mitglied in eines von passt n Kategorien, z. B. eine Reihe von Kundendaten für Ihre E-Commerce-Plattform, gekennzeichnet nach der Produktkategorie, an der sie wahrscheinlich interessiert sind. Sie trainieren Ihr Modell anhand dieser Daten und verwenden es, um vorherzusagen, welche neuen Kunden interessiert sein könnten beim Kauf – dies ist ein Beispiel für die Klassifizierung.

Steigen Sie ins Training ein

Für die Klassifizierungsaufgabe haben wir gesagt, dass wir ein Modell anhand der Daten „trainieren“, für die wir die Bezeichnungen kennen. Das bedeutet, dass wir jede Instanz in einem Datensatz in den Klassifikator einspeisen und angeben, welches Label sie haben soll. Wir können dem Klassifikator dann eine neue Instanz übergeben, deren Bezeichnung wir nicht kennen, und er wird vorhersagen, in welche Klasse diese passt, basierend auf dem, was er zuvor gesehen hat.

Es gibt ein Javascript-Paket namens natural die mehrere verschiedene Klassifikatoren für die Arbeit mit Textdokumenten (natürliche Sprache) hat. Die Verwendung sieht so aus:

const { BayesClassifier } = require('natural');
const classifier = new BayesClassifier(); // Feed documents in, labelled either 'nice' or 'nasty'
classifier.addDocument('You are lovely', 'nice');
classifier.addDocument('I really like you', 'nice');
classifier.addDocument('You are horrible', 'nasty');
classifier.addDocument('I do not like you', 'nasty'); // Train the model
classifier.train(); // Predict which label these documents should have
classifier.classify('You smell horrible');
// nasty
classifier.classify('I like your face');
// 'nice'
classifier.classify('You are nice');
// 'nice'

Wir fügen beschriftete Daten hinzu, trainieren das Modell und können es dann verwenden, um die Textklasse vorherzusagen, die wir zuvor noch nicht gesehen haben. Hurra!

Performance-Analyse

Das Trainieren eines maschinellen Lernmodells mit einem Datensatz von 4 Instanzen ist eindeutig nicht sehr nützlich – seine Erfahrung mit der Problemdomäne ist sehr begrenzt. Maschinelles Lernen und Big Data sind gewissermaßen Synonyme, denn je mehr Daten Sie haben, desto besser können Sie Ihr Modell trainieren, genauso wie je mehr Erfahrung jemand mit einem Thema hat, desto mehr weiß er wahrscheinlich darüber. Woher wissen wir also, wie schlau unser Modell ist?

Wir evaluieren überwachte Lernmodelle, indem wir unsere Daten in einen Trainingssatz und einen Testsatz aufteilen, sie mit dem einen trainieren und mit dem anderen testen (ich überlasse es Ihnen, zu raten, wie es geht). Je mehr Daten im Trainingssatz vorhanden sind, desto besser.

Wenn wir die Vorhersagen für unsere Testdaten erhalten, können wir feststellen, ob das Modell die Klasse, mit der jedes Element gekennzeichnet ist, genau vorhergesagt hat. Wenn wir die Erfolge und Fehler addieren, erhalten wir Zahlen, die angeben, wie gut der Klassifikator ist. Zum Beispiel sind Erfolge über die Gesamtzahl der verarbeiteten Instanzen unsere Genauigkeit; Fehler dividiert durch die Gesamtzahl ergibt die Fehlerquote. Wir können eine eingehendere Analyse erhalten, indem wir a zeichnen Verwirrung Matrix Anzeigen der tatsächlichen Klassen im Vergleich zu Vorhersagen:

Tatsächlich
Hübschböse
VorhergesagtHübsch212
böse110

Dies ist wirklich wertvoll für die Beurteilung der Leistung, wenn es in Ordnung ist, eine Klasse falsch vorherzusagen, eine andere jedoch nicht. Beim Screening auf unheilbare Krankheiten wäre es beispielsweise viel besser, auf falsch positive Ergebnisse zu setzen und die Bilder manuell von einem Arzt überprüfen zu lassen, anstatt einigen Patienten fälschlicherweise Entwarnung zu geben.

Trainieren Sie mit allen Daten

Eine Möglichkeit, mit so vielen Daten wie möglich zu trainieren, ist die Nutzung Kreuzvalidierung, wo wir eine kleine Teilmenge unserer Daten zum Testen nehmen und den Rest für das Training verwenden. Eine häufig verwendete Technik ist k-fach Kreuzvalidierung, bei der der Datensatz unterteilt wird k verschiedene Teilmengen (k kann eine beliebige Anzahl sein, sogar die Anzahl der Instanzen im Datensatz), von denen jede als Testsatz verwendet wird, während der Rest zum Training verwendet wird – der Vorgang wird wiederholt, bis jede Teilmenge zum Testen verwendet wurde, dh k mal.

k-fache Kreuzvalidierung

Tweet-Datenbeispiel

Ich habe ein Beispiel mit dem zusammengestellt natural Javascript-Paket. Es erhält Daten von Twitter, sucht nach 3 verschiedenen Hashtags, trainiert dann ein Modell mit diesen 3 Hashtags als Klassen und bewertet die Leistung des trainierten Modells. Die Ausgabe sieht so aus:

$ node gather.js
Found 93 for #javascript
Found 100 for #clojure
Found 68 for #python $ node train.js
{ positives: 251, negatives: 10 }
Accuracy: 96.17%
Error: 3.83%

Der Code ist auf Github: Klassifikation-js

So einfach ist maschinelles Lernen?!

Nun, nein. Das Beispiel ist wirklich trivial und führt keine Vorverarbeitung der gesammelten Daten durch: Es entfernt nicht das Hashtag, nach dem es gesucht hat, aus dem Text (was bedeutet, dass es wahrscheinlich schwierig wäre, einen Tweet über Python vorherzusagen, der dies nicht getan hat t „#python“ enthalten); es entfernt keine Worte stoppen (Wörter, die keinen wirklichen Mehrwert bringen, wie z a oder das. In der Tat, natural macht das für uns, wenn wir Dokumente zuführen, aber das wussten wir nicht…); es erweitert keine der verkürzten URLs im Text (Learnjavascript.com bedeutet sicherlich mehr als t.co). Wir schauen uns die gesammelten Daten nicht einmal an, bevor wir sie verwenden, um zum Beispiel Worthäufigkeiten grafisch darzustellen, um eine Vorstellung davon zu bekommen, was wir haben: Sprechen einige der „#python“-Tweets von Schlangenliebhabern über ihre Terrarien?

Um Tom Lehrer falsch zu zitieren, ist maschinelles Lernen wie ein Abwasserkanal: Was Sie herausbekommen, hängt davon ab, was Sie hineinstecken.

Einpacken

Das Ziel dieses Artikels war es, einen Überblick darüber zu geben, wie ein maschinelles Lernmodell trainiert wird, um eine Klassifizierungsaufgabe auszuführen. Hoffentlich trägt dies für den Anfänger dazu bei, einige dieser Geheimnisse zu lüften.

Titelbild von:

Similar Posts

Leave a Reply

Your email address will not be published.