Inteligencia Artificial

Cómo entrenar un modelo de Machine Learning con Scikit-learn

¿Quieres adentrarte en el fascinante mundo del Machine Learning pero te parece complicado? En este artículo te proponemos comenzar de forma sencilla, utilizando para ello una biblioteca de Python muy simple de instalar y estandarizada.

Publicado el 05 de Mayo de 2023
Compartir

Introducción

Con la cantidad de IAs que están lanzando en los últimos tiempos, cada una más sorprendente que la anterior, quizás te estés planteando entrar en este mundo, pero te parezca muy complicado y con un gran número de prerrequisitos, librerías e instalaciones imposibles.

Por eso hoy te traigo un pequeño recorrido por Scikit-learn, una biblioteca de Python muy simple de instalar, estandarizada y fácil de usar para que comiences tus primeros pasos en el increíble mundo del machine y deep learning, que es usada tanto por principiantes como por profesionales del sector que quieran hacer exploraciones rápidas.

En este artículo pretendo que aprendas cómo entrenar un modelo de Machine Learning con Scikit-learn, desde la creación y configuración hasta la ejecución del modelo, de forma que entiendas todo el proceso y te animes a seguir profundizando en este campo tan interesante.

Aprenderás también cómo seleccionar el modelo más adecuado para tu problema, cómo dividir tu conjunto de datos en conjuntos de entrenamiento y prueba, cómo optimizar el modelo y cómo evaluar la precisión del modelo.

¡Vamos a ello!


Qué es Scikit-learn y por qué es importante para ML

Scikit-learn es una biblioteca de aprendizaje automático de código abierto para el lenguaje de programación Python. Fue desarrollada por David Cournapeau como parte del proyecto Google Summer of Code en 2007. Desde entonces, se ha convertido en una de las bibliotecas de aprendizaje automático más populares y utilizadas en el mundo, debido a su facilidad de uso y gran cantidad de algoritmos de aprendizaje automático disponibles.

Resulta una herramienta imprescindible para cualquier científico de datos o desarrollador IA que trabaje con Python, como ya detallamos en nuestro Curso de Machine Learning supervisado con Scikit-learn.

Scikit-learn es importante para el Machine Learning por varias razones:

  • Es fácil de usar: Está diseñada para ser fácil de usar y de entender para cualquier persona que tenga conocimientos básicos de programación y estadística. Esto significa que puedes comenzar a usar Scikit-learn rápidamente y empezar a construir modelos de aprendizaje automático sin tener que preocuparte por detalles complejos de implementación.
  • Resulta muy completa: Además ofrece una amplia variedad de algoritmos de aprendizaje automático para resolver una amplia gama de problemas, desde la regresión lineal hasta el aprendizaje profundo. Y, también ofrece herramientas para la selección de características, la optimización de modelos y la evaluación de modelos.
  • Es de código abierto: Scikit-learn es de código abierto y es compatible con otros paquetes de Python de código abierto, lo que significa que los usuarios pueden personalizar y ampliar la biblioteca según sus necesidades. Además, también es fácil de integrar con otras herramientas y bibliotecas de Python, lo que la convierte en una herramienta imprescindible para cualquier desarrollador que trabaje en el campo de machine o deep learning.

Qué es un modelo de Machine Learning y cómo funciona

Un modelo de Machine Learning es un programa de ordenador que aprende a través de la experiencia. Es decir, se alimenta de un conjunto de datos de entrenamiento para aprender patrones y relaciones entre las variables que le permiten hacer predicciones precisas sobre nuevos datos.

Existen varios tipos de modelos de Machine Learning, pero todos comparten una estructura común. Primero, se definen las características o atributos que describen los datos de entrada. Estos pueden ser datos numéricos, categóricos, textuales, entre otros. A continuación, se define una función que mapea los datos de entrada a una salida deseada. Esta función se ajusta a los datos de entrenamiento y se utiliza para hacer predicciones sobre nuevos datos.

