Was ist eine gute Ressource, die einen Vergleich der Vor- und Nachteile verschiedener Klassifikatoren beinhaltet?

15

Was ist der beste 2-Klassen-Klassifikator? Ja, ich denke, das ist die Millionen-Dollar-Frage, und ja, mir ist das No-Free-Lunch-Theorem bekannt , und ich habe auch die vorherigen Fragen gelesen:

Dennoch bin ich daran interessiert, mehr zu diesem Thema zu lesen.

Was ist eine gute Informationsquelle, die einen allgemeinen Vergleich der Merkmale, Vorteile und Merkmale verschiedener Klassifikatoren beinhaltet?

Dov
quelle
+ bitte verzeihen Sie mir, dass ich kein englischer Muttersprachler bin :)
Dov

Antworten:

9

Die ESL , wie bereits von Peter Flom erwähnt, ist ein ausgezeichneter Vorschlag (beachten Sie, dass mein Link zur Homepage des Autors führt, auf der das Buch als PDF-Datei kostenlos erhältlich ist). Lassen Sie mich ein paar spezifischere Dinge hinzufügen, nach denen Sie im Buch suchen sollten:

  • Tabelle 10.1 (Seite 351) gibt den Autoren einen Überblick über bestimmte Merkmale von Neuronalen Netzen, SVM-, Trees-, MARS- und k-NN-Kerneln, die scheinbar die Methoden sind, die die Autoren in eine Liste von "off-the-the-the- Regal "Methoden.
  • Kapitel 10 befasst sich mit Boosting, das ich in der Liste der Methoden in der vom OP zitierten Umfrage als fehlend befunden habe . Gradient Boosting scheint in einer Reihe von Beispielen eine der leistungsstärksten Methoden zu sein.
  • Kapitel 9 befasst sich mit generalisierten additiven Modellen (GAMs), die dem logistischen Regressionsmodell (in der Umfrage an erster Stelle) die Flexibilität nichtlinearer additiver Effekte der Prädiktoren hinzufügen . GAMs wären nicht annähernd so einfach zu verwenden wie logistische Regressionen mit allen zu wählenden Glättungsparametern, wenn es keine netten Implementierungen wie die im R-Paket mgcv gäbe .

Fügen Sie dem Buch die Task-Ansicht für maschinelles Lernen für R hinzu, die einen Eindruck davon gibt, was die vielen maschinellen Lernpakete tatsächlich leisten können, obwohl es keinen wirklichen Vergleich gibt. Für Python-Benutzer stelle ich mir vor, dass scikit.learn ein guter Ort zum Anschauen ist. Wie viel "out-of-the-box" oder "off-the-shelf" eine Methode ist, hängt sehr stark davon ab, wie gut sich die Implementierung mit der automatischen Anpassung an die Datensituation auseinandersetzt, anstatt die detaillierte Abstimmung dem Benutzer zu überlassen. In meinen Augen ist mgcv für R ein gutes Beispiel, das die Anpassung eines einigermaßen guten verallgemeinerten additiven Modells wirklich einfach macht, ohne dass der Benutzer irgendetwas von Hand einstellen muss.

NRH
quelle
8

Die von anderen aufgelisteten Ressourcen sind sicherlich alle nützlich, aber ich werde Folgendes hinzufügen: Der "beste" Klassifikator ist wahrscheinlich kontext- und datenspezifisch. Bei einem kürzlich durchgeführten Versuch, verschiedene binäre Klassifikatoren zu bewerten, stellte ich fest, dass ein Boosted Regression Tree durchgehend besser funktioniert als andere Methoden, auf die ich Zugriff hatte. Das Wichtigste für mich war, den Umgang mit den Data Mining-Tools von Orange zu lernen . Sie haben einige großartige Dokumentationen, mit denen Sie beginnen können, diese Methoden mit Ihren Daten zu erkunden . Zum Beispiel ist hier ein kurzes Python-Skript, das ich geschrieben habe, um die Qualität mehrerer Klassifikatoren über mehrere Genauigkeitsmaße hinweg mithilfe der k-fachen Kreuzvalidierung zu bewerten.

