Sistemas de recomendación en Python

Hemos estado hablando en anteriores posts de distintas técnicas de agrupación y clasificación, pero este tipo de algoritmos de aprendizaje automático permiten realizar muchas otras tareas, como por ejemplo implementar un motor de recomendación.

En este post vamos a explicar en qué consisten estos sistemas de recomendación, y veremos algunos ejemplos básicos de como utilizarlos, sus ventajas e inconvenientes, y una aproximación a su implementación en Python.

Aquí va este pequeño tutorial para crear fácilmente un motor de recomendación de productos en Python.

Empezando con Machine Learning en Python

Actualmente ha empezado a hablarse mucho de machine learning en televisión, en la radio, y en general en programas y fuentes no especializados, que por lo tanto hacen una definición del aprendizaje automático simplificada o “traducida” al lenguaje específico que entienda su audiencia… esto genera el efecto de que mucha gente crea que el aprendizaje automático es lo mismo que enseñar a una máquina a pensar como una persona, que un ordenador se comporte como un niño pequeño, o incluso cosas más locas.

Cuando entendemos algo del tema o empezamos a trabajarlo en serio, enseguida nos damos cuenta de que realmente el aprendizaje automático es mucho más “simple”. De hecho, su forma más básica consiste en la aplicación de los algoritmos que hemos visto en los posts anteriores, y desde ahí se avanza y profundiza hasta desarrollar algoritmos mucho más complejos (basados en conceptos matemáticos similares) y más específicos para la resolución de un problema concreto.

En este post vamos a conocer algunos de estos algoritmos, empeando el lenguaje Python.

Modelos predictivos en Python

Continúo este repaso, cuaderno de notas, apuntes, (o como lo queramos llamar) a la ciencia de datos usando Python. En esta ocasión me voy a centrar en los modelos predictivos, como la regresión lineal y polinómica (los modelos más habituales, pero no por ello poco interesantes), así como la regresión multivariante y los modelos multinivel.

Hace algun tiempo hice un curso pero que muy recomendable (pondré el enlace al final del post), del profesor Andrew Ng, que explicaba estos y otros conceptos mucho más avanzados, desde un punto de vista matemático y teórico… en este post no lo veremos así, sino sus aplicaciones prácticas y nos centraremos en su implementación en Python.

Estadística básica en Python para Machine Learning

No soy ningún experto (de momento, mwahaha) pero siempre me han interesado la implementación de sistemas relacionados con la inteligencia artificial y el aprendizaje automático. Últimamente está en boga, por lo que he pensado en escribir algunos posts hasta donde mi conocimiento alcance, para aquellos que sin tener idea de estadística o machine learning quieran disponer de un cheatsheet para recordar o aprender conceptos muy relacionados con estos asuntos.

En el primero de los post abordaré muchos principios básicos de estadística que sin embargo son muy importantes para definir los procesos de aprendizaje automático, y que seguro que hemos olvidado desde nuestra época de estudiantes. Ya que Python es uno de los lenguajes más utilizados para la implementación de este tipo de cálculo, será el lenguaje en el que pondré los ejemplos de generación y análisis de datos.

Termostato remoto con Intel Edison y NodeJS

Motivación

Hace algún tiempo participé en un hackathon de movilforum_ donde los evangelizadores de Intel anunciaban la placa Intel Edison (entre ellos mi amigo @franbuitragoPa).

El hackathon estaba orientado al desarrollo de proyectos relacionados con IoT (el famoso Internet de las Cosas) y mi compañero @dennyf11 y yo mismo nos pusimos a currar hombro con hombro y finalmente presentamos un proyecto para domótica del hogar al que bautizamos como proyecto Aurora.

La idea de partida consistía en un termostato que aprendiese automáticamente cuales eran los mejores patrones para calentar la casa en función del clima en el exterior y en el interior de la casa. En lugar de realizar un estudio de la distribución de las habitaciones y otras características, lo que haría sería aprender para minimizar el tiempo de encendido y proporcionar calorcito en las horas que estuviese programado. Con el tiempo, incluso, podría beneficiarse de la temperatura que emanase de las casas vecinas, si se trataba de un piso, ya que respondería a sus propios patrones de comportamiento e influiria en nuestro “clima”.

