class: title-slide, center, middle background-image: url(images/portada.jpg) background-size: cover #Práctica 3: #Árboles de Decisión
--- ## Hoja de ruta de la clase de hoy -- ### En la primera parte: - Repaso sobre los conceptos importantes en los árboles de decisión (Entropía, Gini, etc) - Actividades: Parte 1, 2, 3 del Colab. -- ### **.orange[Recreo]** ☕🧉 -- ### En la segunda parte: - Sobreajuste en árboles de decisión y formas de evitarlo - Parte 4 del Colab y uso de Scikit Learn. --- ## Repaso: Árboles de decisión .pull-left[ <img src="images/arbol.png" width="100%"/> ] -- .pull-right[ - Cada nodo interno compara un atributo xi - Una rama por cada valor de atributo xi=v - Cada hoja asigna una clase y - ¡Modelo interpretable! ] --- ## ¿Con qué atributo comenzar? .center[ <img src="images/arbol2.png" width="70%"/> ] -- .bg-washed-light-purple.b--light-purple.ba.bw2.br2.shadow-5.ph2.mt2[ Una partición es buena si estamos “más seguros” de la clasificación después de haberla realizado ] --- #¿Qué atributo es el mejor? ### **.purple[Entropía]** Medida de incertidumbre de una variable aleatoria .center[ `\(\LARGE H(Y) = -\sum_{i=1}^{k}p(Y=y_i)log_2 p(Y=y_i)\)` ] -- .center[ ### .black[A mayor incertidumbre, mayor entropía.] ] ### **.purple[Entropía Condicional]** `\(H(Y|X) = -\sum_{j=1}^{v}p(X=x_j)\sum_{i=1}^{k}p(Y=y_i|X=x_j)log_2 p(Y=y_i| X=x_j)\)` --- #¿Qué atributo es el mejor? ### **.purple[Ganancia de Información]** Decrecimiento de entropía (incertidumbre) luego de la partición -- .center[ `\(\LARGE IG(X)= H(Y)- H(Y|X)\)` ] .center[**Elijo el atributo que me de mayor ganancia de información**] --- #Impureza de Gini .center[ `\(\LARGE G(x) = \sum_{i=0}^{N}p_x(x_i)(1-p_x(x_i))\)` ] --- class: inverse, middle, center #💻 #Parte 1 --- ## Construcción de dataset de juguete Definir una función que genere N puntos con M atributos siguiendo una distribución gaussiana. ```python def dataset_sintetico_gausianas(medias,covs,n_puntos,etiquetas) ``` Tip: Usar `numpy.random.multivariate_normal` -- Posible solución: ``` python def dataset_sintetico_gausianas(means,covs,points,labels,seed=1234): all_dfs = [] np.random.seed(seed) #Importante setear la semilla for mean_i,cov_i,points_i,label_i in zip(means,covs,points,labels): features_i = np.random.multivariate_normal(mean=mean_i, cov=cov_i,size=points_i) dataset_i = pd.DataFrame(features_i) # paso a DF para agregar la etiqueta como una nueva columna dataset_i['Clase'] = label_i all_dfs.append(dataset_i) #lista de DFs return pd.concat(all_dfs) #para que devuelva un solo DF ``` --- class: inverse, middle, center #💻 #Parte 2 y 3 --- #Aprendizaje en Árboles de decisión - Comenzar con un árbol vacío -- - Generar una partición usando siguiente mejor atributo -- - Usar, por ejemplo, ganancia de información y realizar el paso anterior de manera recursiva --- ##¿Hasta cuando dejo de "partir" un nodo? -- .bg-washed-light-purple.b--light-purple.ba.bw2.br3.shadow-5.ph4.mt4[ .orange[Hiperparámetro] : Valores no aprendidos por el algoritmo desde los datos y por ende deben ser seteados antes de entrenar el algoritmo. ] -- ### En árboles de decisión: Funcionan bien para datos no linealmente separables. - `max_depth` : máxima profundidad del árbol - `min_samples_split`: El número mínimo de muestras requeridas para dividir un nodo interno - `min_samples_leaf`: El número mínimo de muestras requeridas para estar en un nodo hoja. - `criterion`: Gini o Entropy --- class: inverse, middle, center #💻 #Parte 4 --- # Sobreajuste - El error de entrenamiento es siempre cero - Poca capacidad de generalización. .center[ <img src="images/overfitting.png" width="90%"/> ] -- .footnote[Imagen extraída de [aquí](https://bookdown.org/content/2031/arboles-de-decision-parte-i.html)] .bg-washed-light-purple.b--light-purple.ba.bw2.br2.shadow-5.ph3.mt2[ El objetivo de un modelo de Machine Learning es que generalice bien frente a nuevos datos o datos no vistos por el modelo (set de testeo) ] --- ## Ventajas 💡 - Fácil de entender - Util en exploración de datos:identificar importancia de variables a partir de cientos de variables. - El tipo de datos no es una restricción - Es un método no paramétrico (i.e., no hay suposición acerca del espacio de distribución y la estructura del clasificador) ## Desventajas 💡 - Sobreajuste - Pérdida de información al categorizar variables continuas - Inestables debido a que pequeñas variaciones en el dataset pueden generar modelos muy diferentes.