En el aprendizaje supervisado, el objetivo es aprender a predecir una variable de salida a partir de un conjunto de variables de entrada. Por ejemplo, en un problema de clasificación, el objetivo es predecir la clase a la que pertenece un objeto en función de sus características. En el aprendizaje no supervisado, el objetivo es descubrir patrones ocultos en los datos, sin tener una variable de salida definida.

Para ajustar la función que mapea los datos de entrada a una salida, se utiliza un algoritmo de aprendizaje. Los algoritmos de Machine Learning pueden ser paramétricos o no paramétricos. En los modelos paramétricos, se supone que la función de mapeo tiene una forma específica, definida por un conjunto de parámetros. Los valores de estos parámetros se ajustan a los datos de entrenamiento mediante técnicas de optimización, como el descenso del gradiente. En los modelos no paramétricos, la función de mapeo no tiene una forma específica, sino que se adapta a los datos de entrenamiento de forma más flexible.

Una vez que se ha ajustado el modelo a los datos de entrenamiento, se puede utilizar para hacer predicciones sobre nuevos datos. La precisión de las predicciones dependerá de la calidad de los datos de entrenamiento, la elección del modelo y los parámetros utilizados para ajustarlo. Por lo tanto, es importante realizar una evaluación cuidadosa del modelo y ajustar sus parámetros para obtener el mejor rendimiento posible en datos no vistos.

Aprende a desarrollar algoritmos de Machine Learning
Conviértete en un profesional de Machine Learning. Domina las habilidades y herramientas necesarias para implementar algoritmos de aprendizaje automático y Deep Learning en Python.
Comenzar gratis ahora

Preparación de los datos

Antes de empezar a entrenar un modelo de Machine Learning con Scikit-learn, es importante preparar los datos del dataset que se va a utilizar en el proceso. En esta sección veremos los pasos necesarios para cargar, analizar y preprocesar dichos datos.

Carga de los datos

El primer paso es cargar los datos en el formato adecuado para poder utilizarlos en Scikit-learn. Los datos pueden estar en diferentes formatos como CSV, Excel, JSON, etc. En este ejemplo, cargaremos los datos desde un archivo CSV utilizando la función read_csv de Pandas:

import pandas as pd

data = pd.read_csv("datos.csv")

Es importante asegurarse de que los datos se cargan correctamente y de que se han interpretado adecuadamente. Para ello, podemos utilizar algunas funciones de Pandas como head y describe:

print(data.head())

print(data.describe())

Análisis exploratorio de los datos

Una vez cargados los datos, es importante realizar un análisis exploratorio para conocer mejor las características de los datos y detectar posibles problemas como datos faltantes, valores atípicos, etc. Para ello, podemos utilizar diferentes herramientas de visualización y estadísticas descriptivas. Algunas de las funciones más útiles de Pandas para este propósito son:

import matplotlib.pyplot as plt

# Histograma de una columna
data["columna"].hist()

# Diagrama de cajas de varias columnas
data[["columna1", "columna2"]].boxplot()

# Diagrama de dispersión de dos columnas
plt.scatter(data["columna1"], data["columna2"])

Preprocesamiento de los datos

El último paso en la preparación de los datos es preprocesarlos para poder utilizarlos en el entrenamiento del modelo. Esto incluye la selección de las características relevantes, la normalización de los datos, la eliminación de datos faltantes, etc. En Scikit-learn, existen diferentes funciones y transformadores que nos permiten realizar estas tareas de forma sencilla. Algunas de las más comunes son:

from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.feature_selection import SelectKBest

# Normalización de los datos
scaler = StandardScaler()
X_norm = scaler.fit_transform(X)

# Eliminación de datos faltantes
imputer = SimpleImputer(strategy="mean")
X_imputed = imputer.fit_transform(X)

# Selección de las características más relevantes
selector = SelectKBest(k=10)
X_selected = selector.fit_transform(X, y)

Con estos pasos ya hemos preparado los datos para poder entrenar el modelo. En la siguiente sección veremos cómo seleccionar el modelo más adecuado para nuestro problema.

