PyTorch 2.0: Innovaciones en el marco de trabajo de Machine Learning
¿Trabajas en el sector de Machine Learning y utilizas PyTorch? En ese caso deberías conocer ya todas las mejoras e innovaciones que...
¿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.
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!
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:
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.
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.
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())
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"])
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.
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.
Scikit-learn ofrece una amplia variedad de modelos de aprendizaje automático. A continuación, se describen algunos de los más comunes:
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
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.
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.
También te puede interesar
¿Trabajas en el sector de Machine Learning y utilizas PyTorch? En ese caso deberías conocer ya todas las mejoras e innovaciones que...
Con esta formación conocerás el servicio de Azure ML y detallar algunos aspectos del Machine Learning trabajando de...