Ir al contenido principal

Entradas

Regresión lineal y descenso de gradiente con Python

En machine learning, el objetivo principal es encontrar un modelo que explique el comportamiento de un sistema (en el amplio sentido de la palabra). A partir de unos datos de entrenamiento, un sistema de aprendizaje automático ha de ser capaz de inferir un modelo capaz de explicar, al menos en su mayoría, los efectos observados. Pero también aplicar ese aprendizaje. Por ejemplo, un sistema de machine learning muy lucrativo para las empresas anunciantes es aquél que dado un perfil de usuario (datos de entrada A), sea capaz de predecir si pinchará o no (salida B) sobre un anuncio publicitario de, por ejemplo, comida para gatos. No es sencillo crear un modelo capaz de predecir el comportamiento del usuario (o sí), pero en todo caso, existen diferentes técnicas que nos permiten abordar el problema. En el caso del ejemplo que acabamos de ver, el modelo debería ser capaz de clasificar a los usuarios en dos clases diferentes, los que pulsarán y los que no pulsarán el anuncio de comida de ga…
Entradas recientes

Manipulación de datos con pandas

Cuando uno lee un libro o un artículo sobre machine learning encuentra multitud de explicaciones sobre el algoritmo tal o cual. Sin embargo, no se habla demasiado sobre la manipulación y el limpiado de los datos, que bajo mi punto de vista es tan o incluso más importante que utilizar el algoritmo adecuado. Nuestro aliado en esta tarea es la librería pandas.
En lugar de hacer un recorrido exhaustivo por las funcionalidades de la librería, he preferido hacer uso de ella con un dataset real, para poder ver así, no sólo cuáles son sus funcionalidades, sino también cómo se aplican a datos reales. Así pues, en lugar de usar un dataset de los clásicos, he recurrido a uno real sacado de la web de datos abiertos del Ayuntamiento de Málaga. En concreto vamos a trabajar con el siguiente dataset, que se corresponde con las lecturas energéticas de los cuadros eléctricos durante el mes de marzo de 2017: https://datosabiertos.malaga.eu/dataset/lecturas-cuadros-electricos-marzo-2017.
Como siempre os…

Reconocimiento de caracteres manuscritos con k-nn

En la entrada anterior introducimos el algoritmo k nearest neighbors o de los vecinos más cercanos. Os conté como funciona el algoritmo y os presenté un ejemplo que clasificaba puntitos en un espacio en dos dimensiones. Como sé que os quedasteis con ganas de más (sí, aún os oigo suplicar que os cuente más) vamos a poner a prueba al algoritmo k-nn para ver si es capaz de aprender a reconocer caracteres manuscritos (problema conocido como OCR o reconocimiento óptico de caracteres). Como en el anterior artículo, os dejo un enlace al notebook de Jupyter que he usado para escribir este post: https://github.com/albgarse/InteligenciaArtificial/blob/master/Machine%20Learning/KNN%20Image%20Classifier.ipynb
Para entrenar nuestro reconocedor de caracteres vamos a usar un dataset bastante conocido: MNIST. Desde esta web podéis descargar los cuatro archivos que lo componen:
train-images-idx3-ubyte.gz: imágenes de entrenamiento
train-labels-idx1-ubyte.gz: etiquetas de las imágenes de entrenamien…

Clasificación con k-nearest neighbors

En un artículo anterior hablamos de NumPy y me hubiera gustado completarlo con algún ejemplo concreto. Así que voy a aprovechar este artículo para presentaros un algoritmo muy usado en machine learning y de camino a ilustrarlo con código Python (y la librería NumPy).
El algoritmo k-nearest neighbors (abreviado como k-nn) o en español, k vecinos más cercanos, es un algoritmo conceptualmente sencillo y también fácil de implementar, pero que para ciertas tareas puede tener una eficacia más que razonable. En lo que sigue os voy a contar cómo funciona y lo vamos a implementar en Python. En un siguiente artículo, aplicaremos el algoritmo a un problema del mundo real.
K-nn pertenece a la familia de algoritmos de clasificación supervisada, es decir, que necesitan la intervención humana para realizar su aprendizaje. Esta familia de algoritmos son capaces de clasificar elementos dentro de una serie de categorías prefijadas. De forma genérica, esta tarea se llama entrenamiento, y consiste en o…

Breve introducción a las matrices con NumPy

La librería NumPy traslada la potencia de entornos como Matlab u Octave al lenguaje de programación Python. Acometer un proyecto de Machine Learning o IA requiere un manejo intensivo y eficaz de cálculo matricial, y NumPy pone a nuestra disposición toda esa potencia. La libraría dispone de un montón de herramientas y capacidades que no es posible acometer en un artículo como este, sin embargo, me dispongo a contaros lo más importante en cuanto al manejo de matrices con NumPy.

Empecemos por un ejemplo sencillo: vamos a crear una matriz.
import numpy as np matrix1 = np.matrix([[1, 2, 3, 4], [5, 6, 7, 8]]) print (matrix) [[1 2 3 4] [5 6 7 8]] La primera línea importa la librería para poder usarla en el programa y seguidamente se crea una matriz de dimensión 2x4. Alternativamente, podemos usar una sintaxis al estilo de Matlab.
matrix1 = np.matrix('1 2 3 4; 5 6 7 8') Existen otras tres funciones que nos facilitan la creación de matrices: zeros() crea una matriz inicializada con el…

Selección de atributos relevantes usando la entropía de Shannon

Hoy en día, la detección de amenazas está cada vez más ligada al aprendizaje automático. Si queremos que un IDS o un antivirus pueda lidiar con amenazas nuevas, además de métodos heurísticos hay que recurrir técnicas de clasificación, una parte importante de la IA. En los problemas de clasificación, una de las tareas a la que nos enfrentamos es seleccionar aquellos atributos que mejor describen la variable objetivo. Esto es, elegir aquellos atributos que aportan más información y tienen mayor correlación con la variable explicada. Por ejemplo, si queremos establecer la probabilidad de que alguien padezca cáncer de pulmón o no, una variable que va a ser muy significativa es si es fumadora. En el otro extremo, el color de los ojos de la persona, por poner un ejemplo muy claro, no aporta información relevante.

Detección de Malware usando los contadores hardware

Os dejo una parte de mi proyecto de fin de master (muchas gracias a Jordi Serra por ser mi director de proyecto). Se llama Anomaly Detection For Malware Identification Using Hardware Performance Counters.
La idea principal es que es posible, usando aprendizaje automático (machine learning), en concreto las técnicas de detección de anomalías, detectar comportamientos extraños en la ejecución de un software (normalmente el malware trata de desbordar la pila o algún buffer del programa). El algoritmo usa los contadores hardware de los micros modernos para analizar el comportamiento del ejecutable. Os dejo con el artículo.