Está en la página 1de 26

Universidad San Francisco de Quito

Taller 03

Train and evaluate classification models

Minería de Datos

Celeste Auquilla
Exercise - Train and evaluate a classification model
Empezamos importando pandas y descargando el documento con los datos para poder utilizado.

Estos datos contienen información de personas que tienen diabetes. La última columna del
conjunto de datos (Diabético) contiene el valor 0 para los pacientes que dieron negativo en la
prueba de diabetes y 1 para los pacientes que dieron positivo. Esta etiqueta que entrenaremos
para que prediga nuestro modelo; la mayoría de las otras columnas (Embarazos, PlasmaGlucosa,
Presión arterial diastólica, etc.) son las características que usaremos para predecir la etiqueta
Diabético.

Separemos las características de las etiquetas: llamaremos a las características X y a la etiqueta y:


Dividir los datos
En Python, el paquete scikit-learn contiene una gran cantidad de funciones que podemos usar para
crear un modelo de aprendizaje automático, incluida una función train_test_split que garantiza que
obtengamos una división estadísticamente aleatoria de los datos de entrenamiento y prueba.
Usaremos eso para dividir los datos en un 70 % para el entrenamiento y retener un 30 % para las
pruebas.

Como se puede observar tenemos mas casos de entrenamiento que de prueba para que nuestro
modelo esté listo.
Entrenar y evaluar un modelo de clasificación binaria
Bien, ahora estamos listos para entrenar nuestro modelo ajustando las funciones de
entrenamiento (X_train) a las etiquetas de entrenamiento (y_train). Vamos a usar regresión
logística. Además, vamos a necesitar establecer un parámetro de regularización. Esto se usa para
contrarrestar cualquier sesgo en la muestra y ayudar a que el modelo se generalice bien evitando
sobreajustar el modelo a los datos de entrenamiento.
Vamos a evaluar que tan bien predice con scikit-learn . Comencemos usando el modelo para
predecir etiquetas para nuestro conjunto de prueba y comparemos las etiquetas pronosticadas con
las etiquetas conocidas:

Las matrices de etiquetas son demasiado largas para mostrarse en la salida del cuaderno, por lo
que solo podemos comparar algunos valores. Con scikit-learn proporciona algunas métricas que
podemos usar para evaluar el modelo.

La precisión se devuelve como un valor decimal: un valor de 1,0 significaría que el modelo acertó
en el 100 % de las predicciones; mientras que una precisión de 0.0 es, bueno.

Exercise - Perform classification with alternative metrics


Métricas alternativas para clasificadores binarios
Para comenzar, ejecutamos la siguiente celda para cargar nuestros datos y entrenar nuestro
modelo como la última vez.
Uno de los lugares más simples para comenzar es un informe de clasificación. Vemos una variedad
de formas alternativas de evaluar nuestro modelo.
El informe de clasificación incluye las siguientes métricas para cada clase (0 y 1).
El informe de clasificación incluye promedios para estas métricas, incluido un promedio ponderado
que permite el desequilibrio en la cantidad de casos de cada clase.
Debido a que este es un problema de clasificación binaria, la clase 1 se considera positiva y su
precisión y recuperación son particularmente interesantes; en efecto, responden las preguntas:
De todos los pacientes que el modelo predijo que son diabéticos, ¿cuántos son realmente
diabéticos?
De todos los pacientes que en realidad son diabéticos, ¿cuántos identificó el modelo?
Puede recuperar estos valores por sí solos mediante el uso de las métricas precision_score y
replace_score en scikit-learn.

Las

métricas de precisión y recuperación se derivan de cuatro posibles resultados de predicción:


