Muestreo con Astartes#
Si alguna vez te has preguntado si una división aleatoria entrenamiento/prueba es realmente el mejor enfoque para datos espectroscópicos, no estás solo. Las divisiones aleatorias pueden dejar huecos en tu conjunto de calibración o, peor aún, colocar muestras muy similares en ambos conjuntos, lo que conduce a estimaciones de error excesivamente optimistas.
Astartes resuelve este problema. Es una biblioteca de Python que funciona como un reemplazo directo de sklearn.model_selection.train_test_split, pero con acceso a algoritmos de muestreo que realmente tienen sentido para la quimiometría: Kennard-Stone, SPXY y otros.
¿Por qué es importante esto?#
Kennard-Stone, por ejemplo, selecciona muestras que maximizan la cobertura de tu espacio espectral. En lugar de esperar que un sorteo aleatorio te dé un conjunto de calibración representativo, lo garantizas. Esto reduce el riesgo de extrapolación al predecir nuevas muestras.
SPXY va un paso más allá al considerar tanto los espectros (X) como los valores de referencia (y) al seleccionar muestras, lo cual es útil cuando tus valores y abarcan un amplio rango.
Muestreadores Disponibles#
Astartes agrupa sus muestreadores en dos categorías:
Interpolativo: las muestras se eligen para garantizar cobertura dentro del espacio de datos. Bueno para construir modelos de propósito general.
Extrapolativo: las muestras se agrupan en clústeres y se excluyen clústeres enteros. Esto prueba qué tan bien el modelo generaliza a regiones no vistas.
Aquí hay algunos de los muestreadores más útiles para datos espectroscópicos:
Muestreador |
Tipo |
Cuándo usarlo |
|---|---|---|
|
Interpolativo |
Comparación de referencia. Igual que el valor predeterminado de sklearn. |
|
Interpolativo |
El estándar para espectroscopía. Selecciona muestras que maximizan la cobertura del espacio X. |
|
Interpolativo |
Similar a Kennard-Stone, pero también considera los valores y. Excelente para transferencia de calibración. |
|
Extrapolativo |
Agrupa muestras, luego excluye clústeres completos. Prueba la generalización a nuevas regiones. |
|
Extrapolativo |
Excluye muestras dentro de un umbral de distancia. Útil para probar la robustez ante huecos en los datos. |
Para la lista completa (incluyendo muestreadores específicos de moléculas como Scaffold), consulta la página de GitHub de Astartes.
Combinación con Chemotools#
Las dos bibliotecas se complementan muy bien:
Chemotools maneja el preprocesamiento espectral (suavizado, corrección de línea base, derivadas, etc.).
Astartes maneja la selección de muestras incluso antes de que comiences a modelar.
Juntas, te proporcionan una tubería limpia y bien validada.
Ejemplo: División con Kennard-Stone#
Aquí tienes un ejemplo rápido. Cargamos algunos espectros, los dividimos con Kennard-Stone y luego los procesamos a través de una tubería de preprocesamiento:
from astartes import train_test_split
from chemotools.datasets import load_fermentation_train
from chemotools.baseline import AirPls
from sklearn.pipeline import make_pipeline
from sklearn.decomposition import PCA
# Load the data (returns pandas DataFrames)
X, y = load_fermentation_train()
# Split with Kennard-Stone instead of random
X_train, X_test, y_train, y_test = train_test_split(
X.values, # astartes expects numpy arrays
y.values,
train_size=0.75,
sampler='kennard_stone'
)
# Preprocess and reduce dimensionality
pipeline = make_pipeline(
AirPls(),
PCA(n_components=3)
)
pipeline.fit(X_train)
scores = pipeline.transform(X_test)
Si quieres incluir los valores y en la lógica de selección, simplemente cambia a sampler='spxy'.
Instalación#
Astartes no es una dependencia de chemotools, por lo que necesitarás instalarlo por separado:
pip install astartes
For more details, check out the Astartes documentation.