Ejercicio de Clustering con fichero de diabetes (indios Pima)#

Este conjunto de datos proviene originalmente del Instituto Nacional de Diabetes y Enfermedades Digestivas y Renales. El objetivo del conjunto de datos es predecir diagnósticamente si un paciente tiene diabetes o no, en función de ciertas mediciones diagnósticas incluidas en el conjunto de datos. Se impusieron varias restricciones a la selección de estas instancias de una base de datos más grande. En particular, todos los pacientes aquí son mujeres de al menos 21 años de edad de ascendencia indígena Pima. Se puede acceder a la base de datos en el siguiente enlace y descargar el fichero diabetes.csv para hacer la práctica:

Base de datos de diabetes de los indios Pima

Los conjuntos de datos constan de varias variables predictoras médicas y una variable objetivo. Las variables predictoras incluyen el número de embarazos que ha tenido la paciente, su IMC, el nivel de insulina, la edad, etc. La variable Outcome es la que lleva la predicción.

import matplotlib.pyplot as plt 
%matplotlib inline
import pandas as pd
import numpy as np
from skimage import io
from IPython import display
import warnings
warnings.filterwarnings("ignore", category=UserWarning)

La base de datos consta de:

  • 768 observaciones o registros

  • 8 características cuantitativas o variables diagnósticas

  • 1 variable o columna final (Outcome) que contiene 2 clases con la predicción

Objetivos a alcanzar en la entrega#

  • Cargar el fichero CSV en un DataFrame y mostrar el aspecto que tiene.

  • Estandarizar los 8 campos cuantitativos, pisar el DataFrame anterior y volver a mostrar el aspecto que tiene.

  • Extraer la matriz X y la matriz y del DataFrame estandarizado.

  • Obtener una proyección PCA con las 2 primeras componente de la matriz X y guardar el resultado proyectado sobre una matriz X_pca.

  • Dibujar en 2D el aspecto de los datos usando la matriz X_pca y la matriz y de etiquetar los puntos

  • Para cada uno de los tipos de cluster: K-means, Jerárquico y Mezcla Gaussiana

    • Obtener un ajuste en 2 grupos.

    • Visualizar el ajuste usando la matriz X_pca y las etiquetas de cada clustering

    • Calcular los índices R, ARI. Además índices VI y el AVI (usando 03.0ClusteringUtilidades.ipynb)

  • ¿Qué modelo les resulta más favorable?

  • Mostrar la gráfica del codo y BIC para identificar el número de grupos más adecuadas.

  • Mostrar un dendograma de 2 grupos y truncado con una profundidad de dibujo (parámetro p) igual a 7.

Carga del archivo en un dataframe#

Se estandariza el conjunto de datos#

Construcción de la matriz X de características + la matriz y de etiquetas#

  • Las características están en las 8 primeras columnas

  • Las etiquetas en la columna 9 (Outcome)

Visualización gráfica de los datos#

Para hacer una visualización adecuada extraer las 2 componentes principales y realizar el gráfico incluyendo la etiqueta Outcome.

Ejecutar el algoritmo KMeans para obtener 2 grupos#

Representar los resultados sobre la proyección PCA

La visualización del ajuste realizado es el siguiente:

Se evalúa la calidad del método#

Calcular los índices R , ARI , VI y AVI comparando contra las etiquetas reales de ‘Outcome’ .

Primero se carga la utilidad donde aparecen las rutinas para calcular el VI y el AVI (03.0ClusteringUtilidades.ipynb)

run 03.0_ClusteringUtilidades.ipynb
load done!

Nuevo proceso con Cluster jerárquico#

Se resuelve un cluster aglomerativo con scikit-learn que es AgglomerativeClustering:

Se evalúa la calidad del método#

Calcular los índices R , ARI , VI y AVI comparando contra las etiquetas reales de ‘Outcome’ .

Por último Clustering con Mezcla Gaussiana#

Se evalúa la calidad del método#

Calcular los índices R , ARI , VI y AVI comparando contra las etiquetas reales de ‘Outcome’ .

¿Qué clustering ha resultado más optimo?

El cluster ….._ porque

Estudio del número de grupos óptimos (gráfico del codo y bic)#

Vista del dendograma#

Elegir un dendograma truncado con una profundidad de dibujo (parámetro p) igual a 7

Ajustar el tamaño de la figura para que se vea adecuadamente.