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:

Recomendado: No olvides hacer el Análisis Exploratorio de Datos con Pandas/Python

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:

Procesamiento del Lenguaje Natural (NLP)

El Natural Language Processing es una mezcla entre DataScience, Machine Learning y Lingüística. Tiene como objetivo comprender el lenguaje humano. Tanto en textos como en discurso/voz. Desde analizar sintáctica ó gramáticamente miles contenidos, clasificar automáticamente en temas, los chatbots y hasta generar poesía imitando a Shakespeare. También es común utilizarlo para el Análisis de Sentimientos en redes sociales, (por ejemplo con respecto a un político) y la traducción automática entre idiomas. Asistentes como Siri, Cortana y la posibilidad de preguntar y obtener respuestas, o hasta sacar entradas de cine.

Otros Algoritmos

Otros algoritmos no desarrollados en este artículo:

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

Nuevo artículo: WebScraping: una herramienta valiosa para DataScience, obtener contenidos de la web

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.

Libros Relacionados

27 comments

  1. David Martínez · November 9, 2017

    ¡Gracias a que me has seguido, te he encontrado!
    Muy interesante el artículo, ahora cuando tenga un rato libre le echaré un ojo.

    • user · November 9, 2017

      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.

      • David Martínez · November 14, 2017

        ¡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

        • Na8 · November 14, 2017

          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!

          • David Martínez · November 14, 2017

            ¡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!

  2. m.a.xi · March 23, 2018

    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!

    • Na8 · March 23, 2018

      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

  3. Merka · May 19, 2018

    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!

    • Na8 · May 19, 2018

      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!

      • Roger · June 6, 2018

        Espero con ansias ese post, gracias por tu aporte. Me sirvieron de mucha ayuda.! :

        • Na8 · June 18, 2018

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

  4. Nikkibraiam · June 22, 2018

    Muchas gracias por compartir esta información, me esta sirviendo de maravilla 🙂

    • Na8 · June 22, 2018

      Gracias por escribir, seguimos en contacto!

  5. Sebastian · August 11, 2018

    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

    • Na8 · August 14, 2018

      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 🙂

  6. Juan Carlos Fernández · August 27, 2018

    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

    • Na8 · August 31, 2018

      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?

      • Juan Carlos Fernández · August 31, 2018

        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.

  7. Jose · April 1, 2019

    Hola Juan, Soy nuevo seguidor del blog. Hace tiempo que vengo leyendo del tema, haciendo cursos en Coursera o similar, pero no logro comenzar a meter manos en el asunto. Espero lograrlo con los ejemplos del blog.
    Aprovecho para preguntar como conviene hacer con variables categóricas (vi un ejemplo aquí pero no me quedó claro)
    -¿Si la variable fueran los valores de los 3 años y sus 12 meses listados en un archivo. Conviene que los numere en binario como “100; 010; 001” o “1; 2; 3”. Idem para sus 12 meses (b010000000000 o d02 para Febrero?)
    -Independientemente del método de numeración, ¿hay que escalarlos a estas categorías para que “entren” entre los números (-1 a 1 para Tangente y (0 a 1) para sigmoidea?
    Gracias

    • Na8 · April 1, 2019

      Hola Jose, gracias por escribir. Te contesto: si te refieres a variables categóricas para embeddings, no hace falta hacer el escalado. Si en cambio es para alimentar “directamente” a la red neuronal, sí que conviene escalarlos por ejemplo de -1 a 1 ó de 0 a 1 como comentas.
      El tema de pasarlos a modo “one-hot-encoding” depende también, si es para embeddings, no es necesario hacerlo, pero deberías numerarlos por ejemplo si tienes 3 años, serán 1,2 y 3.

  8. Alberto · June 25, 2019

    Buenas,

    Felicidades por tu blog, buscando informacion sobre Machine Learning para mi Master me he topado el blog y me esta ayudando bastante!

    Un saludo

  9. Daniel · October 9, 2019

    Excelente trabajo y muy buenas explicaciones. Me ha ayudado bastante en la comprension de algunos temas relativos a datascience. saludos desde Chile

  10. damian · January 9, 2020

    esta buenisimo el blog. te hago una pregunta. tengo un dataset no supervisado y quiero generar un score de cuan digital es la persona. los campos contienen variables acerca del uso y comportamiento de la persona. cual seria el mejor modelo para clasificar/segmentar/perfilar esta base? mil gracias!

  11. Ariel · June 20, 2020

    Excelente informacion¡¡¡¡¡¡ Estoy tratando de implementar un modelo de deteccion de retinopatia diabetica, si a alguien le interesa tambien podriamos recorrer este camino juntos. Saludos

  12. OscarCamilo CR · June 29, 2020

    Muy buen artículo. Aprendiendo inteligencia artificial

  13. Carlos Garcia · February 22, 2021

    Excelente articulo, Tengo una pregunta. Estoy intentando encontrar el mejor modelo que se ajuste a mi problema. tengo un conjunto de datos en dos grupos diferentes y necesito hacer correspondencias uno a uno entre los datos de ambas tablas, o al menos que me de la probabilidad de que cada dato se corresponda con su par en la otra tabla. Alguna idea de como hacerlo?

  14. Yazmani Reyes · December 22, 2021

    Hola buen día.
    Muchas felicidades por tu blog, es una maravilla, super claro y con temas super interesantes sobre IA.
    A mi me gustaría entender como puedo usar estos algoritmos de clasificación de Machine Learning, pero aplicándolos a imágenes de personas, para después usar algoritmos de extracción de patrones (también de Machine Learning) como Eigenfaces, Fisherfaces, LBPH, etc, para reconocimiento facial (ya sea en un video o a través de un Streaming).
    Lo que pretendo hacer (a ver si me sale jeje), es hacer un ejercicio en python y opencv (aunque sea sencillo) para determinar cual de todos estos algoritmos es el mas preciso en cuanto a reconocimiento facial. Ya me he creado un par de datasets con imágenes mías y de algunos amigos, pero todavía tengo algunas dudas sobre como puedo (o de que manera) aplicar estos algoritmos a estas imágenes.
    Se que usando Deep Learning a través de redes neuronales seria lo mas preciso y efectivo, pero en mi caso, quiero hacer este proceso únicamente utilizando técnicas o algoritmos de Machine Learning.
    Los algoritmos de clasificación que presentas en este articulo, pueden hacer reconocimiento de rostros por si mismos?, o solo sirven para pura clasificación?
    Por que después viene mi confusión sobre los algoritmos de extracción de patrones, como Eigenfaces, Fisherfaces, LBPH, etc, que según yo, estos sí hacen reconocimiento facial, pero para eso, antes se deben utilizar los algoritmos de clasificación para el preprocesamiento de las imágenes, no es así?, o estoy mal?.
    De antemano muchas gracias por tu ayuda, y de nuevo, felicidades por tu trabajo!
    Gracias.

Leave a Reply