Principales Algoritmos usados en Machine Learning

En esta etapa de estudio sobre el Aprendizaje Automático me he topado con diversos algoritmos que voy reutilizando para la resolución de problemas y que se repiten con mayor frecuencia. Realizaré un listado con una breve descripción de los principales algoritmos utilizados en Machine Learning. Además cada uno contará con enlaces a ejemplos de desarrollo en código Python. Con el tiempo, agregaré mis propios ejemplos en español. También te recomiendo leer mi artículo sobre Deep Learning.

Empecemos!

Algoritmos de Regresión

Algoritmos de Regresión
Algoritmos de Regresión, Logístico o Lineal. Nos ayudan a clasificar o predecir valores. Se intentará compensar la mejor respuesta a partir del menor error.

Los algoritmos de Regresión modelan la relación entre distintas variables (features) utilizando una medida de error que se intentará minimizar en un proceso iterativo para poder realizar predicciones “lo más acertadas posible”. Se utilizan mucho en el análisis estadístico. El ejemplo clásico es la predicción de precios de Inmuebles a partir de sus características: cantidad de ambientes del piso, barrio, distancia al centro, metros cuadrados del piso, etc.
Los Algoritmos más usados de Regresión son:

Algoritmos basados en Instancia

Algoritmos Basados en Instancia.
Instance-Based Algorithms.

Son Modelos de Aprendizaje para problemas de decisión con instancias o ejemplos (muestras) de datos de entrenamiento que son importantes o requeridos por el modelo.
También son llamados Algoritmos “Ganador se lleva todo” y aprendizaje basado-en-memoria en el que se crea un modelo a partir de una base de datos y se agregan nuevos datos comparando su similitud con las muestras ya existentes para encontrar “la mejor pareja” y hacer la predicción.
Los Algoritmos basados en instancia más usados son:

Algoritmos de Arbol de Decisión

Decision Tree Algorithm
Arbol de Decisión. Buscará el mejor árbol, balanceando la posibilidad de ocurrencia y su importancia en cada rama y hojas para clasificar un resultado

Modelan la toma de Decisión basado en los valores actuales (reales) de los atributos que tienen nuestros datos. Se utilizan sobre todo para clasificación de información, bifurcando y modelando los posibles caminos tomados y su probabilidad de ocurrencia para mejorar su precisión. Una vez armados, los arboles de decisión ejecutan muy rápido para obtener resultados.
Los Algoritmos de árbol de decisión más usados son:

Algoritmos Bayesianos

Bayesian Algorithm
Algoritmos Bayesianos aprovechan los teoremas de probabilidad en Aprendizaje Automático

Son algoritmos que utilizan explícitamente el Teorema de Bayes de probabilidad para problemas de Clasificación y Regresión.
Los más utilizados son:

  • Naive Bayes
  • Gaussian Naive Bayes – Ejemplo en Python
  • Multinomial Naive Bayes
  • Bayesian Network

Algoritmos de Clustering (agrupación)

Clustering
Algoritmos de Agrupación son de Aprendizaje no supervisado y encontrarán relaciones entre los datos que seguramente no contemplamos a simple vista.

Se utilizan para agrupar datos existentes de los que desconocemos sus características en común o queremos descubrirlas.
Estos métodos intentan crear “puntos centrales” y jerarquías para diferenciar grupos y descubrir características comunes por cercanía.
Los más utilizados son:

Algoritmos de Redes Neuronales

Neural Network diagram
Las Redes Neuronales imitan el comportamiento de activación biológico y la interconexión entre neuronas para buscar soluciones no lineales a problemas complejos

Son algoritmos y estructuras inspirados en las funciones biológicas de las redes neuronales.
Se suelen utilizar para problemas de Clasificación y Regresión pero realmente tienen un gran potencial para resolver multitud de problemáticas. Son muy buenas para detectar patrones. Las Redes Neuronales Artificiales requieren mucha capacidad de procesamiento y memoria y estuvieron muy limitadas por la tecnología del pasado hasta estos últimos años en los que resurgieron con mucha fuerza dando lugar al Aprendizaje Profundo (se detalla más adelante).
Las redes neuronales básicas y clásicas son:

Algoritmos de Aprendizaje Profundo

Deep Learning
Las redes convolucionales hacen que una red neuronal de aprendizaje profundo tenga la capacidad de reconocer animales, humanos y objetos dentro de imágenes

Son la evolución de las Redes Neuronales Artificiales que aprovechan el abaratamiento de la tecnología y la mayor capacidad de ejecución, memoria y disco para explotar gran cantidad de datos en enormes redes neuronales interconectarlas en diversas capas que pueden ejecutar en paralelo para realizar cálculos.
Comprende mejor Deep Learning con esta guía rápida que escribí.
Los algoritmos más populares de Deep Learning son:

