No entiendo cuál es el propósito del árbol de decisión? A mi modo de ver, es una serie de if-else. ¿Por qué no uso if-else en lugar de usar un árbol de decisión? ¿Es porque disminuye la complejidad de mi código?
Todavía estoy libre de calcular la entropía y la ganancia de información porque hay algoritmos preconstruidos para ellos donde simplemente conecto las reglas, ¿verdad? (Como ID3)
¿Por qué lo usamos con el aprendizaje automático ahora? ¿Porque ni siquiera tenemos que inventar las reglas antes de necesitarlo? ¿La máquina aprende de los datos de entrenamiento y en función de los atributos puede predecir un resultado?
¿La implementación de ML en mi código disminuye la sobrecarga más y hace que mi código sea menos complejo, más efectivo y más rápido?
fuente
Respuestas:
Tienes toda la razón. Un árbol de decisión no es más que una serie de declaraciones if-else. Sin embargo, es la forma en que interpretamos estas declaraciones como un árbol lo que nos permite construir estas reglas automáticamente ... Es decir, dar un conjunto de ejemplos de entrada(X1,y1) , . . . , (Xnorte,ynorte) ... cuál es el mejor conjunto de reglas que describe qué valor y ha dado una nueva entrada X ? ID3 y similares nos permiten crear automáticamente estas reglas. No se trata realmente del árbol una vez construido, se trata de cómo lo creamos.
Aparte de eso, casi nunca se usa un árbol de decisión solo, la razón es precisamente lo que usted dice: es un modelo bastante simplista que carece de expresividad. Sin embargo, tiene una gran ventaja sobre otros modelos: se puede calcular un solo árbol de decisión bastante rápido. Eso significa que podemos encontrar algoritmos que entrenan muchos árboles de decisión (impulso, también conocido como AdaBoost y GradientBoosting) en grandes conjuntos de datos. Esta colección (generalmente más de 500) de estos modelos simplistas (llamados bosques) puede expresar formas mucho más complicadas.
También podría imaginarlo así: dada una función 'agradable' (es decir, continua) pero complicadaf:[a,b]→R podríamos intentar aproximar esta función usando líneas. Si la función es complicada (comosin(x) más o menos) entonces producimos un gran error. Sin embargo, podríamos combinar líneas en la forma en que dividimos el intervalo[a,b] en partes más pequeñas a=a0<a1<...<aM=b y en cada ai,ai+1 tratamos de aproximarnos f|(ai,ai+1) (es decir, f restringido a este intervalo) por una línea. Por matemática básica (análisis) podemos aproximar la función arbitrariamente cerca (es decir, cometer un error arbitrariamente pequeño) si tomamos suficientes líneas. Por lo tanto, creamos un modelo complicado pero preciso a partir de modelos muy simples. Esa es exactamente la misma idea que (por ejemplo) utiliza GradientBoosting: construye un bosque a partir de árboles de decisión única muy 'estúpidos'.
fuente
Solo agregando a la respuesta de @Fabian Werner: ¿recuerdas haber hecho la regla de Riemann Sums en una introducción a la integración? Bueno, eso también fue un conjunto de sentencias if divididas uniformemente que usas para calcular el área bajo la función.
Si dibuja una función 1D y dibuja las particiones de manera uniforme, lo que encontrará es que en áreas donde la función tiene poco gradiente, las particiones vecinas pueden fusionarse sin una gran pérdida de precisión. Igualmente, en particiones con gradiente alto, agregar más particiones mejorará significativamente la aproximación.
Cualquier conjunto de particiones se aproximará a la función, pero algunas son claramente mejores que otras.
Ahora, al pasar a los modelos CART, vemos los datos en forma de puntos ruidosos de esta función y se nos pide que aproximamos la función. Al agregar demasiadas particiones podemos sobreajustar y esencialmente realizar un modelo de tipo vecino más cercano. Para evitar esto, limitamos el número de particiones que nuestro modelo puede usar (generalmente en forma de profundidad máxima y muestras mínimas por división). Entonces, ¿dónde debemos colocar estas divisiones? Esa es la pregunta abordada por los criterios de división. Las áreas con mayor "complejidad" deberían recibir más divisiones como regla general y eso es lo que intentan hacer gini, entropía, etc.
Hacer predicciones son solo declaraciones if-else, pero en el contexto del aprendizaje automático no es de donde proviene el poder del modelo. El poder proviene de la capacidad del modelo de intercambiar sobre y debajo del ajuste de manera escalable y puede derivarse en un marco probabilístico consistente con garantías teóricas en el límite de datos. Finalmente, si tomamos una visión abstracta similar de los modelos de ML, podemos decir que las redes neuronales, los métodos de kernel, los enfoques de Monte Carlo y muchos más son simplemente suma y multiplicación. Desafortunadamente, esa no es una visión muy útil de la literatura.
fuente
Un árbol de decisión es una partición del dominio del problema en subconjuntos, por medio de condiciones. Por lo general, se implementa en cascada si-entonces-elses. Puede verlo como un término que describe una lógica de decisión compleja.
Los árboles de decisión no son ni más eficientes ni más "compatibles" con el aprendizaje automático que las pruebas lógicas. Ellos son pruebas lógicas.
También tenga en cuenta que cualquier algoritmo no es más que una combinación de cálculos aritméticos y pruebas, es decir, un árbol de decisión (generalmente enorme).
Para completar, mencionemos que en algunos contextos, como el aprendizaje automático, los árboles de decisión complejos se construyen automáticamente, mediante algoritmos. Pero esto no cambia su naturaleza.
fuente