Selección del modelo

Una vez que se han preparado los datos, es necesario seleccionar un modelo de aprendizaje automático adecuado para el problema en cuestión. Scikit-learn ofrece una amplia variedad de modelos de aprendizaje automático que pueden ser utilizados para resolver diferentes tipos de problemas, desde clasificación hasta regresión y clustering.

Tipos de modelos en Scikit-learn

Scikit-learn ofrece una amplia variedad de modelos de aprendizaje automático. A continuación, se describen algunos de los más comunes:

  • Regresión lineal: es un modelo utilizado para predecir valores continuos, como por ejemplo el precio de una casa en función de su tamaño y ubicación.
  • Regresión logística: es un modelo utilizado para predecir valores binarios, como por ejemplo si un paciente tiene o no una enfermedad determinada en función de sus características.
  • Árboles de decisión: son modelos utilizados para clasificación y regresión. Se basan en la construcción de un árbol en el que cada nodo representa una característica y cada rama representa una posible respuesta a esa característica.
  • Random Forest: es un modelo que utiliza múltiples árboles de decisión para mejorar la precisión de las predicciones.
  • SVM (Support Vector Machines): es un modelo utilizado para clasificación y regresión. Busca encontrar el hiperplano que mejor separa las clases en el espacio de características.
  • Redes neuronales: son modelos inspirados en el cerebro humano y utilizados para problemas complejos de clasificación y regresión.
  • Clustering: son modelos utilizados para agrupar datos en diferentes grupos o clústeres en función de sus características.

Es importante tener en cuenta que cada modelo tiene sus propias ventajas y desventajas, y que la selección del modelo adecuado dependerá en gran medida del tipo de problema que se esté tratando de resolver y de las características de los datos.

Selección del modelo más adecuado para el problema

Una vez que se han identificado los tipos de modelos adecuados para el problema, es necesario seleccionar el modelo más adecuado para la tarea en cuestión. Para ello, se pueden seguir algunos de los siguientes pasos:

  1. Evaluar el rendimiento de varios modelos en un conjunto de datos de prueba utilizando diferentes métricas, como la precisión, el recall, el F1-score y la curva ROC.
  2. Analizar las características de los datos y del problema para determinar qué modelo es más adecuado. Por ejemplo, si los datos tienen muchas características y son no lineales, puede ser más adecuado utilizar una SVM o una red neuronal.
  3. Probar varios modelos con diferentes configuraciones y comparar su rendimiento. Scikit-learn ofrece la posibilidad de ajustar los hiperparámetros de los modelos utilizando la función GridSearchCV, que realiza una búsqueda exhaustiva en el espacio de parámetros y devuelve el modelo con la mejor configuración.

En general, la selección del modelo más adecuado para un problema de aprendizaje automático puede ser un proceso iterativo que implica probar diferentes modelos y configuraciones para encontrar el que mejor se adapte a los datos y al problema en cuestión.

Entrenamiento del modelo

Una vez que hemos seleccionado el modelo más adecuado para nuestro problema, es hora de entrenarlo con el conjunto de datos de entrenamiento que hemos preparado en la sección anterior.

División del conjunto de datos en entrenamiento y prueba

Antes de empezar a entrenar el modelo, debemos dividir nuestro conjunto de datos en dos partes: el conjunto de datos de entrenamiento y el conjunto de datos de prueba. La idea es utilizar el conjunto de datos de entrenamiento para ajustar los parámetros del modelo y luego utilizar el conjunto de datos de prueba para evaluar su rendimiento en datos que no ha visto antes.

En Scikit-learn, podemos utilizar la función train_test_split del módulo sklearn.model_selection para realizar esta división. Esta función recibe como entrada los datos que queremos dividir y el porcentaje que queremos utilizar para el conjunto de datos de prueba. Por ejemplo, si queremos utilizar el 30% de los datos para prueba, podemos llamar a la función de la siguiente manera:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

