INTRODUCCIÓN AL APRENDIZAJE AUTOMATICO CON ‘SCIKIT-LEARN’ EN PYTHON.

El aprendizaje automático es una rama de la inteligencia artificial, la cual, se ha convertido en una herramienta esencial en la resolución de problemas y la toma de decisiones en una amplia variedad de campos. Desde la detección de fraudes hasta la recomendación de productos y la visión por computadora, el aprendizaje automático desempeña un papel crucial en la automatización de tareas complejas. Python, con su rica colección de bibliotecas, es uno de los lenguajes más populares para trabajar en aprendizaje automático, y ‘scikit-learn‘ es una de las bibliotecas más destacadas en este campo.

En este artículo, exploraremos los conceptos básicos del aprendizaje automático y cómo puedes comenzar a usar ‘scikit-learn‘ para crear tus propios modelos de aprendizaje automático en Python.

¿QUE ES EL APRENDIZAJE AUTOMATICO?

El aprendizaje automático es una disciplina que se enfoca en el desarrollo de algoritmos y modelos que permiten a las computadoras mejorar su rendimiento en tareas específicas a través de la experiencia. En lugar de programar reglas explícitas para realizar una tarea, el aprendizaje automático permite a las máquinas aprender de los datos y hacer predicciones o tomar decisiones basadas en esa experiencia. Este proceso suele constar de una serie de pasos que, a continuación, pasamos a enumerar:

1- Recopilación de datos: Reunir un conjunto de datos que contenga ejemplos y etiquetas. Los ejemplos son las entradas, y las etiquetas son las salidas deseadas.

2- Preprocesamiento de datos: Limpiar, normalizar y transformar los datos para que sean adecuados para su uso en modelos de aprendizaje automático.

3- Selección del modelo: Elegir el tipo de modelo de aprendizaje automático adecuado para la tarea, como regresión, clasificación o clustering.

4- Entrenamiento del modelo: Utilizar los datos de entrenamiento para ajustar los parámetros del modelo y permitir que «aprenda» de estos.

5- Evaluación del modelo: Probar el modelo en un conjunto de datos de prueba para evaluar su rendimiento.

6- Predicción y toma de decisiones: Utilizar el modelo entrenado para hacer predicciones o tomar decisiones en función de nuevos datos.

EJEMPLO DE USO DE ‘SCIKIT-LEARN’.

scikit-learn, a menudo abreviado como ‘sklearn‘, es una biblioteca de código abierto ampliamente utilizada en la comunidad de Python para el aprendizaje automático. Proporciona una amplia gama de algoritmos y herramientas para tareas comunes de aprendizaje automático, como clasificación, regresión, clustering y reducción de dimensionalidad. A continuación, veremos cómo comenzar a trabajar con ‘scikit-learn‘.

Para poder empezar a trabajar con ‘scikit-learn‘ antes deberemos realizar la oportuna instalación de esta librería en nuestro sistema:

Una vez hecha la instalación pasaremos a ver un sencillo ejemplo en el que nos propondremos a crear un modelo para clasificar flores, para el cual usaremos el conjunto de datos ‘Iris‘ y el algoritmo ‘K-Nearest Neighbors (KNN)‘. Para ello, empezaremos importando los recursos de ‘scikit-learn‘ que vamos a necesitar. Donde ‘datasets‘ contiene conjuntos de datos de ejemplo, ‘train_test_split‘ se utiliza para dividir los datos en conjuntos de entrenamiento y prueba, y ‘KNeighborsClassifier‘ es una implementación del algoritmo de ‘K-Nearest Neighbors (KNN)‘ para clasificaciones:

Tras ello, pasamos a cargar el conjunto de datos ‘Iris‘ (el cual, se utiliza habitualmente en ejemplos de aprendizaje automático). En este conjunto, ‘iris.data‘ contendrá las características (o atributos) de las flores, e ‘iris.target‘ contendrá las etiquetas (las clases) que nos indican a que especie de flor pertenece cada conjunto de atributos. Estos datos se almacenarán en la variable ‘X‘ y las etiquetas en la variable ‘y‘:

