En este proyecto vamos a repasar un poco las ideas básicas de aprendizaje supervisado, tratando de ejemplificar los métodos utilizando árboles de desición y bosques aleatorios.
Para este proyecto se tiene como base documental:
-
Un modulo
utileria.py, el cual sirve para definir algunas funciones necesarias, (como las que se usar para cargar datos) pero que no son propias de los modelos de aprendizaje. -
Árboles cualitativos, los cuales se encuentran definidos en el módulo
arboles_cualitativos.pyy que luego se utilizan enprueba_arbol_Q.py. Para eso, vamos a buscar algunas bases de datos muy sencillas que permitan ilustrar como funciona el algoritmo de aprendizaje, así como su uso en predicción. Estos conjuntos de datos se obtuvieron del venerable pero todavía interesante UC Irvine Machine Learning Repository, donde se encuentran una serie de bases de datos abiertas para diferentes tareas de aprendizaje. Este repositorio es un lugar que siempre debe uno conocer en el área de Aprendizaje Automático. -
Árboles numéricos, los cuales se encuentran en
arboles_numericos.pyy se puede ver como utilizarlo enprueba_arbol_N.py, tambien con un conjunto de datos del mismo UC Irvine Machine Learning Repository.
Para esta tarea, tienes como tarea el desarrollar y probar un algoritmo de bosques aleatorios basado en los algortimos ya presentados, para esto hay que hacer lo siguiente:
-
En el archivo
arboles_numericos.pyse encuentra la difuiente función:def entrena_arbol(datos, target, clase_default, max_profundidad=None, acc_nodo=1.0, min_ejemplos=0, variables_seleccionadas=None):
En el cual existe el parámetro
variables_seleccionadasel cual no se usa (por default usa el valorNone). Modifica esta función (no tienes que modificar en otras subfunciones o clases) de manera que si el valor de este parámetro es un número entero, entonces se seleccione solo ese número de atributos, seleccionados aleatoriamente, para seleccionar el par(atributo, valor)en ese nodo (solo en ese nodo). Recuerda que a los hijos se les envía todos los atributos en forma recursiva. -
En el archivo
bosque_aleatorio.pydesarrolla una función para entrenar busques aleatorios, basándose en el uso de la funciónentrena_arboldel moduloarboles_numericos.py. El algoritmo deberá:- Separar los datos en subconjuntos con selección aleatoria con repetición
(para
Msubconjuntos). - Por cada subconjunto, entrenar un árbol con un número limitado de variables en cada nodo. Un bosque se puede representar como una lista de nodos raíz (árboles).
- Una función para poder hacer predicciones a partir del bosque (lista de nodos raíz).
Puedes usar varias funciones, que separen un problema grande en varios más pequeños y tratables.
- Separar los datos en subconjuntos con selección aleatoria con repetición
(para
-
En el archivo
prueba_BA.pyusa un conjunto de datos diferente a los que ya usamos para árboles cualitativos y numérico del UC Irvine Machine Learning Repository. Muestra que pasa conforme se aumenta el número de árboles en tu bosque, la máxima profundidad de los árboles, o la cantidad de variables a considerar en cada nodo.
Este proyecto solo se puede evaluar a partir de prueba_BA.py, por lo que es necesario desarrollar los 3 incisos y se evaluará en relación a la funcionalidad del algoritmo, y del estudio realizado en prueba_BA.py.