ESPECIALIZACIÓN EN DESARROLLO DE BASES DE DATOS - MINERIA DE DATOS
DACOdacoPráctica o problema1 de Marzo de 2020
2.443 Palabras (10 Páginas)126 Visitas
ESPECIALIZACIÓN EN DESARROLLO DE BASES DE DATOS - MINERIA DE DATOS
LABORATORIO APRENDIZAJE SUPERVISADO 1 – CLASIFICACIÓN VIA ARBOLES DE DECISION Y RANDOM FOREST
Contenido
Sobreajuste 2
Sub-ajuste 3
Desarrollo 5
Entrenamiento y test 7
Estimacion del error de generalización – Validacion Cruzada 10
Despliegue del modelo: 11
Ventajas 12
Desventajas 13
Técnica de bagging 13
Bagging para mejorar un modelo predictivo 13
La técnica de Bagging sigue estos pasos: 13
Características de Bagging: 14
Desarrollo 15
Introducción – Aprendizaje Supervisado
Sobreajuste
El sobreajuste significa que el modelo que entrenamos se entrenó "demasiado bien" y ahora, bueno, se ajusta demasiado al conjunto de datos de entrenamiento. Esto generalmente ocurre cuando el modelo es demasiado complejo (es decir, demasiadas características / variables en comparación con el número de observaciones). Este modelo será muy preciso en los datos de entrenamiento, pero probablemente no será muy preciso en datos nuevos o no entrenados. Es porque este modelo no está generalizado, lo que significa que puede generalizar los resultados y no puede hacer ninguna inferencia sobre otros datos, que es, en última instancia, lo que está tratando de hacer. Básicamente, cuando esto sucede, el modelo aprende o describe el "ruido" en los datos de entrenamiento en lugar de las relaciones reales entre las variables en los datos. Obviamente, este ruido no forma parte de ningún conjunto de datos nuevo y no se puede aplicar a él.
Sub-ajuste
A diferencia del sobreajuste, cuando un modelo no está bien ajustado, significa que el modelo no se ajusta a los datos de entrenamiento y, por lo tanto, pasa por alto las tendencias en los datos. También significa que el modelo no se puede generalizar a nuevos datos. Como probablemente haya adivinado (¡o descubierto!), Este suele ser el resultado de un modelo muy simple (no hay suficientes predictores / variables independientes). También podría suceder cuando, por ejemplo, ajustamos un modelo lineal (como la regresión lineal) a datos que no son lineales. Valga la pena decir que este modelo tendrá poca capacidad predictiva (en los datos de entrenamiento y no se puede generalizar a otros datos).
[pic 2]
Primera parte: Árboles de decision
Desarrollo
Importacion de librerías indispensables para el taller:
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import pandas as pd
# importamos la libreria numpy
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import label_binarize
from sklearn import tree
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.metrics import roc_curve, auc, roc_auc_score
from sklearn.externals import joblib
import matplotlib.pyplot as plt
import graphviz as gv
# seteamos el objeto random a 0
np.random.seed(0)
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Para la instalacion de graphviz desde la consola de linux:
sudo apt-get install graphviz
luego la instalacion del modulo python correspondiente:
pip3 install graphviz
Lectura del archivo Clasificacion
[pic 3]
Sea x el conjunto de las variables explicativas (aquellas distintas de la clase)
Sea y , el dataframe con la variable target (Clase Vino)
Por qué eliminamos la variable ID Caso?
[pic 4]
Según las tareas que se llevan a cabo en un proceso de aprendizaje supervisado, qué hace la instrucción siguiente?
X_train, X_test, y_train, y_test = train_test_split(x, y,
test_size=VALOR,
random_state=0,
#stratify=y
)
Donde VALOR = porcentaje del conjunto de datos usado para test. Defina un valor que no lleve al subajuste o al sobreajuste.
Entrenamiento y test
Ahora creamos un modelo de Arbol de decisión, basado en el concepto de ganancia de información.
La función fit, ajusta el modelo a los datos de entrenamiento
[pic 5]
Si se desea ver de manera grafica el árbol de decisión generado, una opcion es generar un archivo de imagen, el cual quedará almacenado en el mismo directorio del archivo ipynb. (La explicación de la instalación del graphviz, se encuentra al comienzo de este documento..)
[pic 6]
Agregue acá la imagen del árbol de decisión generada. Puede escribir alguna regla de clasificación apartir de este?
Ahora que se ha generado el modelo, se medirá su score, y se realizará la predicción sobre el conjunto de datos para test.
[pic 7]
Que significan las siguientes métricas que se generan a continuación?
[pic 8]
La siguiente es la matriz de confusión para la clase 1. Qué puede decir del modelo, con base en ella? Generela también para las clases 2 y 3 y añada sus comentarios del modelo.
[pic 9]
Ahora agregue el siguiente fragmento de codigo para calcular el área ROC (área bajo la curva), Por cierto, que es una curva ROC? Que nos dice del modelo??
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):
fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
# Cálculo de la curva ROC y el area ROC
fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
roc_auc[0]
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ahora puede grafica la curva ROC, incluyendo el siguiente codigo::
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
plt.figure()
lw=2
plt.plot(fpr[2],tpr[2],color="red",
lw=lw, label='Curva ROC(area = %0.2f)' % roc_auc[0])
plt.plot([0,1],[0,1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0,1.0])
plt.ylim([0.0,1.05])
plt.xlabel('Tasa de falsos positivos')
plt.ylabel('Tasa de verdaders positivos')
plt.title('grafico Receiver Operating Characteristic ')
plt.legend(loc='lower right')
plt.show()
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Muestre la curva ROC, para la segunda y tercer clase
Estimacion del error de generalización – Validacion Cruzada
Se ejecutará la técnica de cross validation con n=1, para garantizar que los resultados son independientes de la partición entre datos de entrenamiento y prueba
[pic 10]
Explique qué hace la siguiente instrucción::
[pic 11]
Actividad: Genere el modelo utilizando el criterio gini, y luego de comparar ambos métodos, indique sus observaciones.(puede incluir tablas comparativas si es el caso)
Despliegue del modelo:
Una vez se ha validado que el modelo generado tiene una grado de eficacia aceptable, si se desea desplegar para nuevos ejemplos, basta con guardar el modelo a través del modulo joblib y la función dump
Cuando se desea utilizar, se carga con la función load, indicando el modelo a abrir, y se aplica en el conjunto que se desea.
[pic 12]
[pic 13]
[pic 14]
Segunda parte: Random Forest
Random Forest es un algoritmo predictivo que usa la técnica de Bagging para combinar diferentes árboles, donde cada árbol es construido con observaciones y variables aleatorias. El algoritmo construye una larga colección de árboles no correlacionados y luego los promedia
- En forma resumida sigue este proceso:
- Selecciona individuos al azar (usando muestreo con reemplazo) para crear diferentes set de datos.
- Crea un árbol de decisión con cada set de datos, obteniendo diferentes árboles, ya que cada set contiene diferentes individuos y diferentes variables en cada nodo.
- Al crear los árboles se eligen variables al azar en cada nodo del árbol, dejando crecer el árbol en profundidad (es decir, sin podar).
- Predice los nuevos datos usando el "voto mayoritario", donde clasificará como "positivo" si la mayoría de los arboles predicen la observación como positiva.
[pic 15]http://2.bp.blogspot.com/-ngn9mrb4mBI/VHVHtVYNK1I/AAAAAAAABPw/39oUK7VBJf4/s1600/RandonForest_2.jpg
...