Cómo crear árboles de clasificación y regresión en python para la ciencia de datos
científicos de datos llaman árboles que se especializan en clases de adivinanzas en la clasificación Python árboles- árboles que trabajan con la estimación vez que se conoce como árboles de regresión. Aquí hay un problema de clasificación, utilizando datos del iris de Fisher:
Video: Arboles Binarios en Python 3
de sklearn.datasets importar load_irisiris = load_iris () X, Y = iris.data, iris.targetfeatures = iris.feature_names
Después de cargar los datos en x, que contiene predictores, y y, el cual tiene las clasificaciones, se puede definir una validación cruzada para comprobar los resultados utilizando árboles de decisión:
de sklearn.cross_validation importación cross_val_scorefrom sklearn.cross_validation importación KFoldcrossvalidation = KFold (n = X.shape [0], n_folds = 5, barajadura = True, random_state = 1)
Utilizando el DecisionTreeClassifier clase, se define máxima profundidad dentro de un bucle iterativo para experimentar con el efecto de aumentar la complejidad del árbol resultante. La expectativa es llegar a un punto ideal rápidamente y luego presenciar la disminución de rendimiento de validación cruzada debido sobreajuste:
Video: Tutorial RM: Arboles de Regresion
de importación sklearn treefor profundidad en el rango de (1,10): tree_classifier = tree.DecisionTreeClassifier (max_depth = profundidad, random_state = 0) si tree_classifier.fit (X, y) .tree_.max_depth lt; Profundidad: breakscore = np.mean (cross_val_score (tree_classifier, X, Y, anotando = `exactitud`, cv = validación cruzada, n_jobs = 1)) de impresión `Profundidad:% i Precisión:% .3f` % (profundidad, puntuación) Profundidad : 1 Precisión: 0.580Depth: 2 Precisión: 0.913Depth: 3 Precisión: 0.920Depth: 4 Precisión: 0.940Depth: 5 Precisión: 0,920
La mejor solución es un árbol con cuatro divisiones. Echa un vistazo a la complejidad del árbol resultante.
Video: Curso BD || Sesion 11.2 || Minería de Datos
Para obtener una reducción y simplificación efectiva, se puede establecer min_samples_división a 30 y evitar hojas terminales que son demasiado pequeños. Este ajuste poda sale de la pequeña terminal en el nuevo árbol resultante, lo que disminuye la precisión de validación cruzada, pero el aumento de la simplicidad y el poder de generalización de la solución.
tree_classifier = tree.DecisionTreeClassifier (min_samples_split = 30, min_samples_leaf = 10, random_state = 0) tree_classifier.fit (X, y) puntuación = np.mean (cross_val_score (tree_classifier, X, Y, y asegurar la exactitud `` =, cv = validación cruzada, n_jobs = 1)) de impresión `Precisión:% .3f` % scoreAccuracy: 0,913
De manera similar, utilizando el DecisionTreeRegressor clase, puede modelar un problema de regresión, como el Boston conjunto de datos de precios de vivienda. Cuando se trata de un árbol de regresión, las hojas terminales ofrecen la media de los casos como la salida de predicción.
Video: Tutorial RM: Arboles de Clasificacion
de sklearn.datasets importar load_bostonboston = load_boston () X, Y = boston.data, boston.targetfeatures = boston.feature_namesfrom sklearn.tree importación DecisionTreeRegressorregression_tree = tree.DecisionTreeRegressor (min_samples_split = 30, min_samples_leaf = 10, random_state = 0) regression_tree.fit (X, y) puntuación = np.mean (cross_val_score (regression_tree, X, Y, puntuación = `mean_squared_error`, cv = validación cruzada, n_jobs = 1)) de impresión `cuadrado medio del error:% .3f` % abs (puntuación) media de error al cuadrado: 22.593