¿Cuál es un buen recurso que incluye una comparación de los pros y los contras de los diferentes clasificadores?

15

¿Cuál es el mejor clasificador de 2 clases listo para usar? Sí, supongo que esa es la pregunta del millón de dólares, y sí, soy consciente del teorema de no almuerzo gratis , y también he leído las preguntas anteriores:

Aún así, estoy interesado en leer más sobre el tema.

¿Cuál es una buena fuente de información que incluye una comparación general de las características, ventajas y características de los diferentes clasificadores?

Dov
fuente
+ por favor perdóname porque no soy un hablante nativo de inglés :)
Dov

Respuestas:

9

El ESL , como ya lo mencionó Peter Flom, es una excelente sugerencia (tenga en cuenta que mi enlace está en la página de inicio del autor donde se puede obtener el libro como un archivo pdf de forma gratuita). Permítanme agregar un par de cosas más específicas para buscar en el libro:

  • La Tabla 10.1 (página 351) ofrece a los autores una evaluación de ciertas características de las redes neuronales, SVM, árboles, MARS y núcleos k-NN, que de alguna manera parecen ser los métodos que los autores quieren incluir en una lista de "estante".
  • El capítulo 10 trata el impulso, que me pareció que faltaba en la lista de métodos en la encuesta citada por el OP. El aumento de gradiente parece ser uno de los mejores métodos de rendimiento en una serie de ejemplos.
  • El Capítulo 9 trata los modelos aditivos generalizados (GAM), que agrega al modelo de regresión logística (mejor clasificado en la encuesta ) la flexibilidad de los efectos aditivos no lineales de los predictores. Los GAM no serían tan fáciles de usar como la regresión logística con todos los parámetros de suavizado que deben elegirse si no fuera por implementaciones agradables como la del paquete R mgcv .

Agregue al libro la Vista de tareas de aprendizaje automático para R, que da una idea de lo que realmente pueden hacer los muchos paquetes de aprendizaje automático, aunque no hay una comparación real. Para los usuarios de Python, imagino que scikit.learn es un buen lugar para buscar. Qué tan "listo para usar" o "listo para usar" es un método, depende en gran medida de qué tan bien la implementación maneje la adaptación automática a la situación de los datos en lugar de dejar la sintonización detallada para el usuario. En mi opinión, mgcv para R es un buen ejemplo que hace que la instalación de un modelo de aditivo generalizado razonablemente bueno sea realmente fácil y básicamente sin necesidad de que el usuario "ajuste manualmente" nada.

NRH
fuente
8

Los recursos enumerados por otros son ciertamente útiles, pero añadiré lo siguiente: es probable que el "mejor" clasificador sea específico para el contexto y los datos. En una reciente incursión en la evaluación de diferentes clasificadores binarios, encontré que un Árbol de regresión potenciado funcionaba de manera consistente mejor que otros métodos a los que tenía acceso. Lo clave para mí fue aprender a usar las herramientas de minería de datos de Orange . Tienen una excelente documentación para comenzar a explorar estos métodos con sus datos. Por ejemplo, aquí hay un breve script de Python que escribí para evaluar la calidad de múltiples clasificadores a través de múltiples medidas de precisión utilizando la validación cruzada 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)

Cuando ejecuto este código en mis datos obtengo resultados como

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

Hay mucho más que puedes hacer con los objetos Orange para introspectar el rendimiento y hacer comparaciones. Encontré que este paquete era extremadamente útil para escribir una pequeña cantidad de código para aplicar métodos a mis datos con una API consistente y abstracción del problema (es decir, no necesitaba usar seis paquetes diferentes de seis autores diferentes, cada uno con sus propios enfoque al diseño y documentación de API, etc.

Josh Hemann
fuente
1

Según este exhaustivo estudio reciente (evaluación de 179 clasificadores en 121 conjuntos de datos), los mejores clasificadores son bosques aleatorios seguidos de máquinas de vectores de soporte.

Miroslav Sabo
fuente