supervisado maquinas machine learning las inteligencia google ejemplos como automático artificial aprendizaje aprender aprenden algoritmos machine-learning

machine-learning - maquinas - machine learning ejemplos



¿Qué clasificador de aprendizaje automático elegir, en general? (8)

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

Para la clasificación, Naive Bayes es un buen abridor, ya que tiene buenas actuaciones, es altamente escalable y puede adaptarse a casi cualquier tipo de tarea de clasificación. Además, 1NN (K Vecinos más cercanos con solo 1 vecino) es un algoritmo de ajuste óptimo sin complicaciones (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 adecuado para datos de gran dimensión).

Otro buen algoritmo de inicio es el de los Bosques Aleatorios (compuestos por árboles de decisión), que es altamente escalable para cualquier cantidad de dimensiones y en general tiene un rendimiento bastante aceptable. Finalmente, existen 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 de 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 manera real.

Como nota al margen, si quiere 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) (tenga cuidado: ¡es muy abstracto y complejo!), Pero En resumen, la esencia del aprendizaje PAC dice que debe usar el algoritmo menos complejo, pero lo suficientemente complejo (la complejidad es la máxima dimensionalidad que el algoritmo puede ajustar) que se ajuste a sus datos. En otras palabras, use la navaja de Occam.

Supongamos que estoy trabajando en algún problema de clasificación. (La detección de fraudes y el spam de comentarios son dos problemas en los que estoy trabajando ahora, pero tengo curiosidad sobre cualquier tarea de clasificación en general).

¿Cómo sé qué clasificador debería 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, embolsado, ensamblaje
  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 de 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 un alto sesgo (por ejemplo, Naive Bayes) .

Supongo que esto se debe a que un clasificador de mayor polarización tendrá una menor varianza, lo que es bueno debido a la poca cantidad de datos.

segundo. Si tiene una tonelada de datos, entonces el clasificador en realidad no importa tanto, entonces probablemente debería elegir un clasificador con buena escalabilidad.

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

  2. Además, para una pregunta algo separada, además de los clasificadores bayesianos estándar, ¿hay métodos "estándar de última generación" para la detección de spam de comentarios (en oposición al correo electrónico no deseado)?


El libro " OpenCV " tiene dos grandes páginas sobre esto en las páginas 462-463 . Buscar en la vista previa de Amazon para la palabra "discriminativo" (probablemente también libros de google) le permitirá ver las páginas en cuestión. Estas dos páginas son la joya 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 regresiones .

  • K vecinos más cercanos : lo más simple que puede hacer, a menudo efectivo pero lento y requiere mucha memoria .

  • Redes neuronales : lento para entrenar pero muy rápido para ejecutarse , sigue siendo el ejecutante óptimo para el reconocimiento de letras .

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


Las cosas que puede considerar al elegir qué algoritmo utilizar incluirán:

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

    Si necesita actualizar su clasificador con nuevos datos con frecuencia (o si tiene toneladas de datos), es probable que desee utilizar Bayesian. Las redes neuronales y SVM necesitan trabajar en los datos de entrenamiento de una vez.

  2. ¿Sus datos están compuestos solo por categorías , o solo 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. ¿Usted o su audiencia necesitan entender cómo funciona el clasificador?

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

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

    Los SVM son rápidos a la hora de clasificar, ya que solo necesitan determinar en qué lado de la "línea" están 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 clasificaciones complejas no lineales.


Mi opinión es que siempre se ejecutan los clasificadores básicos primero para tener algún sentido de sus datos. La mayoría de las veces (en mi experiencia al menos) han sido lo suficientemente buenos.

Entonces, si tiene datos supervisados, entrene un clasificador Naive Bayes. Si tiene datos no supervisados, puede probar clustering k-means.

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


Sam Roweis solía decir que debes probar el ingenuo Bayes, la regresión logística, el k-vecino más cercano y el discriminante lineal de Fisher antes que cualquier otra cosa.


Siempre debe tener en cuenta la inferencia frente a la compensación de predicción .

Si desea comprender la relación compleja que está ocurriendo en sus datos, entonces debe ir con un algoritmo de inferencia rico (por ejemplo, regresión lineal o lazo). Por otro lado, si solo está interesado en el resultado, puede usar algoritmos altamente dimensionales y más complejos (pero menos interpretables), como redes neuronales.


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

Validación cruzada

Lo que debes hacer es simplemente dividir tu conjunto de datos en k subconjuntos no superpuestos (pliegues), entrenar a un modelo usando pliegues k-1 y predecir su rendimiento utilizando el pliegue que dejaste fuera. Esto lo haces para cada posible combinación de pliegues (primero deja 1ra salida, luego 2, ..., luego k, y entrena con los pliegues restantes). Después de terminar, se estima el rendimiento medio de todos los pliegues (tal vez también la varianza / desviación estándar del rendimiento).

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

Selección de modelo

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

Hay algunas cosas más para 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 del modelo.

De nuevo, primero divide los datos en k pliegues. Después de cada paso, elige k-1 como su información de entrenamiento y la restante como sus datos de prueba. Luego ejecuta la selección del modelo (el procedimiento que expliqué arriba) para cada posible combinación 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. Esa es tu última modelo.

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


Antes que nada, necesitas identificar tu problema. Depende de qué tipo de datos tenga y cuál es su tarea deseada.

Si eres una Predicting Category :

  • Usted tiene Labeled Data
    • Debe seguir el Classification Approach y sus algoritmos
  • No tienes Labeled Data
    • Tienes que ir por el Clustering Approach

Si está Predicting Quantity :

  • Debe ir al Regression Approach

De otra manera

  • Puede optar por el Dimensionality Reduction Approach

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

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