En este ejemplo, X e y son los datos que queremos dividir y test_size es el porcentaje que queremos utilizar para prueba (en este caso, el 30%). La función devuelve cuatro conjuntos de datos: X_train y y_train corresponden al conjunto de datos de entrenamiento, mientras que X_test e y_test corresponden al conjunto de datos de prueba.

Entrenamiento del modelo con el conjunto de datos de entrenamiento

Una vez que tenemos los conjuntos de datos de entrenamiento y prueba, podemos entrenar nuestro modelo utilizando los datos de entrenamiento. Para ello, simplemente tenemos que llamar al método fit del objeto que representa nuestro modelo. Por ejemplo, si estamos trabajando con un modelo de regresión lineal, podemos entrenarlo de la siguiente manera:

from sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(X_train, y_train)

En este ejemplo, hemos creado un objeto model que representa nuestro modelo de regresión lineal y lo hemos entrenado con los conjuntos de datos de entrenamiento X_train e y_train. Después de ejecutar esta línea de código, nuestro modelo estará ajustado a los datos de entrenamiento y podremos utilizarlo para hacer predicciones en nuevos datos.

Evaluación del modelo

Una vez que hemos entrenado nuestro modelo, es hora de evaluar su rendimiento en el conjunto de datos de prueba que hemos dejado aparte. Para ello, podemos utilizar el método score del objeto que representa nuestro modelo. Este método devuelve el coeficiente de determinación R² del modelo, que indica qué porcentaje de la variabilidad en los datos puede ser explicado por el modelo. Por ejemplo, si estamos trabajando con un modelo de regresión lineal, podemos evaluarlo de la siguiente manera:

score = model.score(X_test, y_test)

En este ejemplo, hemos llamado al método score del objeto model y le hemos pasado los conjuntos de datos de prueba X_test e y_test. La variable score contendrá el coeficiente de determinación R² del modelo en los datos de prueba. Cuanto más cercano a 1 sea este valor, mejor será el rendimiento.

Optimización del modelo

La optimización del modelo es una parte importante del proceso de entrenamiento de un modelo de Machine Learning. El objetivo de la optimización es ajustar los parámetros del modelo para mejorar su rendimiento y hacerlo más preciso. En esta sección, veremos algunos de los métodos más comunes para optimizar los modelos de Machine Learning en Scikit-learn.

Selección de hiperparámetros

Los hiperparámetros son parámetros que se definen antes del entrenamiento del modelo y que no son aprendidos durante el proceso de entrenamiento. Son parámetros que definen la estructura del modelo y afectan su capacidad de generalización. Algunos ejemplos comunes de hiperparámetros son la tasa de aprendizaje, el número de neuronas en una red neuronal o el número de árboles en un modelo de bosque aleatorio (de los que hablamos más en profundidad en el curso de big data de Machine Learning con modelos basados en árboles en Python).

La selección de hiperparámetros es una parte crítica del proceso de entrenamiento de un modelo de Machine Learning. La elección de hiperparámetros incorrectos puede llevar a un modelo ineficiente, poco preciso o incluso a un modelo que no funcione en absoluto. Por lo tanto, es importante seleccionar cuidadosamente los hiperparámetros adecuados para cada modelo y conjunto de datos.

Scikit-learn proporciona varias herramientas para seleccionar los hiperparámetros óptimos para un modelo de Machine Learning. Entre ellas se incluyen la búsqueda de cuadrícula y la búsqueda aleatoria. La búsqueda de cuadrícula es un método que prueba una serie de valores predefinidos para los hiperparámetros y devuelve el conjunto de hiperparámetros que produce el mejor rendimiento en un conjunto de validación. La búsqueda aleatoria es similar, pero en lugar de probar todos los valores, selecciona aleatoriamente una muestra de ellos y los prueba.

Validación cruzada

La validación cruzada es un método para evaluar el rendimiento de nuestro modelo. En lugar de dividir el conjunto de datos en un conjunto de entrenamiento y un conjunto de prueba, la validación cruzada divide el conjunto de datos en múltiples conjuntos de entrenamiento y prueba y evalúa el rendimiento del modelo en cada uno de ellos. Este enfoque es útil cuando el conjunto de datos es pequeño o cuando se desea evitar la aleatoriedad en la selección del conjunto de prueba.

