Decision Trees
Índice de contenido
Clasificación y principales características
Un modelo de árbol de decisión es:
- Apropiado para tareas tanto de clasificación, como de regresión.
- Supervisado: requiere datos de entrenamiento etiquetados.
- De aprendizaje basado en modelo.
- De tipo “eager learning”: durante el entrenamiento se construye un modelo que se utiliza después para hacer las predicciones.
- No paramétrico: no requiere que la distribución de la población sea caracterizada por ciertos parámetros.
- Global: se construye un modelo, no se tienen en cuenta únicamente las instancias de entrenamiento más cercanas a las nuevas muestras.
Objetivo
Los árboles de decisión (decision trees) son un método de aprendizaje supervisado no paramétrico que se utiliza para clasificación y regresión. El objetivo es crear un modelo que prediga el valor de una variable objetivo mediante el aprendizaje de reglas de decisión simples inferidas a partir de las otras variables. Cuanto más profundo es el árbol, más complejas son las reglas de decisión y más ajustado es el modelo.
Los árboles de decisión se pueden utilizar tanto para problemas de clasificación, como para problemas de regresión.
Funcionamiento del algoritmo
Hay varios algoritmos que permiten generar árboles de decisión:
- ID3
- C4.5
- C5.0
- CART
Scikit-Learn utiliza una versión de CART optimizada.
Las medidas de impureza que se suelen utilizar son:
Para clasificación, la impureza de Gini y la entropía. https://scikit-learn.org/stable/modules/tree.html#classification-criteria
Para regresión, el mse, el friedman-mse y el mae. https://scikit-learn.org/stable/modules/tree.html#regression-criteria
Decision trees en Scikit-Learn
Clasificación
La clase DecisionTreeClassifier de Scikit-Learn es capaz de abordar problemas tanto de clasificación binaria como multiclase.
Hiperparámetros
class sklearn.tree.DecisionTreeClassifier(*, criterion=‘gini’, splitter=‘best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=‘deprecated’, ccp_alpha=0.0)
criterion
Permite indicar la función para medir la calidad de una división.
Puede ser una de las siguientes opciones:
{“gini”, “entropy”}
Por defecto es ”gini”.
- “gini” usa la impureza de Gini.
- “entropy” usa la ganancia de información.
splitter
Es la estrategia utilizada para elegir la división en cada nodo.
Puede ser una de las siguientes opciones:
{“best”, “random”}
Por defecto es ”best”.
- “best” elige la mejor división.
- “random” elige la mejor división aleatoria.
max_depth
Es la profundidad máxima del árbol. Si es None, los nodos se expanden hasta que todas las hojas sean puras o hasta que todas las hojas contengan menos de min_samples_split muestras.
min_samples_split
Es el número mínimo de muestras necesarias para dividir un nodo interno:
Si es un valor de tipo int, entonces este es el número mínimo.
Si es un valor de tipo float, entonces min_samples_split es una fracción y el número mínimo de muestras para cada división viene dado por ceil(min_samples_split * n_samples).
min_samples_leaf
Es el número mínimo de muestras necesarias para estar en un nodo hoja. Un punto de división a cualquier profundidad solo se considerará si deja al menos min_samples_leaf muestras de entrenamiento en cada una de las ramas izquierda y derecha. Esto puede tener el efecto de suavizar el modelo, especialmente en regresión.
Si es un valor de tipo int, entonces este es el número mínimo.
Si es un valor de tipo float, entonces min_samples_leaf es una fracción y el número mínimo de muestras para cada nodo viene dado por ceil(min_samples_leaf * n_samples).
min_weight_fraction_leaf
Es la fracción ponderada mínima de la suma total de pesos (de todas las muestras de entrada) que se requiere para estar en un nodo hoja.
max_features
Es el número de variables a considerar cuando se busca la mejor división.
Puede ser de tipo int, float o una opción de las siguientes:
{“auto”, “sqrt”, “log2”}
Por defecto es None.
- Si es de tipo int, entonces se consideran max_features variables en cada división.
- Si es de tipo float, entonces max_features es una fracción y en cada división se considera un número de variables dado por int(max_features * n_features).
- Si es “auto”, entonces max_features=sqrt(n_features).
- Si es “sqrt”, entonces max_features=sqrt(n_features).
- Si es “log2”, entonces max_features=log2(n_features).
- Si es None, entonces max_features=n_features.
Nota: la búsqueda de una división no se detiene hasta que se encuentra al menos una partición válida de las muestras de nodos, incluso si requiere inspeccionar de manera efectiva más de max_features características.
max_leaf_nodes
Indica el número total de nodos hoja en un árbol.
min_impurity_decrease
Un nodo se dividirá si esta división induce una disminución de la impureza mayor o igual al valor dado por este hiperparámetro.
La ecuación ponderada de disminución de impurezas es la siguiente:
min_impurity_split
Es el umbral de parada temprana (early stopping) en el crecimiento de los árboles. Un nodo se dividirá si su impureza está por encima del umbral; de lo contrario, será un nodo hoja.
class_weight
Pesos asociados a las clases, dados en forma {class_label: weight}. Si es None, se supone que todas las clases tienen peso 1. Para problemas multi-output, se puede proporcionar una lista de diccionarios en el mismo orden que las columnas de la variable y.
ccp_alpha
Hiperparámetro de complejidad utilizado para la poda de mínimo coste-complejidad (Minimal Cost-Complexity Pruning). Se elegirá el subárbol con mayor complejidad de coste, que a su vez sea más pequeño que el valor espedificado mediante ccp_alpha. De forma predeterminada, no se realiza ninguna poda.
Regresión
Hiperparámetros
class sklearn.tree.DecisionTreeRegressor(*, criterion=‘mse’, splitter=‘best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort=‘deprecated’, ccp_alpha=0.0)
criterion
Permite indicar la función para medir la calidad de una división.
Puede ser una de las siguientes opciones:
{“mse”, “friedman_mse”, “mae”}
Por defecto es ”mse”.
- “mse” usa el error cuadrático medio, que es igual a la reducción de la varianza como criterio de selección de características y minimiza la pérdida L2 utilizando la media de cada nodo terminal.
- “friedman_mse” usa el error cuadrático medio con la puntuación de mejora de Friedman para el potencial split
- “mae” usa el error absoluto medio, lo que minimiza la pérdida de L1 utilizando la mediana de cada nodo terminal.
Resto de hiperparámetros
Todos los demás hiperparámetros son iguales que los que se usan en clasificación.
