Clasificación + optimización

Predicción de una variable categórica a partir de features numéricas (Random Forest supervisado) + búsqueda del óptimo global sobre función objetivo con evaluaciones costosas (optimización bayesiana Gaussian Process).

Descargar informe PDF

Dataset cargado

881 muestras · 9 features numéricas de entrada · variable objetivo categórica class. Fuente: UCI Nanoparticle Toxicity (público).

Distribución de la variable objetivo

ClaseN%
Toxic47654.0%
nonToxic40546.0%

Categorías del dataset

TipoN
ZnO594
TiO2200
CuO51
Al2O318
Fe2O318

Método aplicado — clasificación

Algoritmo

Random Forest Classifier (scikit-learn 1.9.1)

  • n_estimators = 200
  • criterion = "gini" (default)
  • max_depth = None (crecen hasta pureza)
  • bootstrap = True
  • random_state = 42 (reproducible)

Evaluación

Cross-validation 5-fold estratificada

  • Métrica: accuracy
  • Splits: 5 (80% train / 20% test cada uno)
  • Resultados por fold:

0.9721.0000.9550.7270.932

Ver código del pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score

features = ["coresize", "hydrosize", "surfcharge", "surfarea", "Ec", "Expotime", "dosage", "e", "NOxygen"]
X = df[features].values
y = LabelEncoder().fit_transform(df["class"])

clf = RandomForestClassifier(n_estimators=200, random_state=42, n_jobs=-1)
scores = cross_val_score(clf, X, y, cv=5, scoring="accuracy", n_jobs=-1)
clf.fit(X, y)

# Feature importance
importances = sorted(
    zip(features, clf.feature_importances_),
    key=lambda x: -x[1],
)

Resultado — clasificación

0.917
Accuracy media (CV)
±0.097
Desviación entre folds
881
Muestras entrenamiento
9
Features

Feature importance (top 9)

Feature importance
FeatureImportancia
dosage0.4241
NOxygen0.1754
e0.1071
Expotime0.0876
surfarea0.0801
coresize0.0390
Ec0.0307
surfcharge0.0295
hydrosize0.0265

Método aplicado — optimización bayesiana

Algoritmo

Gaussian Process + Expected Improvement (scikit-optimize 0.10.2)

  • Surrogate: Gaussian Process con kernel Matérn 5/2
  • Acquisition function: Expected Improvement (EI)
  • Initial random points: 5
  • Space: 4-D (mixto Real + log-uniform)

Función objetivo

Ejemplo sintético 4-D: parámetros de proceso → valor a minimizar.

  • fluencia [J/cm²]: [0.5, 5.0]
  • duración pulso [fs]: [50, 500] log
  • tasa repetición [kHz]: [10, 10 000] log
  • velocidad escaneo [mm/s]: [1, 30]
Ver código del pipeline
from skopt import gp_minimize
from skopt.space import Real

space = [
    Real(0.5, 5.0, name="fluencia"),
    Real(50, 500, name="pulso", prior="log-uniform"),
    Real(10, 10000, name="rep", prior="log-uniform"),
    Real(1, 30, name="vel"),
]

result = gp_minimize(
    objective_function,
    space,
    n_calls=30,
    n_initial_points=5,
    acq_func="EI",
    random_state=42,
)

Ejecutar optimización

Pulsar el botón para lanzar la optimización bayesiana. Cada evaluación de la función objetivo simula un experimento; la búsqueda encuentra el óptimo global en pocas iteraciones frente a búsqueda por grid.

Ejemplo precomputado sobre función objetivo sintética 4-D con 30 experimentos y acquisition function EI. Los resultados se generan al conectar el módulo con datos experimentales reales del grupo.

0.0658
Mejor f(x)
30
Experimentos
2.681
Mejora total

Mejores parámetros encontrados

ParámetroValor
fluencia [J/cm²]2.388
duración pulso [fs]500.000
tasa repetición [kHz]397.281
velocidad escaneo [mm/s]10.911

Dataset completo — navegable

Total: 881 filas · 11 columnas.

NPscoresizehydrosizesurfchargesurfareaEcExpotimedosageeNOxygenclass