Verdaderos positivos: la etiqueta predicha y la etiqueta real son ambas 1.
Falsos positivos: la etiqueta predicha es 1, pero la etiqueta real es 0.
Falsos negativos: la etiqueta predicha es 0, pero la etiqueta real es 1.
Verdaderos negativos: la etiqueta predicha y la etiqueta real son ambas 0.
Vamos a usar la función sklearn.metrics.confusion_matrix para encontrar estos valores para un
clasificador entrenado
La decisión de puntuar una predicción como 1 o 0 depende del umbral con el que se comparan las
probabilidades pronosticadas. Si tuviéramos que cambiar el umbral, afectaría las predicciones; y
por lo tanto cambiar las métricas en la matriz de confusión. Una forma común de evaluar un
clasificador es examinar la tasa de verdaderos positivos (que es otro nombre para recordar) y la
tasa de falsos positivos para un rango de umbrales posibles. Luego, estas tasas se trazan contra
todos los umbrales posibles para formar un gráfico conocido como gráfico de características del
operador recibido (ROC), como este:

Lo que se puede observar en en grafico de ROC


El gráfico ROC muestra la curva de las tasas de verdaderos y falsos positivos para diferentes valores de umbral
entre 0 y 1. Un clasificador perfecto tendría una curva que sube directamente por el lado izquierdo y cruza
directamente la parte superior. La línea diagonal que atraviesa el gráfico representa la probabilidad de
predecir correctamente con una predicción aleatoria 50/50; por lo que obviamente desea que la curva sea
más alta que eso.
El área bajo la curva (AUC) es un valor entre 0 y 1 que cuantifica el rendimiento general del modelo.
Cuanto más cerca de 1 sea este valor, mejor será el modelo. Una vez más, scikit-Learn incluye una
función para calcular esta métrica.
Realizar preprocesamiento en una canalización
En este caso, la curva ROC y su AUC indican que el modelo funciona mejor que una suposición
aleatoria, lo cual no está mal considerando que realizamos muy poco preprocesamiento de los
datos.
Utilizaremos una función de Scikit-Learn denominada canalizaciones. Estos nos permiten definir un
conjunto de pasos de preprocesamiento que terminan con un algoritmo. A continuación, puede
ajustar toda la canalización a los datos, de modo que el modelo encapsule todos los pasos de
preprocesamiento, así como el algoritmo de regresión. Esto es útil, porque cuando queremos usar
el modelo para predecir valores a partir de nuevos datos, necesitamos aplicar las mismas
transformaciones.
Los resultados se ven un poco mejor, procesar la data hace una diferencia.
Pruebe con un algoritmo diferente
Ahora probemos con un algoritmo diferente. Anteriormente usamos un algoritmo de regresión
logística, que es un algoritmo lineal.
Esta vez, usaremos los mismos pasos de preprocesamiento que antes, pero entrenaremos el
modelo usando un algoritmo de conjunto llamado Random Forest que combina los resultados de
múltiples árboles de decisión aleatorios.
Usar el modelo para hacer inferencias
Ahora que tenemos un modelo entrenado razonablemente útil, podemos guardarlo para usarlo
más tarde para predecir etiquetas para nuevos datos:
Cuando tenemos algunas observaciones nuevas para las que se desconoce la etiqueta, podemos
cargar el modelo y usarlo para predecir valores para la etiqueta desconocida:

Exercise - Train and evaluate multiclass classification models


Explora los datos
Comencemos examinando un conjunto de datos que contiene observaciones de varias clases.
Usaremos un conjunto de datos que contiene observaciones de tres especies diferentes de
pingüinos.
El conjunto de datos contiene las siguientes columnas:

CulmenLength: La longitud en mm del culmen (pico) del pingüino.


CulmenDepth: La profundidad en mm del culmen del pingüino.
FlipperLength: La longitud en mm de la aleta del pingüino.
BodyMass: La masa corporal del pingüino en gramos.
Especie: Un valor entero que representa la especie del pingüino.
La columna Especie es la etiqueta que queremos entrenar a un modelo para predecir. El conjunto
de datos incluye tres especies posibles, que están codificadas como 0, 1 y 2. Los nombres reales de
las especies se revelan mediante el siguiente código:
Ahora que sabemos qué representan las características y las etiquetas en los datos, exploremos el
conjunto de datos. Primero, veamos si faltan valores (nulos).