Una vez que tenemos los datos con los que vamos a trabajar, el siguiente paso será dividir estos datos en un conjunto de entrenamiento (‘X_train‘ e ‘y_train‘) y otro para probar el modelo entrenado (‘X_test‘ e ‘y_test‘). Para establecer esta división usaremos el método ‘train_test_split()‘ en donde mediante el argumento ‘test_size = 0.2‘ estaremos indicando que queremos emplear el 20% de los datos como datos de prueba ( y por tanto, el 80% como datos de entrenamiento ):

A partir de esta división de los datos en conjuntos de entrenamiento y prueba, podemos proceder a la creación entrenamiento y prueba de nuestro modelo:

Para ello, empezamos creando un clasificador ‘KNN‘ (que guardamos en la variable ‘knn‘) con un valor de ‘n_neighbors‘ igual a 3. Indicándole al algoritmo ‘KNN‘ que considere los tres vecinos más cercanos para tomar una decisión de clasificación. Tras ello, usaremos el método ‘fit‘ del clasificador ‘KNN‘ para entrenar el modelo a partir del conjunto de datos de entrenamiento. De esta forma, el modelo aprenderá a asignar los datos de entrada ‘X_train‘ a las etiquetas correspondientes de ‘y_train‘.

Una vez que nuestro modelo esté entrenado, pasaremos a realizar las predicciones. Para ello, podremos utilizar el método ‘predict()‘ que realizará las predicciones en el conjunto de prueba ‘X_test‘, almacenándose estas en la variable ‘predictions‘:

OUTPUT:

Finalmente, calculamos la precisión del modelo comparando las predicciones con las etiquetas reales de prueba ‘y_test‘, mediante el método ‘.score()‘. Mostrándose el grado de precisión:

OUTPUT:

CONCLUSION:

scikit-learn‘ es una muy útil librería para el aprendizaje automático en Python, la cual, permite crear modelos de manera sencilla y eficaz. Este artículo ha proporcionado una introducción básica al aprendizaje automático y cómo empezar a trabajar con ‘scikit-learn‘. A medida que explores más, descubrirás que esta librería ofrece una amplia gama de algoritmos y herramientas para abordar una variedad de problemas de aprendizaje automático. ¡Así que no dudes en sumergirte en el emocionante mundo del aprendizaje automático con Python y scikit-learn!

Saludos

AJUSTE DE BRILLO Y CONTRASTE EN IMAGENES, CON ‘OpenCV’ Y ‘Python’.

El ajuste de brillo es una técnica común en el procesamiento de imágenes y visión por computadora. Permite corregir imágenes oscuras, realzar detalles en imágenes sobreexpuestas y ajustar la calidad visual en diversas aplicaciones, como fotografía, detección de objetos y más. En este artículo, exploraremos cómo ajustar el brillo de una imagen utilizando ‘OpenCV‘ y Python. Mostrando varios ejemplos para que puedas comprender y aplicar esta técnica de manera efectiva. Como es habitual, utilizaremos una imagen de muestra para realizar las operaciones:

Como es habitual, antes de empezar deberemos asegurarnos de tener instalados los recursos y librerías necesarios para efectuar las operaciones que queremos realizar. Para esta ocasión, deberemos instalar previamente (si no lo hemos hecho ya) las librerías ‘OpenCV‘ (para manipulación de imágenes) y ‘Numpy‘ (para trabajar con arreglos):

Una vez que tengamos instalado todo lo necesario para trabajar, crearemos un nuevo archivo ‘ajuste_brillo.py‘ en el que empezaremos importando las librerías necesarias para, a continuación, cargar la imagen original (bien introduciendo el nombre de la misma si se encuentra en el mismo directorio del de trabajo, bien introduciendo la ruta hasta la misma en caso contrario):

Una vez cargada la imagen, podremos empezar a ajustar el brillo de la misma. Para ello existen dos funciones en ‘OpenCV‘: ‘cv2.add()‘ con la que podremos incrementar el brillo de la imagen y ‘cv2.subtract()‘ para disminuirlo. Ambas funciones toman dos argumentos: El nombre de la imagen fuente, una matriz que contiene valores de brillo (matriz creada con ‘numpy‘) la cual multiplicaremos por un factor de incremento o decremento de brillo. Empecemos con un ejemplo en el que vamos a incrementar el brillo de la imagen original mediante la función ‘cv2.add()‘ y un factor de incremento de 50, almacenado en la variable ‘brightness_increase‘:

