patch
parent
a56a9b1d4e
commit
7e3320cfda
58
README.md
58
README.md
|
@ -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.
|
||||
|
|
4
train.py
4
train.py
|
@ -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()
|
||||
|
|
|
@ -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)]
|
||||
|
|
Loading…
Reference in New Issue