Qual è una buona risorsa che include un confronto tra pro e contro di diversi classificatori?


15

Qual è il miglior classificatore di classe 2 pronto all'uso? Sì, immagino sia la domanda da un milione di dollari, e sì, sono consapevole del teorema del pranzo libero e ho anche letto le domande precedenti:

Tuttavia, sono interessato a leggere di più sull'argomento.

Qual è una buona fonte di informazioni che include un confronto generale delle caratteristiche, dei vantaggi e delle caratteristiche dei diversi classificatori?


+ Per favore perdonami che non sono un madrelingua inglese :)
Dov

Risposte:


9

L' ESL , come già menzionato da Peter Flom, è un eccellente suggerimento (nota che il mio link è alla homepage dell'autore dove il libro può essere ottenuto gratuitamente come file pdf). Vorrei aggiungere un paio di cose più specifiche da cercare nel libro:

  • La Tabella 10.1 (pagina 351) fornisce agli autori la valutazione di alcune caratteristiche di reti neurali, SVM, alberi, MARS e kernel k-NN, che in qualche modo sembrano essere i metodi che gli autori vogliono includere in un elenco di "off-the- metodi "scaffale".
  • Il capitolo 10 tratta il potenziamento, che ho trovato mancante nell'elenco dei metodi nel sondaggio citato dal PO. L'aumento del gradiente sembra essere uno dei metodi con le migliori prestazioni in numerosi esempi.
  • Il capitolo 9 tratta i modelli di additivi generalizzati (GAM), che aggiungono al modello di regressione logistica (primo classificato nel sondaggio ) la flessibilità degli effetti additivi non lineari dei predittori. I GAM non sarebbero così facili da usare come la regressione logistica con tutti i parametri di smoothing che devono essere scelti se non fosse per buone implementazioni come quella nel pacchetto R mgcv .

Aggiungi al libro la Vista attività di apprendimento automatico per R, che dà un'idea di ciò che i numerosi pacchetti di apprendimento automatico possono effettivamente fare, anche se non esiste un vero confronto. Per gli utenti di Python immagino che scikit.learn sia un buon posto dove cercare. Quanto sia un metodo "out-of-the-box" o "out-of-the-shelf" è molto determinato da quanto bene l'implementazione gestisce l'adattamento automatico alla situazione dei dati piuttosto che lasciare l'ottimizzazione dettagliata per l'utente. Nella mia mente, mgcv per R è un buon esempio che rende davvero semplice e fondamentalmente adattamento di un modello di additivo generalizzato abbastanza buono senza che l'utente debba "mettere a punto" nulla.


8

Le risorse elencate da altri sono sicuramente utili, ma inserirò e aggiungerò quanto segue: è probabile che il classificatore "migliore" sia specifico per contesto e dati. In una recente incursione nella valutazione di diversi classificatori binari ho scoperto che un albero di regressione potenziato funziona in modo coerente meglio di altri metodi a cui ho avuto accesso. La cosa fondamentale per me era imparare come usare gli strumenti di data mining di Orange . Hanno un'ottima documentazione per iniziare a esplorare questi metodi con i tuoi dati. Ad esempio, ecco un breve script di Python che ho scritto per valutare la qualità di più classificatori attraverso più misure di accuratezza usando la validazione incrociata di 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)

Quando eseguo questo codice sui miei dati ottengo un output simile

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

C'è molto di più che puoi fare con gli oggetti Orange per prestazioni introspettive e confronti. Ho trovato questo pacchetto estremamente utile per scrivere una piccola quantità di codice per applicare effettivamente i metodi ai miei dati con un'API coerente e l'astrazione del problema (cioè, non avevo bisogno di usare sei pacchetti diversi di sei autori diversi, ognuno con il proprio approccio alla progettazione e documentazione API, ecc.).




Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.