¿Cuáles son los algoritmos de aprendizaje automático más importantes? ¿Cuáles son los algoritmos más comúnmente aplicados al atacar un problema?

La pregunta es sobre “la aplicación más común al atacar un problema”, por lo que responderé en base a eso:

Problemas de clasificación y regresión:

XGBoost es, en el momento de mi respuesta, el algoritmo que generalmente da los mejores resultados. Puedes comprobar eso en las últimas competiciones de Kaggle donde XGBoost se usa ampliamente.

Bosques aleatorios : tienden a funcionar un poco peor que XGboost, pero se usan ampliamente en la industria porque son muy fáciles de implementar y dan buenos resultados para muchos problemas.

SVM : casi los omití, pero tienen muchas variantes útiles y, para algunos problemas, siguen siendo probablemente su mejor primera opción, como la clasificación de texto.

Clasificación de imagen:

Redes neuronales convolucionales : algoritmo de vanguardia de facto. Si quieres saber si tu jpg 64 × 64 es una ballena o un tigre, esto es lo tuyo.

Agrupamiento:

K-Means , viejo pero nunca muere, lo verás utilizado en la mayoría de las aplicaciones de agrupamiento en la industria. Por lo general, hay mejores alternativas en precisión y velocidad, pero a nadie realmente le importa.

HDBScan : un “nuevo” algoritmo que es realmente bueno para detectar grupos de diferentes tamaños y densidades.

Sistemas de recomendación:

Filtrado colaborativo : siempre parte del sistema de una forma u otra.

SVD ++ : desde el concurso de Netflix, este método se ha convertido en estándar para detectar características latentes y siempre es una forma de mejorar los resultados en un recomendación. Tenga en cuenta que esto no tiene nada que ver con la SVD, excepto el nombre.

Reducción de dimensionalidad:

SVD , siempre la primera opción. (PCA es lo mismo, de verdad)

NMF , cuando la base que necesita no es lo que le proporciona la SVD.

Representación:

Deep Autoencoders : una parte clave de varios sistemas de aprendizaje profundo y una de las mejores formas de encontrar el mejor conjunto de características para representar un conjunto de datos.

Filtrado escaso : una buena alternativa que es menos costosa desde el punto de vista computacional.

Hash Kernels : esto es realmente rápido y generalmente sorprende con muy buenos resultados.

Visualización:

T-SNE : estado del arte para visualizar conjuntos de datos multidimensionales en 2 o 3 dimensiones.

Series de tiempo y secuencias:

LSTM : los LSTM son redes neuronales recurrentes con la capacidad de “recordar” cosas del pasado, son el estado del arte en cosas como el análisis de sentimientos.

Un poco de todo:

– Redes MCMC y bayesianas: pueden volverse complejas, pero en teoría cualquier cosa puede resolverse con un buen análisis bayesiano y su navaja suiza: MCMC.

Creo que si verificamos las últimas 50 soluciones ganadoras de Kaggle, encontrará la mayoría de los algoritmos utilizados en esta lista y es por eso que creo que puede ser una buena compilación de los algoritmos que se usan comúnmente para atacar un problema.


Gracias por solicitar mi respuesta, espero que sea de ayuda.

Luis.

Esto depende del problema que intente resolver. Como Zulfikar Ramzan declaró a continuación, tener datos bien muestreados con características perspicaces (o destacados diseñados para ser perspicaces) es mucho mejor que usar cualquier tipo de algoritmo especializado.

1. Regresión lineal / logística para valores continuos
2. Clasificadores basados ​​en SVM / Kernel para problemas de clasificación.
3. Clasificación basada en Gaussian LDA / QDA para muestras dentro de la misma distribución.
4. K-medias para aprendizaje / clasificación sin supervisión.
5. Redes neuronales para predicción y clasificación, para tipos específicos de clasificación donde las características de manipulación / ponderación pueden dar más información que la simple clasificación.
6. El bosque aleatorio parece funcionar particularmente mejor de lo esperado cuando los datos son limitados para problemas de clasificación / decisión, al “arrancar” los datos existentes en cierto sentido.

He utilizado principalmente estos algoritmos y variantes de estos (de muchos por ahí). Si la implementación rápida de uno de estos (después de probar diferentes parámetros) no funciona, es honestamente improbable que otro tipo de algoritmo exótico funcione significativamente mejor. Como siempre, “Basura adentro, basura afuera”.

Dependiendo de la tarea y los datos, hay una variedad de algoritmos que uno puede probar y elegir.

  • Resultados probabilísticos – Bayes ingenuos, modelos de mezcla gaussiana, regresión logística
  • Problemas de clasificación lineal [1] – Árboles de decisión, KNN, SVM con núcleo lineal
  • Modelado secuencial / Serie temporal : modelo oculto de Markov, redes neuronales recurrentes
  • Aprendizaje de funciones: codificadores automáticos, redes neuronales de convolución y otras arquitecturas de red profunda
  • Problemas de clasificación no lineal : bosque aleatorio, SVM con RBF / núcleos polinomiales, redes neuronales
  • Agrupación – K-Means y sus variantes, métodos de agrupación jerárquica

