Ich arbeite an einem Mehrklassenproblem mit 9 möglichen Beschriftungen, für die ich einen Datensatz habe, der aus ~ 50.000 Beispielen und ~ 200 Merkmalen besteht. Jedes Beispiel kann nur zu einer Klasse gehören. Die Daten sind zwischen den verschiedenen Bezeichnungen ziemlich ausgewogen.
Aufgrund seiner Robustheit und Skalierbarkeit habe ich mich für Random Forest (mit einem Ensemble von 1000 Bäumen) als Lernmethode entschieden. Um die Leistungsgenauigkeit des Modells anhand dieses Datensatzes zu bewerten, habe ich eine geschichtete 5-fache Kreuzvalidierung verwendet (ich verwende scikit-learn 0.18).
Da Random Forest von Natur aus mit Datensätzen mit mehreren Klassen umgehen kann, habe ich es direkt für den angegebenen Datensatz verwendet und eine Genauigkeit von 79,5 0,3 erhalten. Ich war auch daran interessiert zu wissen, welche Features wichtiger sind, was leicht aus dem Attribut feature_importances_ in RandomForestClassifier von scikit extrahiert werden kann . Da der Datensatz jedoch gut ausbalanciert ist und erwartungsgemäß fast gleich viele der 200 Features zu den verschiedenen Klassen beitragen, konnte ich nicht isolieren, welche Features zu jeder Klasse am meisten beitragen.
Infolgedessen habe ich eine One-versus-All-Strategie mit demselben Random Forest-Setup gewählt (übrigens kostensensitiv, unter Berücksichtigung des Ungleichgewichts der Daten bei Verwendung der oneVsAll-Strategie), die es mir ermöglichte, für jede Klasse versus zu sehen der Rest, welche Funktionen wichtiger sind. Die Ergebnisse, die ich darüber erhalten habe, sind vernünftig. Als ich mir die Leistung des Modells mit dieser Strategie ansah , erhielt ich eine Genauigkeit von 88,7 0,2, was mich überraschte, da ich erwartete, dass Random Forest mit mehreren Klassen aufgrund seiner Mehrklassen-Natur besser klassifizieren würde.
Habe ich recht damit? Könnte ein solcher Unterschied in der Genauigkeit plausibel sein? Ist die oben genannte Strategie in Ordnung und fair, da Random Forest selbst Probleme mit mehreren Klassen ohne "Hacking" wie die oneVsAll-Strategie lösen kann?