Proyecto de Imputación de Variantes Genéticas Faltantes en Genes de Levaduras con Métodos de Machine Learning
Este proyecto explora varios enfoques para la imputación de valores faltantes en datos genéticos de levaduras, utilizando distintas técnicas de aprendizaje automático. Se implementan tres tipos principales de arquitecturas: métodos basados en estadística, árboles de decisión, y redes neuronales profundas.
El proyecto está inspirado en el trabajo disponible en SCDA, un repositorio que presenta un método de imputación basado en Sparse Convolutional Denoising Autoencoders para la imputación genotípica. Dado que este repositorio ofrece un código transparente y completamente reproducible, se decidió utilizar como base este proyecto para implementar y comparar distintos métodos de imputación mediante Machine Learning (ML).
Adicionalmente a la comparativa, se presenta un modelo más avanzado Sparse Convolutional Attention Denoising Autoencoder (SCADA), que consiste en la incorporación de una capa de atención a SCDA.
En el proyecto se han implementado los siguientes enfoques:
-
Métodos estadísticos:
- K-Nearest Neighbors (KNN): Un enfoque clásico basado en la proximidad entre muestras para imputar valores faltantes.
-
Métodos basados en árboles:
- Random Forest (RF): Un modelo basado en múltiples árboles de decisión que se entrena para predecir de manera conjunta o columna por columna.
- XGBoost: Un método de boosting que mejora los árboles de decisión incrementales para lograr una mayor precisión en la predicción.
-
Métodos basados en redes neuronales:
- Sparse Convolutional Attention Denoising Autoencoder: Una versión mejorada del SCDA al que se denomina en este estudio SCADA, que incluye una capa de atención para mejorar la imputación al enfocarse en las características más importantes de los datos.
Los datos utilizados en este proyecto consisten en variantes genéticas (representadas por los valores 1 y 2) en distintos genes de levaduras para diferentes individuos. Los conjuntos de datos en formato comprimido que se emplean tanto para el entrenamiento como para el test son los siguientes:
ML_yeast_dna_imputation/data/raw/yeast_genotype_train.txt.zip
ML_yeast_dna_imputation/data/raw/yeast_genotype_test.txt.zip
En el notebook ML_yeast_dna_imputation/notebooks/preprocessing.ipynb
se realiza el preprocesamiento de los datos, generando conjuntos de train y test reducidos, además de subconjuntos de test con diferentes niveles de pérdida de datos (10%, 20%, 30%, 40%). Estos conjuntos de datos se guardan en formato .parquet
en la carpeta ML_yeast_dna_imputation/data/processed
para su uso en los diferentes modelos implementados.
El proyecto está organizado en los siguientes directorios:
Contiene los datos de entrada y salida:
data/generated/
: Subcarpetas específicas para cada modelo, con los datasets imputados por cada método.data/processed/
: Conjuntos de datos preprocesados y reducidos, listos para ser utilizados en el entrenamiento y prueba de los modelos.data/raw/
: Archivos comprimidos con los datos originales de gran dimensionalidad.
Subcarpetas para cada arquitectura donde se almacenan los modelos entrenados en formato .h5
.
Contiene todos los notebooks utilizados, organizados por tarea y/o arquitectura:
notebooks/original_SDCA/
: Notebooks originales del modelo Sparse Convolutional Denoising Autoencoder (SDCA) para el entrenamiento y test.notebooks/reduced_SDCA/
: Notebooks con el modelo SDCA utilizando el conjunto de datos reducido.notebooks/KNN_yeast.ipynb
: Notebook donde se implementa el entrenamiento y test con KNN para la imputación.notebooks/RF_unique_model.ipynb
: Notebook donde se entrena y prueba un modelo de Random Forest tradicional, entrenando un solo modelo para todo el conjunto de datos.notebooks/RF_yeast.ipynb
: Notebook donde se entrena un Random Forest para predecir valores faltantes en columnas individuales del conjunto de test, utilizando un modelo independiente por cada columna.notebooks/XGBoost.ipynb
: Notebook donde se realiza el entrenamiento y prueba con el modelo de XGBoost.notebooks/SCADA.ipynb
:Implementación avanzada de SDCA con capa de atención para imputar valores faltantes en el conjunto de datos completo.notebooks/SCADA_reduced.ipynb
: Implementación avanzada de SDCA con capa de atención para imputar valores faltantes en el conjunto de datos reducido.
git clone https://github.com/celiacl/ML_yeast_dna_imputation.git
cd ML_yeast_dna_imputation
python -m venv venv
source venv/bin/activate # En Linux/macOS
venv\Scripts\activate # En Windows
pip install -r requirements.txt
Inicia un servidor Jupyter para explorar los notebooks:
jupyter notebook
- Ejecutar el notebook
preprocessing.ipynb
para generar los conjuntos de train y test reducidos, así como los conjuntos de test con diferentes niveles de pérdida de datos. - Los datos preprocesados se guardarán en la carpeta
data/processed/
en formato.parquet
.
-
Ejecutar los notebooks correspondientes a cada método de imputación:
- KNN:
notebooks/KNN_yeast.ipynb
- Random Forest (con un solo modelo):
notebooks/RF_unique_model.ipynb
- Random Forest (por columnas):
notebooks/RF_yeast.ipynb
- XGBoost:
notebooks/XGBoost.ipynb
- Autoencoders con Atención:
notebooks/attention_autoencoder_yeast.ipynb
ynotebooks/attention_autoencoder_yeast_amplified.ipynb
- KNN:
-
Los modelos entrenados se almacenarán en la carpeta
models/
en formato.h5
. -
Los datasets imputados se almacenarán en la carpeta
data/generates
en el subdirectorio correspondiente a cada arquitectura, en formato .parquet.
- Los resultados de la imputación se evaluarán en términos de métricas como accuracy, F1-score, precision, y recall, y se compararán entre los diferentes enfoques (comparativa realizada en el documento de desarrollo del TFM).