¿Qué clasificador de aprendizaje automático elegir, en general? [cerrado]

207

Supongamos que estoy trabajando en algún problema de clasificación. (La detección de fraude y comentarios no deseados son dos problemas en los que estoy trabajando en este momento, pero tengo curiosidad sobre cualquier tarea de clasificación en general).

¿Cómo sé qué clasificador debo usar?

  1. Árbol de decisión
  2. SVM
  3. Bayesiano
  4. Red neuronal
  5. K-vecinos más cercanos
  6. Q-learning
  7. Algoritmo genético
  8. Procesos de decisión de Markov
  9. Redes neuronales convolucionales
  10. Regresión lineal o regresión logística.
  11. Impulso, ensacado, ensamble
  12. Escalada aleatoria o recocido simulado
  13. ...

¿En qué casos es una de estas la primera opción "natural", y cuáles son los principios para elegirla?

Ejemplos del tipo de respuestas que estoy buscando (del libro Introducción a la recuperación de información de Manning et al. ):

a. Si sus datos están etiquetados, pero solo tiene una cantidad limitada, debe usar un clasificador con alto sesgo (por ejemplo, Naive Bayes) .

Supongo que esto se debe a que un clasificador de mayor sesgo tendrá una varianza más baja, lo cual es bueno debido a la pequeña cantidad de datos.

si. Si tiene una tonelada de datos, entonces el clasificador realmente no importa tanto, por lo que probablemente debería elegir un clasificador con buena escalabilidad.

  1. ¿Cuáles son otras pautas? Incluso las respuestas como "si tendrá que explicar su modelo a alguna persona de la alta gerencia, entonces tal vez debería usar un árbol de decisión, ya que las reglas de decisión son bastante transparentes" son buenas. Sin embargo, me importan menos los problemas de implementación / biblioteca.

  2. Además, para una pregunta un tanto separada, además de los clasificadores Bayesianos estándar, ¿existen métodos 'estándar de vanguardia' para la detección de comentarios no deseados (a diferencia del correo no deseado)?

LM.
fuente
77
En respuesta a su "mejor lugar para hacer esta pregunta", también puede probar stats.stackexchange.com
jxramos

Respuestas:

94

ingrese la descripción de la imagen aquí

En primer lugar, debe identificar su problema. Depende de qué tipo de datos tiene y cuál es su tarea deseada.

Si usted es Predicting Category:

  • Tienes Labeled Data
    • Necesitas seguir Classification Approachy sus algoritmos
  • No tienes Labeled Data
    • Necesitas ir por Clustering Approach

Si usted es Predicting Quantity:

  • Necesitas ir por Regression Approach

De otra manera

  • Puedes ir por Dimensionality Reduction Approach

Hay diferentes algoritmos dentro de cada enfoque mencionado anteriormente. La elección de un algoritmo particular depende del tamaño del conjunto de datos.

Fuente: http://scikit-learn.org/stable/tutorial/machine_learning_map/

Mukesh Chapagain
fuente
60

La selección del modelo mediante validación cruzada puede ser lo que necesita.

Validación cruzada

Lo que debe hacer es simplemente dividir su conjunto de datos en k subconjuntos no superpuestos (pliegues), entrenar un modelo usando k-1 pliegues y predecir su rendimiento usando el pliegue que dejó fuera. Esto lo haces para cada combinación posible de pliegues (primero deja el primer pliegue, luego el segundo, ..., luego el kth y entrena con los pliegues restantes). Después de terminar, estima el rendimiento medio de todos los pliegues (quizás también la varianza / desviación estándar del rendimiento).

Cómo elegir el parámetro k depende del tiempo que tenga. Los valores habituales para k son 3, 5, 10 o incluso N, donde N es el tamaño de sus datos (eso es lo mismo que la validación cruzada de dejar uno fuera ). Prefiero 5 o 10.

Selección de modelo

Digamos que tiene 5 métodos (ANN, SVM, KNN, etc.) y 10 combinaciones de parámetros para cada método (dependiendo del método). Simplemente tiene que ejecutar la validación cruzada para cada combinación de método y parámetro (5 * 10 = 50) y seleccionar el mejor modelo, método y parámetros. Luego vuelves a entrenar con el mejor método y parámetros en todos tus datos y tienes tu modelo final.

Hay algunas cosas más que decir. Si, por ejemplo, usa muchos métodos y combinaciones de parámetros para cada uno, es muy probable que se sobreajuste. En casos como estos, debe usar la validación cruzada anidada .

