Wie werden Klassifikationen in einem Ensemble-Klassifikator zusammengeführt?


8

Wie verschmilzt ein Ensemble-Klassifikator die Vorhersagen seiner konstituierenden Klassifikatoren? Ich habe Schwierigkeiten, eine klare Beschreibung zu finden. In einigen Codebeispielen, die ich gefunden habe, mittelt das Ensemble nur die Vorhersagen, aber ich sehe nicht, wie dies zu einer "besseren" Gesamtgenauigkeit führen könnte.

Betrachten Sie den folgenden Fall. Ein Ensemble-Klassifikator besteht aus 10 Klassifikatoren. Ein Klassifikator hat eine Genauigkeit von 100% der Zeit in der Datenuntermenge X und 0% aller anderen Zeiten. Alle anderen Klassifizierer haben eine Genauigkeit von 0% in der Datenuntermenge X und 100% in allen anderen Zeiten.

Bei Verwendung einer Mittelungsformel, bei der die Genauigkeit des Klassifikators ignoriert wird, hätte der Ensemble-Klassifikator bestenfalls eine Genauigkeit von 50%. Ist das richtig oder fehlt mir etwas? Wie kann die durchschnittliche Vorhersage von N potenziell ahnungslosen Klassifikatoren möglicherweise zu einer besseren Vorhersage führen als ein einzelner Klassifikator, der ein Experte in einem bestimmten Bereich ist?

Antworten:


5

Ich habe ein klares Beispiel aus Introduction to Data Mining von Tan et al.

Das Beispiel besagt, dass Sie eine bessere Leistung erzielen, wenn Sie Ihre Klassifizierer mit einem Abstimmungssystem kombinieren, dh einen Datensatz mit der am meisten bewerteten Klasse klassifizieren. In diesem Beispiel wird jedoch direkt die Ausgabebezeichnung von Klassifizierern verwendet und nicht die Vorhersagen (ich denke, Sie haben Wahrscheinlichkeiten gemeint).

Lassen Sie uns 25 unabhängige Klassifikatoren mit dem Generalisierungsfehler . Um einen Datensatz falsch zu klassifizieren, muss mindestens die Hälfte von ihnen ihn falsch klassifizieren.e=1accuracy=0.35

Alles kann mit Zufallsvariablen modelliert werden, aber Sie müssen nur die Wahrscheinlichkeit berechnen, dass mindestens 13 von ihnen den Datensatz falsch klassifizieren wobei jeder Term der Summation bedeutet, dass der Klassifikator die Datensatzklasse korrekt und falsch versteht.i25-i

i=1325(25i)ei(1e)(25i)=0.06
i25i

Wenn ich direkte Vorhersagen verwende und als Kombinationsmethode einen Durchschnitt verwende, könnte es meiner Meinung nach etwas schwieriger sein, die Verbesserung der Ensemble-Performance zu zeigen. Wenn man sich jedoch nur auf Vorhersagen konzentriert und sich nicht um das Ausgabeetikett des Ensembles kümmert, kann die Mittelung von mehr Vorhersagen als Schätzer der realen Wahrscheinlichkeit angesehen werden. Das Hinzufügen von Klassifikatoren sollte daher die Vorhersagen der Ensemble-Technik verbessern.


1
Dies ist eine großartige Möglichkeit zu verstehen, warum das Ensemble funktioniert. Der konkrete Fall dürfte jedoch im Hinblick auf eine verbesserte Leistung zu optimistisch sein. Dies ist grundlegend. Jeder Klassifikator wird (normalerweise) auf denselben Daten trainiert, was die Unabhängigkeit der Klassifikatoren fraglich macht.
Wahrscheinlichkeitslogik

Natürlich ist die Unabhängigkeit eine zu starke Hypothese.
Simone

5

Sie vermissen die Tatsache, dass "schlechte" Klassifikatoren keine Genauigkeit von 0% haben, sondern nicht wesentlich besser als eine zufällige Vermutung.

