main
ifiguero 2024-12-06 22:51:20 -03:00
parent a56a9b1d4e
commit 7e3320cfda
3 changed files with 61 additions and 5 deletions

View File

@ -1,2 +1,58 @@
# mody_2024
# Código y Dataset de MODY
La siguiente tiene los codigos en python para entrenar modelos y el dataset ya pre-procesado para cargarlo al pipeline.
## Instalación de pre requisitos.
Se requiere `conda` para generar el ambiente con las dependencias:
```
conda create -n mody python=3.10 scikit-learn imbalanced-learn xlsxwriter openpyxl pandas xgboost progressbar2 conda-forge::shap ray-tune tensorflow-gpu keras tensorboard conda-forge::keras-tuner matplotlib
```
Luego de que instale el ambiente debería dejas las instrucciones para activarlo
```
conda activate mody
```
## Ejecución del Pipeline
El archivo `train.py` tiene un ejemplo de pipeline. Para ejecutarlo solo debe:
```
python train.py
```
## Estructura del pipeline
La función `load_data` lee el archivo `MODY_data.xlsx` que contiene la base de datos pre, procesada. En caso que no exista debe poseer un archivo de base de datos `HC.xlsx` para generarlo.
```python
df_mody1, df_mody2, df_mody3, df_mody5 = load_data()
```
Esto devuelve 4 dataframes cada uno conteniendo el dataset completo. Luego creamos un Objeto `BinaryTuner` que contiene las abstracciones para generar los 10 dataset y probar los 10 estrategias de aprendizaje automático. Recibe multiples parametros, siendo el primero el nombre de la columna objetivo, numero de semillas o vector con semillas y proporción del conjunto de pruebas.
```
mody2 = BinaryTuner(dms2, 'MODY2_label', seeds=[231964], drop_ratio=0.2)
```
Esto crea un directorio llamado como la columna objetivo que contiene los registros, modelos e imagenes que se generen en adelante. Esto presenta una restricción si se quiere hacer pruebas con otros dataset con una columna objetivo que tnga el mismo nombre. Se debe tener cuidado verificar que el directorio no existe antes de comenzar un entrenamiento desde cero.
```python
mody2.fit()
```
Entrena todos los modelos, para todos los conjuntos de prueba.
```python
mody2.explain_model('GaussianNB', 'fulldataset-oversampled-mice', 231964)
```
Se generan las graficas SHAP para el modelo/dataset/semilla indicadas.
```python
mody2.wrap_and_save()
```
metodo auxiliar. Crea un zip comprimido con el contenido del directorio asociado. El archivo contiene un timestamp para evitar colisiones en subsecuentes ejecuciones.

View File

@ -7,13 +7,13 @@ warnings.filterwarnings("ignore")
_, dms2, dms3, _ = load_data()
mody2 = BinaryTuner(dms2, 'MODY2_label', seeds=[231964], drop_ratio=0.2)
mody2 = BinaryTuner(dms2, 'MODY2_label', seeds=[231964], test_size=0.2)
mody2.fit()
mody2.explain_model('GaussianNB', 'fulldataset-oversampled-mice', 231964)
mody2.wrap_and_save()
mody3 = BinaryTuner(dms3, 'MODY3_label', seeds=[536202], drop_ratio=0.2)
mody3 = BinaryTuner(dms3, 'MODY3_label', seeds=[536202], test_size=0.2)
mody3.fit()
mody3.explain_model('RandomForestClassifier', 'fulldataset-original-mice', 536202)
mody3.wrap_and_save()

View File

@ -52,7 +52,7 @@ from scipy.stats import loguniform, randint
#from sklearn.model_selection import HalvingRandomSearchCV
class BinaryTuner:
def __init__(self, dataFrame, label_class, seeds=None, dnn=False, drop_ratio=0.2, test_prio=0.9, tuneScoring=None, debug=False, n_seeds=3):
def __init__(self, dataFrame, label_class, seeds=None, dnn=False, test_size=0.2, test_prio=0.9, tuneScoring=None, debug=False, n_seeds=3):
self.ledger = pd.DataFrame(columns=["node", "ts", "Dataset", "Model", "Params", "Seed", "Ratio", "Accuracy", "Specificity", "Recall", "F1", "ROC_AUC"])
self.name = label_class
@ -82,7 +82,7 @@ class BinaryTuner:
self.logger.addHandler(fh)
self.last_ping = self.start
self.ratio = drop_ratio
self.ratio = test_size
if not isinstance(seeds, list):
self.seeds = [np.random.randint(1, 2**20) for _ in range(n_seeds)]