Parece que faltan algunos valores de características, pero no faltan etiquetas. Profundicemos un
poco más y veamos las filas que contienen valores nulos.
Hay dos filas que no contienen ningún valor de función (NaN significa "no es un número"), por lo
que no serán útiles para entrenar un modelo. Vamos a descartarlos del conjunto de datos.

Ahora que nos hemos ocupado de los valores que faltan, exploremos cómo se relacionan las
características con la etiqueta creando algunos gráficos de caja.
A partir de los diagramas de caja, parece que las especies 0 y 2 (Adelie y Chinstrap) tienen perfiles
de datos similares para la profundidad del culmen, la longitud de las aletas y la masa corporal, pero
los Chinstrap tienden a tener culmen más largos. La especie 1 (Gentoo) tiende a tener
características claramente diferenciadas de las demás; lo que debería ayudarnos a entrenar un
buen modelo de clasificación.
Preparar los datos
Al igual que para la clasificación binaria, antes de entrenar el modelo, debemos separar las
características y la etiqueta, y luego dividir los datos en subconjuntos para el entrenamiento y la
validación. También aplicaremos una técnica de estratificación al dividir los datos para mantener la
proporción de cada valor de etiqueta en los conjuntos de datos de entrenamiento y validación.
Entrenar y evaluar un clasificador multiclase
Vamos a ajustar un algoritmo de clasificación multiclase a los datos para crear un modelo. La
mayoría de los algoritmos de clasificación de scikit-learn admiten de forma inherente la
clasificación multiclase. Probaremos un algoritmo de regresión logística.

Ahora podemos usar el modelo entrenado para predecir las etiquetas de las características de
prueba y comparar las etiquetas predichas con las etiquetas reales:
Aquí un reporte de clasificación.

Al igual que con la clasificación binaria, el informe incluye métricas de precisión y recuperación
para cada clase. Sin embargo, mientras que con la clasificación binaria podríamos centrarnos en las
puntuaciones de la clase positiva; en este caso, hay varias clases, por lo que debemos observar una
métrica general (ya sea la macro o el promedio ponderado) para tener una idea de qué tan bien se
desempeña el modelo en las tres clases.
Puede obtener las métricas generales por separado del informe utilizando las clases de puntaje de
métricas de scikit-learn, pero con los resultados de varias clases debe especificar qué métrica
promedio desea usar para precisión y recuperación.
La matriz de confusión muestra la intersección de los valores de etiqueta predichos y reales para
cada clase; en términos simples, las intersecciones diagonales de arriba a la izquierda a abajo a la
derecha indican el número de predicciones correctas.
Cuando se trata de varias clases, generalmente es más intuitivo visualizar esto como un mapa de
calor, como este:
Los cuadrados más oscuros en el gráfico de la matriz de confusión indican una gran cantidad de
casos y, con suerte, puede ver una línea diagonal de cuadrados más oscuros que indican los casos
en los que la etiqueta predicha y la real son las mismas.
En el caso de un modelo de clasificación multiclase, no es posible una sola curva ROC que muestre
la tasa de verdaderos positivos frente a la tasa de falsos positivos. Sin embargo, puede usar las
tarifas para cada clase en una comparación de Uno vs Resto (OVR) para crear un gráfico ROC para
cada clase.
Para cuantificar el rendimiento de ROC, puede calcular un área agregada bajo la puntuación de la
curva que se promedia en todas las curvas OVR.
Preprocesar datos en una canalización
Nuevamente, al igual que con la clasificación binaria, puede usar una canalización para aplicar
pasos de preprocesamiento a los datos antes de ajustarlos a un algoritmo para entrenar un
modelo. Veamos si podemos mejorar el predictor pingüino escalando las características numéricas
en pasos de transformación antes del entrenamiento.
Ahora guardemos nuestro modelo entrenado para que podamos usarlo nuevamente más tarde.

Bien, ahora tenemos un modelo entrenado. Usémoslo para predecir la clase de una nueva
observación de pingüinos:
También puede enviar un lote de observaciones de pingüinos al modelo y obtener una predicción
para cada una.

Verificación de conocimiento

También podría gustarte