Validación cruzada anidada

En la validación cruzada anidada , realiza la validación cruzada en el algoritmo de selección de modelo.

Nuevamente, primero divide sus datos en k pliegues. Después de cada paso, elige k-1 como sus datos de entrenamiento y el restante como sus datos de prueba. Luego ejecuta la selección de modelo (el procedimiento que expliqué anteriormente) para cada combinación posible de esos k pliegues. Después de terminar esto, tendrá k modelos, uno para cada combinación de pliegues. Después de eso, prueba cada modelo con los datos de prueba restantes y elige el mejor. Una vez más, después de tener el último modelo, entrena uno nuevo con el mismo método y parámetros en todos los datos que tiene. Ese es tu modelo final.

Por supuesto, hay muchas variaciones de estos métodos y otras cosas que no mencioné. Si necesita más información sobre estos, busque algunas publicaciones sobre estos temas.

Jorge
fuente
55
Sí, sé acerca de la validación cruzada: me preguntaba más sobre las razones a priori para seleccionar un determinado clasificador (y luego podría usar la validación cruzada para ajustar algunos parámetros o para seleccionar entre un conjunto más pequeño de clasificadores). Gracias, sin embargo!
LM.
45

El libro " OpenCV " tiene dos grandes páginas sobre esto en las páginas 462-463 . Si busca en la vista previa de Amazon la palabra "discriminativo" (probablemente también en google books), podrá ver las páginas en cuestión. Estas dos páginas son la gema más grande que he encontrado en este libro.

En breve:

  • Impulso : a menudo efectivo cuando hay una gran cantidad de datos de entrenamiento disponibles.

  • Árboles aleatorios : a menudo muy efectivos y también pueden realizar regresión .

  • Vecinos K más cercanos : la cosa más simple que puede hacer, a menudo efectiva pero lenta y requiere mucha memoria .

  • Redes neuronales : lento para entrenar pero muy rápido para ejecutar , aún con un rendimiento óptimo para el reconocimiento de letras .

  • SVM : entre los mejores con datos limitados , pero perdiendo contra árboles de impulso o aleatorios solo cuando hay grandes conjuntos de datos disponibles.


fuente
39

Las cosas que podría considerar al elegir qué algoritmo usar incluirían:

  1. ¿Necesita entrenar de forma incremental (en lugar de en lotes)?

    Si necesita actualizar su clasificador con nuevos datos con frecuencia (o tiene toneladas de datos), probablemente quiera usar Bayesian. Las redes neuronales y SVM necesitan trabajar en los datos de entrenamiento de una vez.

  2. ¿Sus datos están compuestos solo de categóricos , numéricos o ambos ?

    Creo que Bayesian funciona mejor con datos categóricos / binomiales. Los árboles de decisión no pueden predecir valores numéricos.

  3. ¿Tú o tu audiencia necesitan entender cómo funciona el clasificador?

    Use árboles bayesianos o de decisión, ya que pueden explicarse fácilmente a la mayoría de las personas. Las redes neuronales y SVM son "cajas negras" en el sentido de que realmente no se puede ver cómo clasifican los datos.

  4. ¿Cuánta velocidad de clasificación necesitas?

    Los SVM son rápidos cuando se trata de clasificar, ya que solo necesitan determinar en qué lado de la "línea" se encuentran sus datos. Los árboles de decisión pueden ser lentos, especialmente cuando son complejos (por ejemplo, muchas ramas).

  5. Complejidad .

    Las redes neuronales y las SVM pueden manejar la clasificación no lineal compleja.

RPVC
fuente
2
Este capítulo del libro puede proporcionar más información sobre la complejidad nlp.stanford.edu/IR-book/html/htmledition/…
supermus
31

Como dice a menudo el profesor Andrew Ng: siempre comience implementando un algoritmo aproximado y sucio, y luego refínelo iterativamente .

Para la clasificación, Naive Bayes es un buen comienzo, ya que tiene un buen rendimiento, es altamente escalable y puede adaptarse a casi cualquier tipo de tarea de clasificación. También 1NN ( Vecinos K-Nearest con solo 1 vecino) es un algoritmo de mejor ajuste sin problemas (porque los datos serán el modelo, y por lo tanto no tiene que preocuparse por el ajuste de dimensionalidad de su límite de decisión), el único El problema es el costo de cálculo (cuadrático porque necesita calcular la matriz de distancia, por lo que puede no ser un buen ajuste para datos de alta dimensión).

