Quelle est une bonne ressource qui comprend une comparaison des avantages et des inconvénients des différents classificateurs?


15

Quel est le meilleur classificateur 2 classes prêt à l'emploi? Oui, je suppose que c'est la question à un million de dollars, et oui, je suis conscient du théorème du déjeuner gratuit , et j'ai également lu les questions précédentes:

Pourtant, je suis intéressé à lire plus sur le sujet.

Quelle est une bonne source d'information qui inclut une comparaison générale des caractéristiques, des avantages et des caractéristiques des différents classificateurs?


+ veuillez me pardonner que je ne suis pas un anglophone natif :)
Dov

Réponses:


9

L' ESL , comme déjà mentionné par Peter Flom, est une excellente suggestion (notez que mon lien est vers la page d'accueil de l'auteur où le livre peut être obtenu gratuitement sous forme de fichier pdf). Permettez-moi d'ajouter quelques éléments plus spécifiques à rechercher dans le livre:

  • Le tableau 10.1 (page 351) donne aux auteurs une évaluation de certaines caractéristiques des noyaux neuronaux, SVM, Trees, MARS et k-NN, qui semblent en quelque sorte être les méthodes que les auteurs souhaitent inclure dans une liste de "hors-la- étagères ".
  • Le chapitre 10 traite du boosting, que j'ai trouvé manquant dans la liste des méthodes du sondage cité par l'OP. L'amplification du gradient semble être l'une des méthodes les plus performantes dans un certain nombre d'exemples.
  • Le chapitre 9 traite des modèles additifs généralisés (GAM), ce qui ajoute au modèle de régression logistique (le mieux classé dans le sondage ) la flexibilité des effets additifs non linéaires des prédicteurs. Les GAM ne seraient pas aussi faciles à utiliser que la régression logistique avec tous les paramètres de lissage qui doivent être choisis si ce n'était pour de belles implémentations comme celle du package R mgcv .

Ajoutez au livre la vue des tâches d'apprentissage automatique pour R, qui donne une idée de ce que les nombreux packages d'apprentissage automatique peuvent réellement faire, bien qu'il n'y ait pas de comparaison réelle. Pour les utilisateurs de Python, j'imagine que scikit.learn est un bon endroit pour regarder. La mesure dans laquelle une méthode est «prête à l'emploi» ou «prête à l'emploi» dépend en grande partie de la façon dont la mise en œuvre gère l'adaptation automatique à la situation des données par rapport au fait de laisser le réglage détaillé à l'utilisateur. Dans mon esprit, mgcv pour R est un bon exemple qui rend l'ajustement d'un modèle additif généralisé assez bon vraiment facile et fondamentalement sans que l'utilisateur ait besoin de "régler manuellement" quoi que ce soit.


8

Les ressources énumérées par d'autres sont certainement toutes utiles, mais je vais ajouter et ajouter ce qui suit: le "meilleur" classificateur est susceptible d'être spécifique au contexte et aux données. Lors d'une récente incursion dans l'évaluation de différents classificateurs binaires, j'ai trouvé qu'un arbre de régression boosté fonctionnait toujours mieux que les autres méthodes auxquelles j'avais accès. L'essentiel pour moi a été d'apprendre à utiliser les outils d'exploration de données d' Orange . Ils ont une excellente documentation pour commencer à explorer ces méthodes avec vos données. Par exemple, voici un court script Python que j'ai écrit pour évaluer la qualité de plusieurs classificateurs à travers plusieurs mesures de précision à l'aide de la validation croisée k-fold.

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)

Lorsque j'exécute ce code sur mes données, j'obtiens une sortie comme

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

Vous pouvez faire beaucoup plus avec les objets Orange pour introspecter les performances et faire des comparaisons. J'ai trouvé que ce package était extrêmement utile pour écrire une petite quantité de code pour appliquer réellement des méthodes à mes données avec une API cohérente et une abstraction des problèmes (c'est-à-dire que je n'avais pas besoin d'utiliser six packages différents de six auteurs différents, chacun avec leur propre approche de la conception et de la documentation des API, etc.).




En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.