ScikitLearn: Introducción y entorno

Aprende ScikitLearn GRATIS y certifícate

Scikit Learn es una biblioteca de Python especializada en aprendizaje automático que ofrece un conjunto amplio de algoritmos y utilidades enfocadas a la clasificación, regresión, clustering y reducción de dimensionalidad. Su enfoque principal se basa en la facilidad de uso y la consistencia de sus interfaces, por lo que resulta adecuada para proyectos académicos y profesionales. El flujo de trabajo típico con Scikit Learn implica la carga y preparación de datos, la selección de un modelo, el entrenamiento y la posterior evaluación mediante métricas especializadas. La comunidad que mantiene esta biblioteca actualiza el proyecto constantemente y procura la integración con librerías populares como NumPy y pandas.

Scikit Learn ofrece una organización interna basada en módulos temáticos. Entre los más relevantes se encuentran sklearn.datasets para cargar conjuntos de datos, sklearn.preprocessing para el tratamiento de valores y escalas, sklearn.model_selection para la división y validación de datos, sklearn.metrics para la obtención de estadísticas de rendimiento, y una variedad de submódulos de algoritmos como sklearn.linear_model, sklearn.ensemble o sklearn.cluster. Esta estructura coherente posibilita que cada usuario de la biblioteca encuentre fácilmente la funcionalidad que necesita.

La instalación se realiza de manera sencilla con herramientas como pip (pip install scikit-learn) o conda (conda install scikit-learn). Además, se recomienda poseer una versión reciente de Python y actualizar NumPy, SciPy y pandas para garantizar la compatibilidad de las funciones avanzadas. Todas estas utilidades, en conjunto, proporcionan un entorno de trabajo robusto para el desarrollo de proyectos de análisis de datos y sistemas predictivos.

Carga y manipulación de datos

Scikit Learn incorpora el submódulo sklearn.datasets que contiene funciones para la carga de conjuntos de datos clásicos como Iris, Digits o Boston (actualmente reemplazado por conjuntos de datos sin información sensible). Para cargar estos datos se emplean métodos como load_iris() que devuelven un objeto tipo Bunch con los atributos data y target. Cuando se trata de datos personalizados, se suelen usar librerías como pandas para leer ficheros CSV y luego convertir el resultado en arrays de NumPy, compatibles con la mayoría de los estimadores de Scikit Learn.

Una vez cargados los datos, es habitual separar las características (X) de las etiquetas (y) y dividir los conjuntos de entrenamiento y validación. Un ejemplo sintético sería:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris = load_iris()
X = iris.data
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

La partición de los datos en subconjuntos de entrenamiento y prueba permite evaluar la capacidad del modelo de generalizar más allá de los datos vistos. El uso de train_test_split es frecuente y una de las formas más comunes de organizar el proceso de experimentación.

Preprocesamiento y escalado

El preprocesamiento es vital cuando se trabaja con datos en bruto, ya que a menudo requieren limpieza, normalización y manejo de valores faltantes. Dentro de Scikit Learn se dispone del submódulo sklearn.preprocessing, que proporciona transformadores como StandardScaler, MinMaxScaler, RobustScaler y herramientas para la codificación de variables categóricas.

StandardScaler ajusta la media y desviación típica de los datos para que cada característica se centre en torno a 0 y presente una varianza unitaria. Su uso puede verse reflejado en el siguiente ejemplo:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaler.fit(X_train)  
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)

La normalización de las variables hace que los algoritmos de optimizaciones numéricas converjan de forma más estable y equitativa. Asimismo, para valores categóricos, existen utilidades como OneHotEncoder que generan columnas binarias sin introducir sesgos al tratar valores nominales.

Selección y validación de modelos

El módulo sklearn.model_selection proporciona funciones esenciales para la evaluación y optimización de modelos. Entre ellas se encuentra GridSearchCV, que automatiza la búsqueda exhaustiva de hiperparámetros dentro de un rango definido, y RandomizedSearchCV, que selecciona aleatoriamente combinaciones específicas para optimizar el tiempo de cómputo.

Otra característica relevante es la validación cruzada, que se efectúa con métodos como KFold, StratifiedKFold o cross_val_score. Estas herramientas permiten estimar de forma más estable el rendimiento real de un modelo, dado que se utilizan distintos subconjuntos de entrenamiento y validación en iteraciones sucesivas.

La combinación de validación cruzada y búsqueda de hiperparámetros resulta una estrategia muy útil en la práctica, ya que se logra un mejor equilibrio entre ajuste (overfitting) y generalización. El siguiente ejemplo muestra una búsqueda en rejilla con un árbol de decisión:

from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier

param_grid = {'max_depth': [2, 4, 6, None], 
              'min_samples_split': [2, 5, 10]}

clf = DecisionTreeClassifier()
grid_search = GridSearchCV(clf, param_grid, cv=5)
grid_search.fit(X_train, y_train)
print("Mejor combinación de hiperparámetros:", grid_search.best_params_)

Módulos de clasificación

Scikit Learn ofrece numerosos algoritmos de clasificación, cada uno enfocado a diferentes situaciones y tipos de datos. Ejemplos habituales incluyen LogisticRegression (regresión logística), SVC (máquinas de vectores soporte), KNeighborsClassifier (k-vecinos más cercanos), RandomForestClassifier (bosque aleatorio), y GaussianNB (naive Bayes). La mayoría de estos modelos comparten la misma interfaz: se instancian, entrenan con el método fit y realizan predicciones con el método predict.

El submódulo sklearn.linear_model contiene LogisticRegression, que implementa un método de aprendizaje lineal simple y efectivo para problemas de clasificación binaria y multiclase. Mientras tanto, el submódulo sklearn.svm alberga SVC, que puede utilizar distintos tipos de kernels para separar datos de manera lineal o no lineal.

El ajuste de cada modelo con fit y la predicción con predict se hace de forma muy intuitiva:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(X_train_scaled, y_train)
predictions = model.predict(X_test_scaled)

La evaluación de la precisión y otras métricas se realiza posteriormente con funciones del módulo sklearn.metrics.

Módulos de regresión

Los métodos de regresión de Scikit Learn se agrupan, en su mayoría, en el submódulo sklearn.linear_model y otros como sklearn.ensemble. Entre los más comunes se encuentran LinearRegression para ajustar un modelo lineal clásico, Ridge y Lasso para regularizar la magnitud de los coeficientes, y RandomForestRegressor para métodos basados en ensamblado de árboles.

La idea subyacente es similar a la de los algoritmos de clasificación: se instancian los objetos, se entrenan con fit usando datos de entrada (X) y valores objetivo continuos (y), y se generan predicciones con predict. Por ejemplo:

from sklearn.linear_model import LinearRegression

reg = LinearRegression()
reg.fit(X_train_scaled, y_train)
y_pred = reg.predict(X_test_scaled)

Estos modelos pueden evaluarse usando métricas como el error cuadrático medio (mean_squared_error) o el coeficiente de determinación R². En combinación con el preprocesamiento adecuado, permiten afrontar problemas de pronóstico de valores de manera sistemática.

Módulos de clustering

El aprendizaje no supervisado abarca el clustering, cuya meta es agrupar instancias sin conocer de antemano sus categorías. Scikit Learn dispone de algoritmos como KMeans, DBSCAN y AgglomerativeClustering, presentes en sklearn.cluster. KMeans agrupa muestras por cercanía a centroides, mientras que DBSCAN se basa en densidades locales y AgglomerativeClustering construye un árbol jerárquico de agrupaciones.

Los métodos no supervisados de Scikit Learn también mantienen la interfaz genérica de fit o fit_predict. Con KMeans, por ejemplo, se definen la cantidad de clusters, se invoca fit y se obtienen las etiquetas asignadas a cada muestra.

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
labels = kmeans.labels_

Este tipo de técnicas se suele complementar con transformaciones de reducción de dimensionalidad para visualizar los grupos de manera clara o extraer relaciones subyacentes en los datos.

Módulos de reducción de dimensionalidad

En sklearn.decomposition se encuentran métodos para reducir la dimensión de los datos y facilitar la exploración o el preprocesamiento. Destaca PCA (análisis de componentes principales), que busca combinar variables correlacionadas en un conjunto menor de componentes ortogonales. Esto puede mejorar la eficiencia de modelos complejos y aliviar problemas de sobreajuste si se realiza un uso apropiado de la varianza retenida.

En otros casos, técnicas como TruncatedSVD o métodos de descomposición de matrices pueden aplicarse a datos dispersos o a problemas específicos de procesamiento de texto. Estas herramientas permiten extraer información relevante y, al mismo tiempo, descartar detalles redundantes que no aportan valor en modelos predictivos.

Módulos de pipelines y composición de modelos

El submódulo sklearn.pipeline ofrece la clase `Pipelin

Empezar curso de ScikitLearn

Lecciones de este módulo de ScikitLearn

Lecciones de programación del módulo Introducción y entorno del curso de ScikitLearn.

Ejercicios de programación en este módulo de ScikitLearn

Evalúa tus conocimientos en Introducción y entorno con ejercicios de programación Introducción y entorno de tipo Test, Puzzle, Código y Proyecto con VSCode.