Scikit-learn proporciona varias herramientas para realizar la validación cruzada. Entre ellas se incluyen la validación cruzada k-fold y la validación cruzada estratificada. La validación cruzada k-fold divide el conjunto de datos en k subconjuntos y evalúa el rendimiento del modelo en cada uno de ellos, utilizando k-1 subconjuntos para entrenar el modelo y el subconjunto restante para probarlo. La validación cruzada estratificada es similar, pero garantiza que la proporción de clases en cada subconjunto sea la misma que en el conjunto de datos original.

Curva de aprendizaje

La curva de aprendizaje es una herramienta para evaluar el rendimiento de un modelo de Machine Learning a medida que se aumenta el tamaño del conjunto de entrenamiento. La curva de aprendizaje muestra cómo el rendimiento del modelo mejora a medida que se aumenta el tamaño del conjunto de entrenamiento. Es útil para determinar si un modelo se beneficia de más datos y para evaluar la eficacia de los algoritmos de aprendizaje.

Prueba del modelo

Una vez que hemos entrenado y optimizado nuestro modelo de machine learning, es el momento de ponerlo a prueba con nuevos datos. La prueba del modelo es fundamental para comprobar que nuestro modelo es capaz de generalizar y hacer predicciones precisas con datos que no ha visto antes.

Predicción de nuevos datos

Para evaluar el rendimiento del modelo con nuevos datos, debemos utilizar un conjunto de datos de prueba diferente al conjunto de datos de entrenamiento. Este conjunto de datos de prueba debe ser representativo de los datos que encontrará el modelo en producción.

Una vez que tenemos nuestro conjunto de datos de prueba, podemos utilizar la función predict() del modelo para hacer predicciones con los datos de prueba. El resultado de la predicción será una lista de valores, que corresponden a la salida que el modelo ha predicho para cada entrada del conjunto de datos de prueba.

Evaluación de la precisión del modelo

Una vez que tenemos nuestras predicciones, necesitamos evaluar la precisión del modelo. Existen diversas métricas que se pueden utilizar para evaluar el rendimiento de un modelo, dependiendo del tipo de problema que estemos tratando. A continuación, se muestran algunas de las métricas más comunes:

  • Exactitud (accuracy): es la proporción de predicciones correctas respecto al total de predicciones realizadas. Se calcula como el número de predicciones correctas dividido entre el número total de predicciones.
  • Precisión (precision): es la proporción de predicciones positivas que son verdaderas positivas respecto a todas las predicciones positivas realizadas. Se calcula como el número de verdaderos positivos dividido entre el número de verdaderos positivos más falsos positivos.
  • Recuperación (recall): es la proporción de verdaderos positivos que son detectados como positivos respecto a todos los verdaderos positivos que existen en el conjunto de datos. Se calcula como el número de verdaderos positivos dividido entre el número de verdaderos positivos más falsos negativos.
  • Puntuación F1 (F1 score): es la media armónica entre precisión y recuperación. Se calcula como 2 veces el producto de precisión y recuperación dividido entre la suma de precisión y recuperación.

Para calcular estas métricas, podemos utilizar las funciones proporcionadas por la biblioteca Scikit-learn. Por ejemplo, para calcular la exactitud, podemos utilizar la función accuracy_score():

from sklearn.metrics import accuracy_score

y_pred = modelo.predict(X_test)
exactitud = accuracy_score(y_test, y_pred)
print(f'Exactitud: {exactitud}')

En este ejemplo, y_test es el conjunto de etiquetas correspondiente a los datos de prueba, y y_pred es el resultado de las predicciones realizadas por el modelo. La función accuracy_score() devuelve la exactitud del modelo.

