Generalmente hay dos métodos para podar árboles: poda previa y poda posterior. La poda previa implicará técnicas que realizan paradas tempranas (por ejemplo, detenemos la construcción de nuestro árbol antes de que esté completamente desarrollado). La poda posterior implicará el crecimiento completo del árbol en su totalidad, y luego recortar los nodos del árbol de abajo hacia arriba.
Con la poda previa, generalmente tomaremos algunas decisiones antes de comenzar a cultivar el árbol. Me gusta dividir estas decisiones en dos categorías: decisiones relacionadas con el tamaño y decisiones relacionadas con la condición.
(1) Para decisiones relacionadas con el tamaño, decidiremos que no queremos que crezca más allá de cierta profundidad, que no queremos más de un número determinado de hojas totales, o que no queremos menos de un determinado cantidad de observaciones por hoja (hay otras, pero son comunes).
- ¿Cuáles son los mayores desafíos al hacer análisis de big data?
- Cómo construir un reconocimiento de objetos basado en dispositivos móviles utilizando técnicas de aprendizaje automático
- ¿Qué tan importante fue el Premio Netflix para el área de Sistemas de recomendación?
- ¿Cómo se compara la industria del aprendizaje automático con las opciones de carrera dentro del desarrollo web?
- ¿Scikit-learn admite paralelismo, es decir, se puede usar en un grupo de máquinas que ejecutan tareas en paralelo?
(2) Para decisiones relacionadas con la condición, decidiremos que dejaremos de cultivar el árbol si todas las observaciones en una hoja pertenecen a la misma clase (si es un árbol de clasificación), si todos los valores de atributo para las observaciones en una hoja son mismo, o si expandir el nodo actual no mejora la medida de pureza / métrica de costo que estamos usando (nuevamente, hay más, pero estos son comunes).
Con la poda posterior, también hay una serie de técnicas disponibles, muchas de las cuales se enumeran en la wiki para la poda. Probablemente los tres más comunes son la poda reducida de errores, la poda de complejidad de costos y la poda pesimista (los dos primeros se describen en la wiki).
(1) La reducción de errores de poda funciona básicamente considerando la sustitución del subárbol en cada nodo dentro del árbol con una hoja, asignando todas las observaciones en esa hoja recién asignada a la clase mayoritaria (si es un problema de clasificación) o asignándoles la media (si Un problema de regresión). Si el reemplazo de este subárbol con una hoja deja nuestro error / costo general no peor, entonces lo mantenemos, y de lo contrario no lo hacemos. Continuamos iterando sobre todos los nodos hasta que la poda ya no sea útil.
(2) La poda de complejidad de costos funciona al colapsar sucesivamente el nodo que produce el menor aumento por nodo en nuestro error / costo, al tiempo que sopesa la complejidad general (por ejemplo, el tamaño) de nuestro árbol para decidir el mejor árbol podado que minimiza nuestra función de costo-complejidad.
(3) La poda pesimista funciona al agregar efectivamente un término de penalización al error en cada nodo. Este término de penalización a menudo se denomina “corrección de errores”, con la motivación de que queremos intentar estimar conservadoramente el error verdadero en cada nodo.
Entonces, ¿cuál de estos elegimos? Si está construyendo el algoritmo del árbol usted mismo y no le importa un cálculo adicional, creo que es común (y más efectivo) realizar una poda posterior. Esto podría ser especialmente cierto dado que los métodos de poda previa le permitirán lograr los mismos resultados (solo en un orden diferente). En términos de los diferentes métodos de poda posterior, (1) y (2) anteriores generalmente requieren que use un conjunto de capacitación y validación, lo que significa más cómputo. (3) no tiene esta estipulación, por lo que implica menos cómputo. Este artículo discute estas tres técnicas (junto con otra), y básicamente llega a la conclusión de que (1) generalmente funciona mejor, pero no significativamente mejor que (3) para que el cálculo adicional valga la pena.
Como puede suponer, los métodos de poda previa le ahorrarán la preocupación de la computación adicional que aportan algunos de los métodos de poda posterior, y probablemente no lo harán mucho peor (si es que lo hacen) que los métodos de poda posterior. Esto probablemente sea especialmente cierto si optimiza las decisiones de poda previa que toma.
En la práctica, si está utilizando un algoritmo de árbol que alguien más armó, entonces estará restringido a las decisiones que le den. Estoy más familiarizado con la implementación que ofrece sklearn, que solo le da la opción de podar previamente especificando parámetros como profundidad máxima, mín. muestras por hoja, etc.