Auf diese Weise sind gute Vorhersagen immer gleich und häufen sich (da die Wahrheit nur eine ist), während schlechte Vorhersagen zufälliges Rauschen sind, das sich herausmittelt.


Es ist nicht so, dass ein Klassifikator insgesamt "schlecht" oder "gut" ist. Ich spreche über die Genauigkeit jedes Klassifikators in bestimmten Bereichen. Wenn ein Klassifikator in einer bestimmten Domäne perfekt ist, kann die Aufnahme in ein Ensemble möglicherweise seine Nützlichkeit beeinträchtigen, da alle anderen Klassifikatoren möglicherweise schlechte Klassifikationen vornehmen.
Cerin

1
Wenn Sie keine perfekten Widersprüche haben (die in realen, verwendbaren Daten fast nicht vorhanden sind), ändern Domänen nichts, da der Klassifizierer auch Rauschen anstelle einer ausschließlich schlechten Klasse für Objekte außerhalb seiner Domäne erzeugen sollte - auf diese Weise werden nur verschiedene Teilklassifizierer " gut "in jeder der Domänen. Wie auch immer, es ist offensichtlich, dass ein scharfes, perfektes Signal durch das Rauschen zum Schweigen gebracht wird (hoffentlich nicht vollständig), aber dies ist der Kompromiss, wenn keine Informationen darüber vorliegen, welche Teilklassifizierer für welche Objekte funktionieren.

Mein Punkt ist, dass es unwahrscheinlich ist, dass Sie eine bessere Vorhersage erhalten, wenn Sie einen großartigen Klassifikator nehmen und dessen Vorhersage mit schlechten Klassifikatoren mitteln. Sie verwässern Ihre gute Vorhersage.
Cerin

@chriss - Normalerweise gewichten Sie jeden Klassifikator im Durchschnitt entsprechend seiner Leistung. In diesem Schema wird ein großer Klassifikator nur von anderen großen Klassifikatoren verdünnt. Mistklassifikatoren haben ein geringes Gewicht (normalerweise exponentiell niedrig) und werden daher nicht verdünnt.
Wahrscheinlichkeitslogik

@ChisS Sie haben vollkommen recht - der Punkt des Ensembles ist, dass Sie nicht für jedes Objekt den besten Klassifikator auswählen können, sodass Sie im Durchschnitt eine vernünftige Lösung für eine gewisse Signaldämpfung durch Rauschen und das Risiko einer Katastrophe mit Korrelationsbasis-Klassifikatoren handeln.

0

Im Falle einer Klassifizierung gibt es im Allgemeinen zwei Möglichkeiten, die Vorhersage zusammenzustellen. Nehmen wir an, es handelt sich um ein Problem bei der Klassifizierung von Binärklassen, und Sie müssen drei Modelle mit den Namen m1, m2 und m3 zusammenstellen. Der Trainingsdatensatz heißt Zug- und Testdatensatz mit dem Namen test. Die Modelle basieren bereits auf train. Dann lautet der Python-Code wie folgt.

Die erste Methode besteht darin, eine Runde des Durchschnitts zu ziehen

pred=round([m1.predict(test)+m2.predict(test)+m3.predict(test)]/3) 

Die Ausgabe ist also ein Vektor mit den Werten 0 und 1

Die zweite Methode besteht darin, die Vorhersagewahrscheinlichkeit jeder Klasse aus diesen Modellen zusammenzustellen und diese zusammenzustellen und dann die Klasse entweder auf der Grundlage einer harten Schwelle oder einer Logik zu bestimmen.

pred_proba=[m1.predict(test).predict_proba++ m2.predict(test).predict_proba 
+m3.predict(test).predict_proba]/3 
# Simple average ensemble,however you can try weighted average as well

Durchlaufen Sie den gesamten pred_proba-Vektor, um herauszufinden, welcher in 0 und welcher 1 1 ist, basierend auf der harten Schwelle 0,5

pred=[] # Initialize a blank list for prediction

for x in pred_proba:
 if x>0.5:
   pred.append[1]
 else:
   pred.append[0]

Pred ist also die endgültige Vorhersage des Ensembles.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.