Scikit Learn: árboles de decisión
En este capítulo, aprenderemos sobre el método de aprendizaje en Sklearn, que se denomina árboles de decisión.
Las decisiones tress (DT) son el método de aprendizaje supervisado no paramétrico más poderoso. Se pueden utilizar para las tareas de clasificación y regresión. El objetivo principal de los DT es crear un modelo que prediga el valor de la variable objetivo mediante el aprendizaje de reglas de decisión simples deducidas de las características de los datos. Los árboles de decisión tienen dos entidades principales; uno es el nodo raíz, donde los datos se dividen, y el otro son los nodos de decisión u hojas, donde obtuvimos el resultado final.
Algoritmos de árbol de decisión
Los diferentes algoritmos del árbol de decisión se explican a continuación:
ID3
Fue desarrollado por Ross Quinlan en 1986. También se llama dicotomizador iterativo 3. El objetivo principal de este algoritmo es encontrar aquellas características categóricas, para cada nodo, que producirán la mayor ganancia de información para objetivos categóricos.
Permite que el árbol crezca hasta su tamaño máximo y luego, para mejorar la capacidad del árbol en datos invisibles, aplica un paso de poda. La salida de este algoritmo sería un árbol de múltiples vías.
C4.5
Es el sucesor de ID3 y define dinámicamente un atributo discreto que divide el valor del atributo continuo en un conjunto discreto de intervalos. Esa es la razón por la que eliminó la restricción de las características categóricas. Convierte el árbol entrenado ID3 en conjuntos de reglas 'SI-ENTONCES'.
Para determinar la secuencia en la que se deben aplicar estas reglas, primero se evaluará la precisión de cada regla.
C5.0
Funciona de manera similar a C4.5 pero usa menos memoria y crea conjuntos de reglas más pequeños. Es más preciso que C4.5.
CARRO
Se denomina alsgoritmo de árboles de clasificación y regresión. Básicamente, genera divisiones binarias utilizando las características y el umbral que producen la mayor ganancia de información en cada nodo (llamado índice de Gini).
La homogeneidad depende del índice de Gini, cuanto mayor sea el valor del índice de Gini, mayor será la homogeneidad. Es como el algoritmo C4.5, pero la diferencia es que no calcula conjuntos de reglas y tampoco admite variables objetivo numéricas (regresión).
Clasificación con árboles de decisión
En este caso, las variables de decisión son categóricas.
Sklearn Module - La biblioteca Scikit-learn proporciona el nombre del módulo DecisionTreeClassifier para realizar una clasificación multiclase en un conjunto de datos.
Parámetros
La siguiente tabla consta de los parámetros utilizados por sklearn.tree.DecisionTreeClassifier módulo -
No Señor | Descripción de parámetros |
---|---|
1 | criterion - cadena, valor predeterminado opcional = "gini" Representa la función para medir la calidad de una división. Los criterios admitidos son "gini" y "entropía". El valor predeterminado es gini, que es para la impureza de Gini, mientras que la entropía es para la ganancia de información. |
2 | splitter - cadena, valor predeterminado opcional = "mejor" Le dice al modelo qué estrategia de "mejor" o "aleatoria" para elegir la división en cada nodo. |
3 | max_depth - int o None, opcional predeterminado = Ninguno Este parámetro decide la profundidad máxima del árbol. El valor predeterminado es Ninguno, lo que significa que los nodos se expandirán hasta que todas las hojas sean puras o hasta que todas las hojas contengan menos de min_smaples_split muestras. |
4 | min_samples_split - int, float, opcional predeterminado = 2 Este parámetro proporciona el número mínimo de muestras necesarias para dividir un nodo interno. |
5 | min_samples_leaf - int, float, opcional predeterminado = 1 Este parámetro proporciona el número mínimo de muestras necesarias para estar en un nodo hoja. |
6 | min_weight_fraction_leaf - flotante, predeterminado opcional = 0. Con este parámetro, el modelo obtendrá la fracción ponderada mínima de la suma de pesos requeridos para estar en un nodo hoja. |
7 | max_features - int, float, string o None, opcional predeterminado = Ninguno Le da al modelo la cantidad de características que se deben considerar al buscar la mejor división. |
8 | random_state - int, instancia de RandomState o None, opcional, predeterminado = ninguno Este parámetro representa la semilla del número pseudoaleatorio generado que se usa mientras se barajan los datos. Las siguientes son las opciones:
|
9 | max_leaf_nodes - int o None, opcional predeterminado = Ninguno Este parámetro permitirá hacer crecer un árbol con max_leaf_nodes de la mejor manera. El valor predeterminado es ninguno, lo que significa que habría un número ilimitado de nodos hoja. |
10 | min_impurity_decrease - flotante, predeterminado opcional = 0. Este valor funciona como criterio para que un nodo se divida porque el modelo dividirá un nodo si esta división induce una disminución de la impureza mayor o igual a min_impurity_decrease value. |
11 | min_impurity_split - flotante, predeterminado = 1e-7 Representa el umbral para la interrupción temprana del crecimiento de los árboles. |
12 | class_weight - dictado, lista de dictados, "equilibrado" o Ninguno, predeterminado = Ninguno Representa los pesos asociados con las clases. El formulario es {class_label: weight}. Si usamos la opción predeterminada, significa que se supone que todas las clases tienen el peso uno. Por otro lado, si eligesclass_weight: balanced, utilizará los valores de y para ajustar automáticamente los pesos. |
13 | presort - bool, opcional predeterminado = Falso Indica al modelo si debe clasificar previamente los datos para acelerar la búsqueda de las mejores divisiones en el ajuste. El valor predeterminado es falso, pero si se establece en verdadero, puede ralentizar el proceso de entrenamiento. |
Atributos
La siguiente tabla consta de los atributos utilizados por sklearn.tree.DecisionTreeClassifier módulo -
No Señor | Descripción de parámetros |
---|---|
1 | feature_importances_ - matriz de forma = [n_features] Este atributo devolverá la importancia de la característica. |
2 | classes_: - matriz de forma = [n_classes] o una lista de tales matrices Representa las etiquetas de las clases, es decir, el problema de salida única, o una lista de matrices de etiquetas de clase, es decir, el problema de múltiples salidas. |
3 | max_features_ - int Representa el valor deducido del parámetro max_features. |
4 | n_classes_ - int o lista Representa el número de clases, es decir, el problema de salida única, o una lista de la cantidad de clases para cada salida, es decir, el problema de múltiples salidas. |
5 | n_features_ - int Da el número de features cuando se realiza el método fit (). |
6 | n_outputs_ - int Da el número de outputs cuando se realiza el método fit (). |
Métodos
La siguiente tabla consta de los métodos utilizados por sklearn.tree.DecisionTreeClassifier módulo -
No Señor | Descripción de parámetros |
---|---|
1 | apply(yo, X [, check_input]) Este método devolverá el índice de la hoja. |
2 | decision_path(yo, X [, check_input]) Como sugiere el nombre, este método devolverá la ruta de decisión en el árbol. |
3 | fit(yo mismo, X, y [, peso_muestra,…]) El método fit () construirá un clasificador de árbol de decisión a partir del conjunto de entrenamiento dado (X, y). |
4 | get_depth(yo) Como sugiere el nombre, este método devolverá la profundidad del árbol de decisiones |
5 | get_n_leaves(yo) Como sugiere el nombre, este método devolverá el número de hojas del árbol de decisión. |
6 | get_params(yo [, profundo]) Podemos utilizar este método para obtener los parámetros del estimador. |
7 | predict(yo, X [, check_input]) Predecirá el valor de clase para X. |
8 | predict_log_proba(yo, X) Predecirá las probabilidades logarítmicas de clase de las muestras de entrada proporcionadas por nosotros, X. |
9 | predict_proba(yo, X [, check_input]) Predecirá las probabilidades de clase de las muestras de entrada proporcionadas por nosotros, X. |
10 | score(yo, X, y [, peso_muestra]) Como su nombre lo indica, el método score () devolverá la precisión media en los datos y etiquetas de prueba dados. |
11 | set_params(yo, \ * \ * params) Podemos establecer los parámetros del estimador con este método. |
Ejemplo de implementación
La secuencia de comandos de Python a continuación utilizará sklearn.tree.DecisionTreeClassifier módulo para construir un clasificador para predecir hombres o mujeres a partir de nuestro conjunto de datos que tiene 25 muestras y dos características, a saber, 'altura' y 'longitud de cabello' -
from sklearn import tree
from sklearn.model_selection import train_test_split
X=[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15]
,[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[12
6,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,2
5], [196,38], [126,40], [197,20], [150,25], [140,32],[136,35]]
Y=['Man','Woman','Woman','Man','Woman','Man','Woman','Ma
n','Woman','Man','Woman','Man','Woman','Woman','Woman','
Man','Woman','Woman','Man', 'Woman', 'Woman', 'Man', 'Man', 'Woman', 'Woman']
data_feature_names = ['height','length of hair']
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)
DTclf = tree.DecisionTreeClassifier()
DTclf = clf.fit(X,Y)
prediction = DTclf.predict([[135,29]])
print(prediction)
Salida
['Woman']
También podemos predecir la probabilidad de cada clase usando el siguiente método python predict_proba () de la siguiente manera:
Ejemplo
prediction = DTclf.predict_proba([[135,29]])
print(prediction)
Salida
[[0. 1.]]
Regresión con árboles de decisión
En este caso, las variables de decisión son continuas.
Sklearn Module - La biblioteca Scikit-learn proporciona el nombre del módulo DecisionTreeRegressor para aplicar árboles de decisión en problemas de regresión.
Parámetros
Parámetros usados por DecisionTreeRegressor son casi los mismos que se utilizaron en DecisionTreeClassifiermódulo. La diferencia radica en el parámetro "criterio". porDecisionTreeRegressor módulos ‘criterion: cadena, el parámetro opcional predeterminado = "mse" 'tiene los siguientes valores:
mse- Representa el error cuadrático medio. Es igual a la reducción de la varianza como criterio de selección de características. Minimiza la pérdida L2 utilizando la media de cada nodo terminal.
freidman_mse - También utiliza el error cuadrático medio pero con la puntuación de mejora de Friedman.
mae- Representa el error absoluto medio. Minimiza la pérdida de L1 utilizando la mediana de cada nodo terminal.
Otra diferencia es que no tiene ‘class_weight’ parámetro.
Atributos
Atributos de DecisionTreeRegressor son también los mismos que fueron de DecisionTreeClassifiermódulo. La diferencia es que no tiene‘classes_’ y ‘n_classes_'atributos.
Métodos
Métodos de DecisionTreeRegressor son también los mismos que fueron de DecisionTreeClassifiermódulo. La diferencia es que no tiene‘predict_log_proba()’ y ‘predict_proba()’'atributos.
Ejemplo de implementación
El método fit () en el modelo de regresión del árbol de decisión tomará valores de punto flotante de y. veamos un ejemplo de implementación simple usandoSklearn.tree.DecisionTreeRegressor -
from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)
Una vez ajustado, podemos usar este modelo de regresión para hacer predicciones de la siguiente manera:
DTreg.predict([[4, 5]])
Salida
array([1.5])