Clasificador de Estados de la Materia
Este modelo de clasificación ha sido entrenado desde cero para predecir el estado físico de la materia (Sólido, Líquido, Gas, Plasma) en función de variables físico-químicas simuladas.
Objetivo del modelo
Predecir el estado físico de la materia con especial interés en detectar correctamente el estado basándose en el f1_score.
Características del modelo
- Tipo: Clasificación
- Algoritmo: SVM (Support Vector Machine) con kernel lineal
- Hiperparámetros:
C = 200kernel = linear
- Normalización previa:
MinMaxScaler() - Entrenado con datos sintéticos simulados
El modelo fue entrenado utilizando un dataset que se encuentra en Hugging Face: iabd04/estados_materia_dataset.
Variables de entrada
TemperaturaPresiónDensidadNivel_Energía
Todas las variables fueron normalizadas antes del entrenamiento.
Evaluación del modelo
- Métrica prioritaria: F1_Score
- Rendimiento superior con SVM Lineal frente a otros modelos (Logistic Regression, Árboles, kNN)
Requisitos
Para ejecutar este modelo, asegúrate de tener instaladas las siguientes librerías de Python:
scikit-learn
pandas
joblib
datasets(opcional para importar datasets desde Hugging Face)
O implementa/descarga el archivo requirements.txt.
¿Cómo ha sido creado y entrenado este modelo?
El modelo fue desarrollado y entrenado en un entorno de Google Colab utilizando datos sintéticos del dataset iabd04/estados_materia_dataset. El flujo de trabajo incluyó los siguientes pasos:
1. Carga y preprocesamiento de datos
- Importación del dataset desde Hugging Face.
- Selección de las variables de entrada (
Temperatura,Presión,Densidad,Nivel_Energía) y la variable objetivo (Estado). - Aplicación de una normalización con
MinMaxScaler()para escalar todas las variables entre 0 y 1.
from datasets import load_dataset
import pandas as pd
dataset = load_dataset("iabd04/estados_materia_dataset")
df = pd.DataFrame(dataset["train"])
X = df.drop(columns=["Estado"])
y = df["Estado"]
2. División del conjunto de datos
- Separación en subconjuntos de entrenamiento y prueba utilizando una proporción 80/20 mediante
train_test_split.
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
3. Entrenamiento del modelo
- Entrenamiento de un clasificador SVM con kernel lineal:
from sklearn.svm import SVC from sklearn.svm import SVC clf = SVC(kernel="linear", C=200) clf.fit(X_train, y_train) - El modelo se entrenó sobre los datos normalizados para maximizar su capacidad de generalización.
4. Evaluación del rendimiento
- Se utilizó la métrica F1-Score para evaluar el rendimiento en el conjunto de prueba.
- El modelo mostró un rendimiento superior frente a otros enfoques como regresión logística, árboles de decisión y k-vecinos más cercanos.
from sklearn.metrics import f1_score
y_pred = clf.predict(X_test)
score = f1_score(y_test, y_pred, average="weighted")
print("F1 Score:", score)
5. Exportación del modelo y del scaler
- El modelo final se guardó en un archivo
.joblibpara su uso posterior sin necesidad de reentrenar.
import joblib
joblib.dump(clf, "modelo_svm_estados_materia.joblib")
joblib.dump(scaler, "scaler.joblib")
Este pipeline permite reproducir fácilmente los resultados y adaptar el modelo a nuevos conjuntos de datos o condiciones experimentales.
Cómo entrenar el modelo en un entorno local
- Instala los requisitos:
pip install requirements.txt
- Asegúrate de tener el archivo
crear_entrenar_modelo.pydescargado en tu entorno local:
- entrenar_modelo.py
- Ejecuta la aplicación:
python crear_entrenar_modelo.py
Licencia
Este modelo se distribuye bajo la licencia Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0). Puedes usarlo libremente para fines académicos y no comerciales.