Después la verdad es que se nos empezó a “ir la pelota” y empezamos a diseñar una especie de “mente enjambre” que hiciera que los termostatos de todas las casas vecinas funcionasen de forma colaborativa para maximizar este efecto… y muchas cosas más.

Dani, Majs y yo en el hackathon

Majs, Dani y yo en el hackathon

Cuando el hackathon finalizó, nos llevamos cada uno un Intel Edison y un kit de groove a casa, y la vida cotidiana hundió nuestro proyecto en las profundidades más oscuras del armario mas recóndito de la casa…

Pero llegó el invierno, y miré el termostato instalado en mi casa (un botón analógico de encendido apagado con una rueda de temperatura y sin opciones de programación) y decidí rescatar la placa Intel Edison de su olvido y hacer un termostato programable y accesible via HTTP, para programarlo desde el móvil, por ejemplo.

Aprender a usar MongoDB: Guía 7

Ya sabemos mucho acerca de mongo, hemos insertado datos, añadido indices para hacerlo realmente rápido, y creado nuestras consultas para utilizarlo en nuestra aplicación… pero en algún momento podríamos querer analizar los datos y entender qué tenemos ahí dentro, para sacar provecho de todas esa información y hacer las cosas aún mejor.

Para el análisis de datos, agrupación, ordenaciones, proyecciones, y un montón de otros tratamientos, MongoDB nos entrega una herramienta realmente poderosa: Aggregation Framework. Hoy vamos a ver rápidamente un montón de operaciones que podríamos hacer con él.

Anteriormente

Guía 6: Crear, manejar y entender los índices

Análisis de datos con el Framework de Agregación en MongoDB

Aprender a usar MongoDB: Guía 6

Ahora que ya hemos aprendido a diseñar correctamente la estructura de los datos en MongoDB, y que sabemos realizar todo tipo de consultas, seguro que se nos ocurren multitud de posibilidades con documentos anidados y estructuras complejas para que nuestra aplicación sea realmente rápida.

Sin embargo, cuando tengamos una cantidad masiva de datos, por defecto MongoDB solo nos ofrecerá un alto rendimiento cuando las consultas utilicen filtros que utilicen el identificador (_id) del documento raiz, ya que de otro modo MongoDB deberá buscar sobre todos los elementos de la colección antes de empezar a procesar los resultados. En la publicación de hoy vamos a aprender a crear otros indices que nos permitan realizar operaciones eficientes sobre otros atributos, así como algunos detalles sobre su uso.

Anteriormente

Guía 5: Esquema de datos dirigido por la aplicación

Trabajar con índices en MongoDB

Aprender a usar MongoDB: Guía 5

En publicaciones anteriores hemos aprendido a utilizar multitud de comandos y operadores para consultar y manipular nuestros datos en MongoDB… pero aún no hemos visto una de las cosas que más diferencias tienen en una base de datos noSQL frente a un entorno tradicional SQL o relacional: el hecho de que el esquema de datos está determinado por la aplicación (es decir, por el uso que se va a hacer de los mismos) y no por su propio esquema o modelo de dominio. Este será el tema que abordemos en este post.

Anteriormente

Guía 4: Comandos y operaciones avanzadas

Esquema dirigido por la aplicación (Application-driven Schema)

Aprender a usar MongoDB: Guía 4

Anteriormente hemos visto como introducir datos en la base de datos MongoDB, y cómo realizar todo tipo de consultas para obtener los datos almacenados con distintos tipos de filtro.

En el post de hoy, vamos a trabajar en las operaciones que quedan, como las actualizaciones, borrado de datos, paginación y consultas por cursor.

Anteriormente

Guía 3: Comandos y operaciones esenciales

Operaciones avanzadas en MongoDB