Es importante recordar que la elección de la métrica adecuada depende del tipo de problema que estamos tratando. Por ejemplo, si estamos tratando un problema de clasificación desbalanceada, es posible que la precisión y la recuperación no sean las métricas adecuadas para evaluar el rendimiento del modelo. En estos casos, es recomendable utilizar otras métricas como el área bajo la curva ROC o la puntuación PR.

Mejora las habilidades de tus analistas de datos
En OpenWebinars lograrás que tu equipo se mantenga a la vanguardia en las últimas tecnologías para implementar y crear algoritmos de Machine Learning.
Solicitar más información

Conclusiones

En conclusión, Scikit-learn es una biblioteca de aprendizaje automático muy poderosa y versátil que puede utilizarse para resolver una amplia variedad de problemas de clasificación y regresión. Con la ayuda de estos modelos, se pueden tomar decisiones informadas basadas en datos, lo que puede ser beneficioso tanto para los negocios como para la investigación.

En este artículo, se ha cubierto el proceso completo de entrenamiento de un modelo de Machine Learning con Scikit-learn, desde la preparación de los datos hasta la evaluación y prueba del modelo entrenado. Se ha explicado cómo seleccionar y entrenar el modelo más adecuado para el problema, cómo optimizar los hiperparámetros y cómo evaluar el rendimiento del modelo.

También se ha mostrado cómo utilizar la biblioteca para cargar y preprocesar los datos, cómo dividir el conjunto de datos en entrenamiento y prueba, y cómo utilizar técnicas de validación cruzada y curvas de aprendizaje para optimizar el modelo.

Esperamos que este artículo haya sido útil para comprender mejor el proceso de entrenamiento de modelos, y recuerda que la práctica es esencial para dominar cualquier habilidad, por lo que te animamos a que sigas explorando y experimentando sus diferentes modelos y algoritmos.

Si quieres aprender más sobre Machine Learning, puedes suscribirte a nuestro Plan Profesional y disfrutar de los primeros 15 días de acceso gratuito, para acceder a todas las formaciones. Podrías comenzar realizadndo, por ejemplo, el Curso de Machine Learning supervisado con Scikit-learn, en el que nos adentraremos en más profundidad en esta biblioteca y toda su potencia.

Si lo que necesitas es formar a tu equipo, puedes solicitar una demostración gratuita de OpenWebinars, en la que podrás conocer de primera mano todos los beneficios que ofrecemos en cuanto a la formación de equipos.

Lo que deberías recordar de Machine Learning con Scikit-learn

  • Scikit-learn es una biblioteca de Machine Learning de código abierto para el lenguaje de programación Python.
  • Es una de las más populares debido a su facilidad de uso y gran cantidad de algoritmos de aprendizaje automático de los que dispone.
  • Un modelo de ML es un programa de ordenador que aprende a través de la experiencia, y lo hace a través de un conjunto de datos de entrenamiento para aprender patrones y relaciones entre las variables. Esto le permitirá hacer predicciones precisas sobre nuevos datos.
  • Antes de empezar a entrenar un modelo de Machine Learning es fundamental preparar los datos que se van a utilizar en el proceso. Esta preparación consta de varias fases: carga de datos, análisis exploratorio de los mismos y preprocesamiento de los datos.
  • Tras la preparación de los datos, se debe seleccionar un modelo de aprendizaje automático adecuado para el problema en cuestión. Scikit-learn ofrece una amplia variedad de estos modelos: regresión lineal o logística, árboles de decisión, clustering, redes neuronales…
  • Una vez elegido el modelo más adecuado, pasamos a entrenar el mismo con los datos preparados previamente, aplicando las optimizaciones necesarias para mejorarlo.

Compartir este post

También te puede interesar...

Tecnología

PyTorch 2.0: Innovaciones en el marco de trabajo de Machine Learning

13 Junio 2023 Jorge López Blasco
Azure ML

Curso de Azure Machine Learning

1 hora y 16 minutos · Curso

Con esta formación conocerás el servicio de Azure ML y detallar algunos aspectos del Machine Learning trabajando de manera práctica.

  • Azure
Artículos
Ver todos