Otro buen algoritmo de inicio son los bosques aleatorios (compuestos de árboles de decisión), esto es altamente escalable a cualquier número de dimensiones y generalmente tiene un rendimiento bastante aceptable. Luego, finalmente, hay algoritmos genéticos , que se adaptan admirablemente a cualquier dimensión y a cualquier dato con un conocimiento mínimo de los datos en sí, siendo la implementación más simple y mínima el algoritmo genético microbiano (¡solo una línea de código C! Por Inman Harvey en 1996), y uno de los más complejos es CMA-ES y MOGA / e-MOEA.

Y recuerde que, a menudo, no puede saber realmente qué funcionará mejor en sus datos antes de probar los algoritmos de verdad.

Como nota al margen, si desea un marco teórico para probar su hipótesis y algoritmos de rendimiento teórico para un problema determinado, puede usar el marco de aprendizaje PAC (Probablemente aproximadamente correcto) (cuidado: ¡es muy abstracto y complejo!), Pero para En resumen, la esencia del aprendizaje PAC dice que debe usar el algoritmo menos complejo, pero lo suficientemente complejo (la complejidad es la dimensionalidad máxima que puede ajustarse al algo) que puede adaptarse a sus datos. En otras palabras, usa la navaja de Occam.

gaborous
fuente
11

Sam Roweis solía decir que deberías probar Bayes ingenuo, regresión logística, vecino k-más cercano y discriminante lineal de Fisher antes que nada.

bayer
fuente
8

Mi opinión es que siempre ejecutas los clasificadores básicos primero para tener una idea de tus datos. La mayoría de las veces (al menos en mi experiencia) han sido lo suficientemente buenos.

Entonces, si tiene datos supervisados, entrene a un clasificador Naive Bayes. Si tiene datos sin supervisión, puede probar la agrupación de k-means.

Otro recurso es uno de los videos de la serie de videos Stanford Machine Learning , que vi hace un tiempo. Creo que en el video 4 o 5, el profesor discute algunas convenciones generalmente aceptadas al entrenar clasificadores, ventajas / compensaciones, etc.

adúrico
fuente
1
El teorema "Sin almuerzo gratis" establece que no existe un modelo único que funcione mejor para cada problema. Las suposiciones de un gran modelo para un problema pueden no ser válidas para otro problema, por lo que es común en el aprendizaje automático probar varios modelos y encontrar uno que funcione mejor para un problema en particular.
msarafzadeh
5

Siempre debe tener en cuenta el equilibrio entre inferencia y predicción .

Si desea comprender la compleja relación que se está produciendo en sus datos, debe utilizar un algoritmo de inferencia rico (p. Ej., Regresión lineal o lazo). Por otro lado, si solo le interesa el resultado, puede utilizar algoritmos de alta dimensión y más complejos (pero menos interpretables), como las redes neuronales.

Juan Camilo Zapata
fuente
3

La selección del algoritmo depende del escenario y del tipo y tamaño del conjunto de datos. Hay muchos otros factores.

Esta es una breve hoja de trucos para el aprendizaje automático básico.

Aquí puede validar su escenario con una simple hoja de trucos

sarath sahadevan
fuente
-2

En primer lugar, depende del tipo de problema con el que estés lidiando, ya sea clasificación o regresión. Luego elige tu modelo sabiamente. Depende de un modelo en particular, un modelo específico supera a otros modelos. Supongamos que está trabajando en wine_dataset de la biblioteca sklearn y primero trató de entrenar los datos con kernel svm con lineal y obtiene algún tipo de precisión y luego cree que no es satisfactorio, entonces trató de entrenar sus datos con DecisionTreeClassifier () y luego intentaste con RandomForestClassifier (). Después de eso, la precisión será mejor o puede decir que se ajusta a sus datos, puede concluir eso. Hay una pequeña diferencia sintáctica que encontrarás mientras sigues cambiando el modelo para probar. Así que todo lo mejor y entender bien el problema.

Sarthak Dalabehera
fuente
1
La pregunta de OP (pósters originales) fue: ¿Cómo sé qué clasificador debo usar? Lo que concluye que están buscando un Algoritmo de Clasificación . Realmente lea detenidamente la pregunta antes de responder.
Vetrivel PS