OUTPUT:

Tal y como hemos señalado, podemos disminuir el brillo de nuestra imagen, usando la función ‘cv2.subtract’, multiplicando la matriz de la imagen original por un factor de decremento (variable brightness_decrease‘) de 50. Como en el caso anterior, usaremos la función ‘cv2.imshow()‘ para mostrar tanto la imagen original como su versión modificada:

OUTPUT:

Por otra parte, el ajuste de brillo por sí solo puede no ser suficiente en algunos casos. Para un control más completo, podemos combinar el ajuste del brillo con el del contraste. Para ello podemos usar la función ‘cv2.convertScaleAbs()‘. Esta función toma tres argumentos: la imagen, el factor de escala para el contraste (alpha) y el valor de desplazamiento para el brillo (beta). A continuación mostramos dos ejemplos en los que aumentamos y disminuimos el brillo y contraste de nuestra imagen fuente:

OUTPUT:

OUTPUT:

Como se ve, es muy fácil el efectuar el ajuste de brillo y contraste sobre una imagen usando Python y la librería ‘OpenCV‘. Estos ajustes son útiles en diversas aplicaciones, desde el mejoramiento de imágenes hasta la visión por computadora. A partir de aquí puedes experimentar con los ejemplos proporcionados y personalizar los valores para obtener los resultados deseados en tus imágenes.

Saludos.

PROGRAMANDO COMPRESOR DE CARPETAS EN «ZIP» EN PYTHON, CON «zipfile» Y «PyQt5».

En el día de hoy os traemos una de esas aplicaciones que, de vez en cuanto, nos gusta hacer, poniendo en práctica los conocimientos ya adquiridos en artículos anteriores. La propuesta de esta semana consiste en crear una aplicación (cuyo código completo podéis consultar en el enlace que dejamos al final del artículo) que nos permita comprimir una carpeta en un archivo de extensión «.zip«, pudiendo navegar por nuestro sistema de archivos para seleccionar la carpeta a comprimir.

Para la confección de nuestra aplicación, 2 son las librerías principales (de las que ya hemos hablado en sendos artículos) que vamos a usar: «zipfile«, mediante la que realizaremos la compresión de los archivos de la carpeta que vayamos a seleccionar y «PyQt5«, con la que elaboraremos la interfaz que nos permitirá navegar por nuestro sistema de carpetas para seleccionar dicha carpeta a comprimir.

Instalación de ‘PyQt5’ y ‘zipfile’.

Una vez que tengamos listos, los recursos a utilizar, comenzaremos a escribir nuestra aplicación. La cual (tal y como se puede intuir viendo la imagen) nos mostrará en vista de árbol las carpetas (y el contenido de estas) que tenemos en nuestro sistema a partir de un directorio raiz (el cual podremos cambiar con el botón «Cambiar Directorio«) de modo que, una vez seleccionada una carpeta, podamos crear su versión «zip», donde queramos usando el botón «Crear ZIP«.

Así, lo primero que vamos a hacer es empezar a desarrollar nuestra aplicación empezando por crear la vista en árbol que nos permitirá movernos por nuestro sistema de carpetas. Para ello empezaremos importando las librerías y módulos que vamos a necesitar:

Tras ello, definiremos la clase «FileSystemView()«, con la que crearemos la vista de los archivos de nuestro sistema, mostrando en la parte superior, la ruta al directorio actual, estableciendo parámetros tales como las dimensiones de la ventana (con la función «setGeometry()«), el sistema de archivos, para a continuación, usar la función «QTreeView()» para mostrar las carpetas y archivos:

OUTPUT:

Dado que nuestra intención es poder movernos por todo el sistema de carpetas (para elegir la carpeta que queremos comprimir) y al abrirse la aplicación, esta muestra las carpetas del directorio de ejecución, nos interesa poder cambiar dicho directorio inicial. Por ello, crearemos un botón que nos permita dicho cambio y asociar a este, una función ( a la que llamaremos «changeDirectory()«):