Se puede encontrar una lista de algunos otros algoritmos ML comunes en Weka Javadoc [2] y scikit-learn [3]

Notas al pie

[1] La respuesta de Shehroz Khan a En el aprendizaje automático, ¿cómo podemos determinar si un problema es lineal / no lineal?

[2] Documentación generada (sin título)

[3] scikit-learn: aprendizaje automático en Python

El algoritmo más apropiado para que usted elija depende de su objetivo. Sin embargo, creo que la gente pone demasiado énfasis en el algoritmo y no hace suficiente hincapié en la calidad de los datos en el corpus subyacente, así como en la selección de características. (En realidad, la calidad y las características de los datos tienden a ser mucho más importantes que la elección algorítmica específica).

Esta pregunta es una buena pregunta al principio, pero también es una pregunta que rápidamente resultará engañosa. Entonces, en lugar de nombres de algoritmos, intentaré responder con un enfoque para construir modelos predictivos.

La mejor solución algorítmica para un problema de predicción casi nunca será un algoritmo de aprendizaje automático único. Lo más probable es que desee limpiar sus datos primero con un algoritmo de eliminación atípico. Además, no todas las funciones pueden ser buenas, por lo que es posible que también desee deshacerse de algunas funciones con un algoritmo de selección de funciones. Pero esta parte requiere una idea de los datos y el algoritmo, es decir, alguien puede preguntar: “¿Por qué el algoritmo eliminó estas características? Pensé que eran importantes”. La respuesta a esta pregunta requerirá el conocimiento del dominio de su conjunto de datos, así como el conocimiento de su algoritmo.

Después de limpiar los datos, sugeriría personalmente probar varios alumnos (posiblemente con diferentes características) con múltiples parámetros para tener una idea de su éxito. Incluso entonces, no necesita conformarse con un solo alumno: puede elegir un subconjunto de los mejores alumnos y construir un conjunto de ellos (Ensemble learning). Una vez que tenga una solución de alto rendimiento para su problema de predicción, también sugiero que comprenda por qué su solución (los algoritmos que eligió usar) funcionan bien en sus datos, porque es probable que alguien haga esta pregunta y también ayuda a Comprenda sus datos y su relación con varios alumnos.

En resumen, un enfoque de alto nivel puede ser:
1. Si es posible, obtenga conocimiento del dominio sobre sus datos (qué característica significa qué, cómo se recopiló y qué tan “limpio” se recopiló)
2. Deshágase de posibles casos atípicos
3. Seleccione solo las características relevantes
4. Barrer un conjunto de alumnos con diferentes parámetros
5. Pruebe alternativas (por ejemplo, conjuntos u otras ideas creativas)
6. Tenga respuestas a las preguntas de “por qué”

Ni siquiera especificó el problema que está tratando de resolver: clasificación, regresión, agrupamiento, aprendizaje de refuerzo, aprender a clasificar …

Incluso para cualquier problema dado, no existe un mejor algoritmo, depende del tamaño de su conjunto de datos, cuántas dimensiones, si su conjunto de datos es escaso y cómo se estructuran sus datos en general. También hay una compensación entre el tiempo de clasificación, el tiempo de entrenamiento y la precisión. Este cuadro de la documentación de scikit-learn ofrece una buena descripción general:

Lo único que me gustaría agregar, que falta en este gráfico, son las redes neuronales. Son principalmente interesantes para la regresión y la clasificación si tiene muchos datos con estructura oculta, en otras palabras, cuando la relación entre las características y la variable objetivo no es lineal.

Las personas generalmente usan validación cruzada n-fold para descubrir qué algoritmo y parámetros funcionan mejor para el problema en cuestión. Una biblioteca como scikit-learn o un paquete como R puede ser útil aquí, porque solo cambia una línea de código y usa un algoritmo diferente. Para exprimir el último bit de rendimiento, también puede hacer conjuntos de diferentes algoritmos.

Creo que una buena manera de clasificar los algoritmos de ML está bien documentada en Wikipedia, en tres clases, a saber. Técnicas de aprendizaje supervisadas, no supervisadas y de refuerzo. Tienes la lista de algoritmos en cada clase aquí:

http://en.wikipedia.org/wiki/Lis

Depende de la tarea que está intentando atacar, por ejemplo, en la Plataforma MLJAR para construir modelos de Machine Learning para la tarea de clasificación binaria que tenemos:

  • LightGBM
  • Xgboost
  • Bosque al azar
  • Árboles extra
  • Bosque codicioso regularizado
  • k-NN
  • Regresión logística
  • Redes neuronales

No existe un “mejor” algoritmo, pero es una pregunta de investigación seria si algunos métodos tienden a funcionar mejor que otros para grandes clases de problemas. Esto me parece fascinante.

