GithubHelp home page GithubHelp logo

charlie-n01r / proyecto1-tecemerg Goto Github PK

View Code? Open in Web Editor NEW

This project forked from tecnologias-emergentes-equipo2/proyecto1

0.0 0.0 0.0 7.88 MB

First project for data science class

License: MIT License

Jupyter Notebook 100.00%

proyecto1-tecemerg's Introduction

Predicción de Enfermedades Cardiovasculares Utilizando Algoritmos de Gradient Boosting

El presente repositorio contiene la investigación y código realizados para la creación de modelos predictivos de enfermedades cardiovasculares basados en información extraída de la base de datos "Cardiovascular Disease dataset". Dichos modelos fueron creados utilizando la ayuda de libreras como CatBoost y XGBoost.

Paso 1: Instalación de los paquetes utilizados

En esta sección se describen los paquetes utilizados para la creación del experimento, para una lista acortada de los requerimientos, favor de ver éste archivo.

El archivo contiene las dependencias y versiones especificas usadas para desarrollar el proyecto. Puede instalarse con:

pip install -r requirements.txt

El ambiente de programación utilizado fue Google Collab, un servicio en línea para crear y hostear notebooks. Otras alternativas a esta plataforma incluyen Kaggle, así como Jupyter Notebook y JupyterLab. El lenguaje de programación que se utilizó es Python.

Las librerías de Python utilizadas son las siguientes:

  • Numpy: Una librería de Python que permite la creación de arreglos multidimensionales y operaciones con arreglos.
  • Pandas: Una librería de Python para la creación, manipulación y análisis de datos tabulares.
  • Matplotlib: Una librería graficadora para Python.
  • Plotly: Una librería graficadora multiplataforma.
  • Seaborn: Una librería para hacer gráficas estadísticas en Python.
  • Scikit-learn: Kit de herramientas de análisis predictivo.
  • CatBoost: Algoritmo de Gradient Boosting para árboles de decisión con apoyo a variables categóricas.
  • XGBoost: Librería optimizada de Gradient Boosting multiplataforma.

Paso 2: Preprocesamiento de datos

Para el preprocesamiento de los datos se crearon dos variables nuevas, a manera de columnas:

  • above_55: El análisis exploratorio mostró que existe una mayor incidencia de enfermedades cardíacas en personas con más de 55 años. En consecuente se creo una variable binaria que mostraba si la persona tiene más de 55 años (20075 días) con la finalidad de extender el conjunto de datos.
  • New_BMI: Cálculo del índice de masa corporal con base a la propuesta New BMI por el profesor Nick Trefethen.

Debido a la alta correlación de above_55 con 'age' se removió la edad en el set X para evitar redundancia y reducir la complejidad del algoritmo.

Paso 3: Catboost

Catboost es un algoritmo que usa gradient boosting en árboles de decisión. Para este proyecto se aplicó un clasificador de la librería (CatboostClassifier) con la finalidad de predecir la variable dependiente del dataset (cardio). Para ello se realizaron los siguientes pasos:

  1. Definición de las variables categoricas: Catboost permite aplicar un proceso de conversión para las variables categoricas conocido como Ordered Target Statistics. Para realizar este proceso primero se deben especificar los nombres de columnas a usar, en este caso: 'gender', 'cholesterol', 'gluc'.
  2. Para la selección de hiperparámetros se tienen ejecutaron iteraciones del modelo dejando que este usara los hiperparámetros por default y después se realizó un grid search para la búsqueda del mejor resultado, probando el accuracy para los parámetros de profundidad, regularización l2, learning rate y el número de iteraciones.

Paso 4: XGBoost

XGBoost XGBoost es una biblioteca optimizada de aumento de gradiente distribuida diseñada para ser altamente eficiente, flexible y portátil. Implementa algoritmos de aprendizaje automático bajo el marco Gradient Boosting. XGBoost proporciona un refuerzo de árbol paralelo (también conocido como GBDT, GBM) que resuelve muchos problemas de ciencia de datos de una manera rápida y precisa. Para este proyecto se utilizó la librería XGBClassifier(). Con ello se realizaron los siguientes pasos:

  1. Definición de las variables categóricas así como la variable objetivo, así como en el apartado de Catboost se realizó one-hot-encoding a las variable 'gender' en base a las variables 'cholesterol' y 'gluc'.
  2. Para la selección de los parámetros del modelo de max_depth y eta se realizaron experiementaciones teniendo un max_depth de 6, sin embargo si el valor es muy alto se puede generar un árbol muy complejo que te llevará al overfitting y un consumo muy grande de memoria. Al usar un valor menor el accuracy desminuía Para el learning rate si el eta es más grande hace que el cálculo sea más rápido (porque necesita introducir menos rondas) pero no hace que se alcance el mejor óptimo. Por otro lado, al disminuir el valor de eta hace que el cálculo sea más lento (porque hay que introducir más rondas) pero facilita alcanzar el mejor óptimo. tras experimentaciones con valores como 0.1, 0.001, 0.02, 0.3, 0.03 se percató que el que mejor accuracy nos daba era el 0.03. Se utilizó como objetivo "multi softmax" debido a que es utilizada para problemas de clasificación.
parameters = {
    'max_depth':6,
    'eta':0.03,
    'objective':'multi:softmax',
    'num_class':2, ## numero de clases
}

epochs = 15 ## número de iteraciones

Paso 5: Resultados

En cuanto al modelo de CatBoost se refiere, los resultados de accuracy obtenidos alcanzaron un ±74%. A pesar del uso de GPU y otras técnicas como early stopping y grid search, esta métrica no mejoró mucho.

Por parte de XGBoost los resultados obtenidos en base a los parametros descritos en el apartado 4, se tuvo un accuracy de 73.01%, a pesar de que realizó un one-hot-encoding para mejorar el accuracy del modelo.

proyecto1-tecemerg's People

Contributors

charlie-n01r avatar jmfc99 avatar rvztz avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.