Inkrementelles Lernen für Klassifikationsmodelle in R.

11

Angenommen, ich habe einen Klassifizierer (es kann sich um einen der Standardklassifizierer wie Entscheidungsbaum, zufällige Gesamtstruktur, logistische Regression usw. handeln) zur Betrugserkennung mit dem folgenden Code

library(randomForest)
rfFit = randomForest(Y ~ ., data = myData, ntree = 400) # A very basic classifier 

Say, Y is a binary outcome - Fraud/Not-Fraud

Jetzt habe ich einen unsichtbaren Datensatz vorhergesagt .

pred = predict(rfFit, newData)

Dann habe ich das Feedback des Untersuchungsteams zu meiner Klassifizierung erhalten und festgestellt, dass ich einen Fehler bei der Klassifizierung eines Betrugs als nicht betrügerisch (dh ein falsches Negativ ) gemacht habe . Kann ich meinen Algorithmus trotzdem verstehen lassen, dass er einen Fehler gemacht hat? dh Gibt es eine Möglichkeit, dem Algorithmus eine Rückkopplungsschleife hinzuzufügen, damit die Fehler korrigiert werden können?

Eine Option, die ich mir vorstellen kann, ist, eine zu erstellen, adaboost classifierdamit der neue Klassifikator den Fehler des alten korrigiert. oder ich habe etwas von Incremental Learningoder gehört Online learning. Gibt es bereits Implementierungen (Pakete) in R?

Ist es der richtige Ansatz? oder Gibt es eine andere Möglichkeit, das Modell zu optimieren, anstatt es von Grund auf neu zu erstellen?

Kartheek Palepu
quelle
Haben Sie eine Lösung gefunden? Ich habe das gleiche Problem.
Blu3nx
@ Blu3nx Bitte verwenden Sie keine Antworten zum Kommentieren von Fragen. Antworten sollen sie beantworten.
Tim
Keine Antwort, aber was hindert Sie daran, einfach myData $ Fraud [positionofincorrectvariable] = Correct Value zu verwenden?
Dale C

Antworten:

2

Eine Boosting-Strategie kann die Leistung Ihres Modells verbessern, daher ist es einen Versuch wert. In Bezug auf inkrementelles / Online-Lernen ist mir kein Paket in R bekannt, das es implementiert (andere, bitte korrigieren Sie mich, wenn ich falsch liege). In Scikit Learn gibt es Out-of-Core-Klassifikatoren , die inkrementelles Lernen ermöglichen. Wenn Sie jedoch an die Verwendung von R gebunden sind, haben Sie möglicherweise keine andere Wahl, als Ihr eigenes inkrementelles Modell zu schreiben. In beiden Fällen erhalten Sie möglicherweise einen Eindruck davon, wo Sie anfangen sollen, wenn Sie sich die Out-of-Core-Klassifikatoren von Scikit Learn ansehen.

Ein weiteres zu beachtendes Detail ist das Ausmaß, in dem die Aktualisierung des Modells bei einem einzelnen falsch positiven oder falsch negativen Ergebnis die Leistung des Modells verbessert. Im Bereich Betrug gibt es im Allgemeinen Tausende bis Millionen Mal mehr Fälle von Nichtbetrug als Betrug. Daher ist es wichtig zu versuchen, zu lernen, jede Betrugsinstanz korrekt zu unterscheiden, aber das Aktualisieren eines Modells auf einer einzelnen Betrugsinstanz wird das Modell wahrscheinlich nicht wesentlich ändern. Überlegen Sie sich andere Strategien, um das Modell dazu zu bringen, Betrugsfällen mehr Bedeutung beizumessen.

Die einfachste Möglichkeit, Ihr überwachtes Modell auf der Grundlage des Feedbacks menschlicher Ermittler zu verbessern, besteht darin, ein separates Modell von den korrigierten Instanzen zu erstellen (dh den falsch vorhergesagten Instanzen, die nach ordnungsgemäßer Kennzeichnung erstellt wurden). Sie könnten dann Ihre beiden Modelle über die Klassifizierung zukünftiger Instanzen "abstimmen" lassen, indem Sie ihre vorhergesagten Klassenmitgliedschaften aggregieren. Zum Beispiel ModelA glaubt Instance1 ist [Betrug: 0,65, Nicht Betrug: 0,35], während Modell B glaubt Instance1 ist [Betrug: 0,47, Nicht Betrug: 0,53]. Die Vorhersage des Ensembles wäre somit [Betrug: (0,65 + 0,47) / 2 = 0,56, Nicht-Betrug: (0,35 + 0,53) / 2 = 0,44].