Rich Caruana y Alexandru Niculescu-Mizil han realizado algunos estudios sobre este tema. Comparando SVM, redes neuronales, regresión logística, bahías ingenuas, bosques aleatorios y otros métodos en 11 problemas de aprendizaje supervisado utilizando 8 métricas de rendimiento:

http://www.cs.cornell.edu/~carua

El profesor Caruana también dio una charla sobre este proyecto:

¿Qué método de aprendizaje supervisado funciona mejor para qué? Una comparación empírica de métodos y métricas de aprendizaje

Por supuesto, las técnicas han cambiado incluso desde 2006 y el método de “mejor desempeño” no es necesariamente el más útil.

Aprendizaje supervisado y no supervisado.

En el aprendizaje supervisado, usted proporciona datos junto con las etiquetas (por ejemplo, correo electrónico no deseado, muestras de correo electrónico no deseado) al algoritmo para que aprenda y pueda etiquetar los datos no vistos / nuevos.

En el aprendizaje no supervisado, el objetivo es agrupar los datos no etiquetados en grupos según la similitud de las características.

No hay ninguno. De hecho, * no * puede ser el “mejor”: http://www.no-free-lunch.org/

LNKnet , desarrollado en el MIT Lincoln Laboratory, integra más de 22 algoritmos de clasificación, agrupación y selección de funciones de redes neuronales, estadísticas y aprendizaje automático en un paquete de software modular. Recientemente, se han agregado máquinas de vectores de soporte y clasificadores bayesianos ingenuos y una versión de LNKnet ha sido desarrollado bajo el sistema operativo Microsoft Windows utilizando el entorno Cygwin “. Consulte http://www.ll.mit.edu/mission/co … para ver el software y http://www.ll.mit.edu/publicatio … para ver el documento.

La mayoría de los algoritmos de aprendizaje automático están fuertemente influenciados por la calidad de los datos, el número de características, el peso de las características y la cantidad de preprocesamiento involucrado.
Siempre es un problema basado en la situación y la capacidad de su programa para seleccionar intuitivamente el que mejor optimiza la solución.
Además, también está la cuestión de los algoritmos de aprendizaje supervisados, no supervisados ​​y de refuerzo.

La pregunta que debe hacerse es cuál es el mejor algoritmo entre cada una de estas diferentes áreas de subconjuntos.

No solo no existe el “mejor” algoritmo, el “mejor” algoritmo para su problema particular es tan bueno como los parámetros que utiliza como entradas para el algoritmo. Seleccionar parámetros incorrectos puede hacer que cualquier buen algoritmo funcione mal. Un método para mejorar la selección de parámetros es utilizar otro algoritmo para ajustar los parámetros de entrada a su algoritmo principal. Por ejemplo, usar un algoritmo genético para ajustar los parámetros de una red neuronal es una práctica común. Hay un buen libro llamado Neruo-Fuzzy and Soft Computing, http://www.amazon.com/Neuro-Fuzz …, que cubre estos temas y más.

Como dicen las otras respuestas, la mejor es la que se ajusta al problema en cuestión.

Dicho esto, la regresión lineal y logística puede recorrer un largo camino y podrían ser los métodos más importantes que todos deberían conocer bien. Podría decirse que tienen la relación más alta de poder predictivo a complejidad.

Los algoritmos más importantes para un principiante son Regresión lineal y logística , Redes neuronales , Máquinas de vectores de soporte , k vecinos más cercanos, etc.

Existen numerosos algoritmos en Machine Learning que son importantes para un problema u otro. Uno de los algoritmos más buscados hoy en día son los que pertenecen al tema Deep Learning.

A menos que el problema se adapte muy bien a uno de los métodos bien definidos, como la regresión, la agrupación o la clasificación, en mi humilde opinión, debe emplearse un conjunto de algoritmos / modelos / métodos múltiples. Por ejemplo, el premio de Netflix …

No existe un modelo único que funcione mejor para todos los problemas. Siempre debe evaluar las compensaciones de diferentes algoritmos de aprendizaje automático antes de elegir el modelo para su problema.

Siga leyendo: No hay teoremas de almuerzo gratis para obtener una explicación más elaborada.

Realmente depende del problema que estés tratando de resolver. La primera pregunta a responder es si necesita un algoritmo supervisado (como redes neuronales) o sin supervisión (como agrupamiento). Mi enfoque favorito son los algoritmos evolutivos.

El mejor método de aprendizaje automático depende del espacio de observación objetivo. No existe un método universalmente mejor. Las redes neuronales funcionan bien en imágenes y tales problemas, mientras que la regresión funciona bien en problemas de puntaje de crédito.

En un nivel superior, el mejor método de aprendizaje automático para un problema depende de tres cosas:
1. El problema space.ie el dominio.
2. El tamaño de muestra disponible para el problema – N
3. La relación señal / ruido. Una relación señal / ruido alta favorece los métodos de tipo de regresión y una baja favorece métodos más complicados como Tree’s, etc.