Algoritmos de Reducción de Dimensión

CPA
Reducción de dimensión nos permite graficar o simplificar modelos muy complejos que en su condición inicial contenían demasiadas características.

Buscan explotar la estructura existente de manera no supervisada para simplificar los datos y reducirlos o comprimirlos.
Son útiles para visualizar datos o para simplificar el conjunto de variables que luego pueda usar un algoritmo supervisado.
Los más utilizados son:

Otros Algoritmos

Otros algoritmos no desarrollados en este artículo:

  • Algoritmos de Aprendizaje por Reglas de Asociación
  • Algoritmos de Conjunto
  • Computer Vision
  • Procesamiento del Lenguaje Natural (NLP)
  • Sistemas de Recomendación

Recordemos que todos estos algoritmos son vulnerables a problemas de Underfitting y Overfitting que deberemos tener en cuenta y resolver.

Aprende conmigo

Suscribe al blog y te llegará el aviso de mi nuevo post semanal sobre Machine Learning. Seamos compañeros en este camino 😉

Por último quería proponer que me comenten ustedes ¿cuales son los algoritmos que más utilizan? ¿Cuál crees que falta en esta lista? Espero poder actualizar este artículo en el futuro e ir agregando más información para crear tu propia máquina.

18 Replies to “Principales Algoritmos usados en Machine Learning”

    1. También me gustó tu Página con artículos interesantes! Espero nos mantengamos en contacto y comentando sobre el mundo de la Tecnología en el que se vienen muchos avances.

      1. ¡Buenas Juan!

        Ya le he echado un vistazo.

        Tengo una duda que puede que tu puedas resolverme.

        Yo quiero usar una LM que me relacione conceptos.

        Dado un concepto que puede ser una palabra, un número, un lugar o todo aquéllo que tenga entidad de concepto, me devuelva sus relaciones de conceptos en un graph.

        ¿Se te ocurre qué LM podría ayudarme a afrontar este proyecto?

        Ahora mismo, estoy usando deeplearning4j concretamente Word2Vec.

        ¡Gracias por la ayuda!

        David

        1. Creo que no sé resolver ahora mismo esa duda. Voy a intentar investigar el tema para ayudarte. También lo voy a comentar en un foro de IA en el que recuerdo haber leído a otros participantes hablar sobre Word2Vec.
          En cuanto tenga algo, te escribo!

          1. ¡Perfecto Juan!
            También le he preguntado la duda a un amigo y me ha dicho que investigue los diferentes sistemas de aprendizaje DL para saber más por dónde piso.
            Mientras espero tu respuesta, seguiré mirando alternativas.
            ¡Muchas gracias!
            Para posibles colaboraciones, tienes cuenta de github? Te defiendes con Java? Te defiendes en Angular? Esas son las tecnologías que uso en mi proyecto actual de LM.
            Verás los proyectos en mi cuenta de github: https://github.com/davidmartinezros
            Están todos públicos y puedes verlos y descargarlos.
            Cualquier duda, estoy por aquí…
            ¡Un abrazo amigo!

  1. muy claro , muy bueno , gracias . Soy bastante neófito en el tema y el ingles es una complicación . Deseo que sigas subiendo más , realmente lo leo con mucha ligereza y googleando más información por la guia que dejas .
    Espero los que sigan!!!
    Saludos!

    1. Gracias m.a.xi por tu comentario! Espero escribir un nuevo artículo en español pronto, si hay alguna temática que te interesa me dices. Mis próximos artículos serán sobre k-nearest neighbor, deep learning con keras y árbol de decisión. Saludos

  2. Saludos Juan Ignacio, muchas gracias y felicidades por tremedo sitio, claro conciso y con ejemplos muy completos, recien participe en un hackaton y tus aportes fueron una verdadera luz en el camino!

    1. Hola Merka, me alegra mucho saber que te sirvieron estás páginas del blog!. Próximamente intentaré crear más ejemplos relacionados con Redes Neuronales Artificiales y con implementaciones Python usando Keras y Tensorflow. A estar atentos :). Saludos y gracias!

        1. Hola Roger, gracias por escribir!, me alegro mucho que te sirvieran de ayuda. Espero escribir pronto nuevos artículos, seguimos en contacto!, saludos

  3. Hola juan, necesito ayuda para poder eleguir el algorismo que se adecua a mi problema, tengo que encontrar en un dataset que inmuebles son aptos para la colocacion de una antena de telefonia, estos inmuebles deben ser considerados aptos si cumplen con las caracteristicas por ejemplo no tener otra antena cerca, estar cerca de la poblacion, no ser una casa, etc…son muchas mas las condiciones a cumplir diria unas 15, todos estos datos se encuentran en el dataset, entonces recorriendo los datos me devolveria los inmuebles que comples estas caractetisticas.
    Muchas gracias

    1. Hola Sebastian, por lo que me comentas, es un problema de clasificación con una salida discreta (“colocar antena / no colocar”).
      Deberías revisar los datos, si todas las columnas (condiciones) que tienes son necesarias o no, y si tienes todas las filas completas o puedes encontrar valores “sucios” (nulos, negativos o números exagerados que no encajan con la escala esperada).
      Podrías utilizar algoritmos como árbol de decisión, regresión logística ó redes neuronales.
      Puedes encontrar ejemplos de los tres en mi blog, aunque las redes neuronales suelen ser las más complejas y podría llevar tiempo ajustarlas y adecuar la cantidad de capas, neuronas, etc.
      Te recomiendo utilizar Arbol de decisión, pues tendrás una gráfica sobre cómo toma la decisión el algoritmo y puede resultar muy útil. Clasificación y visualización con Arbol de decisión
      Saludos y espero tus comentarios. Si quieres, contacta conmigo en privado y si quieres compartir tu dataset, podríamos crear una entrada para el blog 🙂

  4. Hola Juan Ignacio:

    Muchas gracias por tu trabajo en este blog: me ha sido de gran ayuda.
    Admiro la claridad y simplicidad con que explicas conceptos complejos.
    Los ejemplos también son muy buenos.

    Permíteme hacerte una pregunta: ¿Cuándo una algoritmo de red neuronal se convierte en uno de aprendizaje profundo? ¿cuál es la frontera? ¿está en la cantidad de capas, en el función usada para reducir el coste? ¿tiene que ver que sea supervisado o no?

    Agradeciendo de antemano tu ayuda, te envío un saludo cordial desde Argentina.

    Juan Carlos

    1. Hola Juan Carlos, muy buena pregunta! Te cuento que estuve investigando y leyendo, para poder contestar.
      Primero encontré en muchas fuentes referirse a que si se usan “muchas capas ocultas” se considera deep learning. Algunos diciendo que más de 3 capas, otros más de 5.
      Sin embargo, encontré otros textos en los que dicen que hasta 2006, no había mucha variación entre agregar pocas capas o 100, pues no se alcanzaba esa “profundidad” de generalización buscada. En 2006, se crea la Deep Belief Network (DBN), que es la primera en lograr hacer que las capas ocultas tengan conocimiento jerárquico permitiendo “niveles” de reconocimiento distintos y que se complementan para poder hacer reconocimiento de imágenes (o podría ser clasificación ó predicción). Esas jerarquías se refieren- en el caso de imágenes-: la 1er capa reconoce lineas, la 2da vértices, la 3ra curvas y así sucesivamente, hasta detectar siluetas y formas más complejas, permitiendo a la red tener una buena capacidad de reconocimiento.
      Luego aparecieron nuevas técnicas y mejoraron con las Convolutional N.N., kernel, filtros, RELU y técnicas de Dropput.

      Pero digamos que lo que convierte a una “mera” Multilayer Perceptron (fully connected) en una red de Deep Learning es:

      • la capacidad de que sus capas se entrenen “de a una” (con métodos no supervisados)
      • Cada capa tendrá entonces, una jerarquía de reconocimiento
      • Algunos también incluyen mejoras en la inicialización de los pesos, en vez de usar valores random, usar técnicas más inteligentes, que encausan mejor al gradiente

      Espero que esto aclare un poco esta pregunta!.
      Te dejo algunos enlaces (en inglés):
      Why are DLN hard to Train?
      Learning Deep Architectures AI
      Radial Basis Function NetworkWhat is the difference between Neural Networks and Deep Learning?

      1. Hola Juan Ignacio:

        Muchas gracias por tu respuesta!
        Me aclara bastante.
        Hace poco tiempo que estudio este tema y en ocasiones me cuesta encontrar la diferencia entre conceptos que suenan similares.
        En ese sentido te agradezco nuevamente este blog: me ayuda mucho a resolver ese tipo de dudas.
        Voy a seguir las líneas de estudio que me propones en los links que dejas en tu respuesta.
        Te seguiré leyendo.

        Un saludo cordial de otro egresado de la UTN, con un poquito de santa envidia de que estés viviendo en un país tan querido por mi como es España.

Leave a Reply