import orange, orngTest, orngStat, orngTree , orngEnsemble, orngSVM, orngLR
import numpy as np

data = orange.ExampleTable("performance_orange_2.tab")
bayes = orange.BayesLearner(name="Naive Bayes")
svm = orngSVM.SVMLearner(name="SVM")
tree = orngTree.TreeLearner(mForPruning=2, name="Regression Tree")
bs = orngEnsemble.BoostedLearner(tree, name="Boosted Tree")
bg = orngEnsemble.BaggedLearner(tree, name="Bagged Tree")
forest = orngEnsemble.RandomForestLearner(trees=100, name="Random Forest")
learners = [bayes, svm, tree, bs, bg, forest]
results = orngTest.crossValidation(learners, data, folds=10)
cm = orngStat.computeConfusionMatrices(results,
                             classIndex=data.domain.classVar.values.index('1'))

stat = (('ClsAcc', 'CA(results)'),
        ('Sens', 'sens(cm)'),
        ('Spec', 'spec(cm)'),
        ('AUC', 'AUC(results)'),
        ('Info', 'IS(results)'),
        ('Brier', 'BrierScore(results)'))
scores = [eval("orngStat." + s[1]) for s in stat]
print "Learner        " + "".join(["%-9s" % s[0] for s in stat])
print "-----------------------------------------------------------------"
for (i, L) in enumerate(learners):
    print "%-15s " % L.name + "".join(["%5.3f   " % s[i] for s in scores])

print "\n\n"
measure = orngEnsemble.MeasureAttribute_randomForests(trees=100)
print "Random Forest Variable Importance"
print "---------------------------------"
imps = measure.importances(data)
for i,imp in enumerate(imps):
    print "%-20s %6.2f" % (data.domain.attributes[i].name, imp)

print '\n\n'
print 'Predictions on new data...'
bs_classifier = bs(data)
new_data = orange.ExampleTable('performance_orange_new.tab')
for obs in new_data:
    print bs_classifier(obs, orange.GetBoth)

Wenn ich diesen Code auf meinen Daten ausführe, erhalte ich eine Ausgabe wie

In [1]: %run binary_predict.py
Learner        ClsAcc   Sens     Spec     AUC      Info     Brier
-----------------------------------------------------------------
Naive Bayes     0.556   0.444   0.643   0.756   0.516   0.613
SVM             0.611   0.667   0.714   0.851   0.264   0.582
Regression Tree 0.736   0.778   0.786   0.836   0.945   0.527
Boosted Tree    0.778   0.778   0.857   0.911   1.074   0.444
Bagged Tree     0.653   0.667   0.786   0.816   0.564   0.547
Random Forest   0.736   0.667   0.929   0.940   0.455   0.512


Random Forest Variable Importance
---------------------------------
Mileage            2.34
Trade_Area_QI      2.82
Site_Score         8.76

Mit den Orange-Objekten können Sie noch viel mehr tun, um die Leistung zu überprüfen und Vergleiche anzustellen. Ich fand dieses Paket äußerst hilfreich beim Schreiben einer kleinen Menge an Code, um Methoden mit einer konsistenten API und Problemabstraktion auf meine Daten anzuwenden (dh ich musste nicht sechs verschiedene Pakete von sechs verschiedenen Autoren verwenden, die jeweils ihre eigenen haben Ansatz für API-Design und -Dokumentation usw.).

Josh Hemann
quelle
1

Laut dieser umfassenden aktuellen Studie (Auswertung von 179 Klassifikatoren in 121 Datensätzen) sind die besten Klassifikatoren zufällige Gesamtstrukturen, gefolgt von Support-Vektor-Maschinen.

Miroslav Sabo
quelle