OUTPUT:

De este modo ya podremos navegar por nuestro sistema de archivos y carpetas. No obstante el objetivo de nuestra aplicación es el de generar archivos «zip» de una carpeta que seleccionemos. Para ello incluiremos un segundo botón que nos permita dicha operación (la cual se efectuará mediante el empleo de la librería «zipfile«):

Finalmente, que duda cabe que para ello, necesitaremos definir una nueva función ( a la que hemos llamado «createZip()«) que se encargará de recorrer los archivos y subcarpetas de la carpeta a comprimir, escribiendo el nuevo archivo de extensión «.zip«) el cual, podremos guardar en el directorio que elijamos (usando la función «getExistingDirectory()«):

La referida función nos permitirá la creación de nuestro archivo comprimido, utilizándose, a su vez, «QMessageBox.information()» para mostrar una ventana emergente al finalizar el proceso:

De modo que una vez hecha la operación, podremos ver en el directorio de destino elegido, la nueva carpeta comprimida:

Con esto tendríamos creada nuestra sencilla aplicación para comprimir carpetas utilizando la librería gráfica «PyQt5» y «zipfile«. Cuyo código completo está a vuestra disposición en el siguiente enlace:

https://github.com/antonioam82/PyQtZip/blob/main/pyqtzip.py

Saludos.

USANDO «CHATGPT» DESDE PYTHON.

ChatGPT es la herramienta de IA más popular con la que podemos chatear, obteniendo respuestas que sorprenden por su grado de coherencia y precisión. Una herramienta online a cuyas funcionalidades principales podemos acceder directamente a través de Python y una librería creada con ese propósito: «openai» y de cuyo manejo más básico hablaremos hoy, empezando por su instalación en nuestro sistema, que realizaremos, como venimos haciendo, con el comando «pip«:

Hecho esto, ya tendremos nuestra librería lista para ser usada en Python. Sin embargo, debemos tener en cuenta que para acceder a las respuestas de «ChatGPT» necesitamos una «API Key«, consistente en una clave que generaremos abriéndonos una cuenta en la API, para la que deberemos usar nuestro correo y número de teléfono para verificar:

Una vez creada la cuanta nos dirigiremos a la sección «View API Key» para nuestra clave de aplicación, que deberemos usar en nuestro script de Python.

Hecho ello, ya podemos empezar a usar Python para acceder a ChatGPT. Para ello, empezaremos creando un archivo (al que llamaremos «chat.py«) en el que empezaremos importando la librería instalada «openai» y definiendo la variable «key» que será igual a la clave que hayáis generado para la API:

Hecha la importación y establecida la clave, podremos realizar nuestra primera consulta desde Python, en pocas líneas de código:

Como se ve, lo primero que hacemos es definir la variable «prompt» a través de la cual, introduciremos la pregunta o mensaje que queramos enviar a ChatGPT. Por su parte, la variable «completion» contendrá la respuesta que recibamos de la aplicación, para la que tendremos que especificar las variables «engine» (el nombre del modelo entrenado que queramos usar, pudiéndose consultar estos modelos en la página de la API), «prompt» (el mensaje que queremos enviar) y «max_tokens» (mediante el que especificaremos la extensión máxima de la respuesta que queramos recibir. Para mostrar el mensaje usaremos «choices[0]» para obtener el primer mensaje generado. Con ello podremos pasar a ejecutar nuestro programa para realizar nuestra primera consulta:

OUTPUT:

Tal y como lo hemos escrito, nuestro programa finalizará una vez obtenida la respuesta. No obstante, podemos usar un bucle que nos permita hacer preguntas a la aplicación de modo indefinido hasta introducir un determinado caracter o string («END» en nuestro ejemplo):

OUTPUT:

Y de este sencillo modo podremos realizar consultas a «ChatGPT» directamente desde nuestra terminal utilizando nuestro lenguaje Python. Para más información acerca de las opciones que ofrece y de su uso, tenéis más información en la página del proyecto:

https://pypi.org/project/openai/

https://github.com/antonioam82/ChatPy

Saludos.