Warum ist meine VotingClassifier-Genauigkeit geringer als mein individueller Klassifikator?

8

Ich versuche ein Ensemble von drei Klassifikatoren (Random Forest, Support Vector Machine und XGBoost) mit dem VotingClassifier () in scikit-learn zu erstellen. Ich finde jedoch, dass die Genauigkeit des Ensembles tatsächlich abnimmt anstatt zuzunehmen. Ich kann nicht herausfinden warum.

Hier ist der Code:

%Vor%

Der XGBoost hat die höchste Genauigkeit, also habe ich sogar versucht, ihm mehr Gewicht zu geben, ohne Erfolg.

Was könnte ich falsch machen?

    
sfactor 27.09.2016, 09:20
quelle

1 Antwort

8

VotingClassifiers bieten nicht immer eine bessere Leistung, insbesondere wenn Sie bei schlecht kalibrierten Basismodellen Softvoting verwenden.

Für ein künstliches Beispiel sagen Sie, dass alle Modelle falsch sind, wenn sie falsch sind (sagen Sie eine Wahrscheinlichkeit von .99 für die falsche Klasse), sind aber nur ein wenig richtig, wenn sie richtig sind (sagen Sie eine Wahrscheinlichkeit von .51 für die richtige Klasse). Des Weiteren sagen 'rf' und 'svc' immer dann, wenn 'xgb' falsch ist und umgekehrt und jeder Klassifikator eine Genauigkeit von 50% hat.

Der von Ihnen implementierte Abstimmungsklassifikator würde eine Genauigkeit von 0% haben, da Sie eine weiche Abstimmung verwenden. Hier ist warum:

  1. Fall 1: "xgb" rechts. Dann gibt es eine Wahrscheinlichkeit von 0,51 für die richtige Klasse und bekommt ein Gewicht von 2, für eine Punktzahl von 1,02. Die anderen Modelle geben jedoch jeweils eine Wahrscheinlichkeit von .99 für die falsche Klasse für einen Wert von 1,98 an. Diese Klasse wird von Ihrem Abstimmungsklassifikator ausgewählt.
  2. Fall 2: 'xgb' ist falsch. Dann gibt es eine Wahrscheinlichkeit von 0,99 für die falsche Klasse mit einem Gewicht von 2 für eine Punktzahl von 1,98. Die anderen beiden Modelle geben eine kombinierte Punktzahl von 1,02 für die richtige Klasse. Auch hier wird die falsche Klasse von Ihrem Klassifikator ausgewählt.
scomes 27.09.2016 20:19
quelle