Wenn Ihr ursprüngliches Modell eine bessere Leistung als der Zufall erbringt, ist die Anzahl der korrekt klassifizierten Instanzen größer als die Anzahl der falsch klassifizierten Instanzen. Daher möchten Sie den Modellen nicht das gleiche Gewicht zuweisen, wenn sie auf einer unverhältnismäßig großen Anzahl von Instanzen trainiert werden. Es gibt zwei einfache Optionen, um diese Ungleichheit zu beseitigen: 1) Warten Sie, bis Sie genügend korrigierte Instanzen gesammelt haben, um ungefähr der Anzahl zu entsprechen, auf der das ursprüngliche Modell trainiert wurde, oder 2) Weisen Sie jedem Modell ein Gewicht zu, basierend auf der Leistung des Modells für einen Validierungssatz.

Dirigo
quelle
0

Ich habe in der Vergangenheit einige Nachforschungen über Online- und inkrementelles Lernen angestellt. Es gibt einige Ideen, die Sie berücksichtigen müssen.

Jeder Klassifikator kann inkrementelles Lernen "machen". Das einzige Problem ist, dass es bei einigen viel schwieriger ist, dies zu tun. Es gibt keinen inkrementellen Lernalgorithmus als solchen, sondern nur eine Möglichkeit, diesen Kauf mithilfe der gängigen Algorithmen zu erzielen. Normalerweise würden Sie eine davon auswählen und die Art und Weise anpassen, wie Sie sie trainieren, und die Daten entweder stapelweise oder online eingeben.

Sie haben zwei Möglichkeiten: a) Trainieren Sie das Modell jedes Mal neu, wenn ein neues Muster (oder eine Reihe von Mustern) eintrifft. Dies ist natürlich nicht ideal, aber wenn Ihr Modell nicht zu komplex ist (was bedeutet, dass Sie zwischen den kommenden Instanzen ein ganzes Training durchführen können) und Sie Ihre Datensatzgröße begrenzen (alte Daten, neue Daten oder zufällige Daten verwerfen und eine konstante Anzahl von Trainingsinstanzen beibehalten) ) kann es in einigen Szenarien funktionieren. Ein schönes Beispiel für dieses "pseudo-inkrementelle" Lernen mit Support-Vektor-Maschinen finden Sie hier .

b) Finden Sie eine Möglichkeit, Ihre Modellparameter / -gewichte zu aktualisieren, indem Sie diese Parameter nur ein wenig ändern, wenn die Vorhersage falsch war. Neuronale Netze eignen sich natürlich hervorragend dafür, da Sie ein Modell trainieren, die Gewichte speichern und dann mit neuen Datenmengen stapeln können, sobald sie kommen. Darüber hinaus können Sie die Lernrate anpassen, um Ihren neuen Eingaben mehr oder weniger Relevanz zu verleihen. Wenn Sie einen Algorithmus für Ihren Fall auswählen können, wäre dies meine Wahl. Allerdings gibt es viele andere Methoden: zB in Bayes - Ansätze , die Sie die Verteilungen der Anwendung numerischer Schritten ändern kann / Dekremente auf bestimmte Parameter (siehe dies für ein anderes Beispiel.)

Lesen Sie etwas und suchen Sie nach früheren Ansätzen, die dem Verhalten Ihres Lernalgorithmus entsprechen. Am Anfang mag es entmutigend erscheinen, alles für sich selbst einzurichten, anstatt diese oder jene Bibliothek zu verwenden, aber es wird supercool, wenn Sie an dem Punkt ankommen, an dem Sie sich für den gesamten Lernprozess Ihres Modells verantwortlich fühlen.

Viel Glück!

TitoOrt
quelle