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 PDFDataset 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
| Clase | N | % |
|---|---|---|
| Toxic | 476 | 54.0% |
| nonToxic | 405 | 46.0% |
Categorías del dataset
| Tipo | N |
|---|---|
| ZnO | 594 |
| TiO2 | 200 |
| CuO | 51 |
| Al2O3 | 18 |
| Fe2O3 | 18 |
Método aplicado — clasificación
Algoritmo
Random Forest Classifier (scikit-learn 1.9.1)
n_estimators = 200criterion = "gini"(default)max_depth = None(crecen hasta pureza)bootstrap = Truerandom_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
Feature importance (top 9)
| Feature | Importancia |
|---|---|
dosage | 0.4241 |
NOxygen | 0.1754 |
e | 0.1071 |
Expotime | 0.0876 |
surfarea | 0.0801 |
coresize | 0.0390 |
Ec | 0.0307 |
surfcharge | 0.0295 |
hydrosize | 0.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] logtasa repetición [kHz]: [10, 10 000] logvelocidad 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.
Mejores parámetros encontrados
| Parámetro | Valor |
|---|---|
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.
| NPs | coresize | hydrosize | surfcharge | surfarea | Ec | Expotime | dosage | e | NOxygen | class |
|---|