ScikitLearn: Introducción y entorno
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
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.