¿Existe una buena biblioteca de Python para entrenar árboles de decisión potenciados?
¿Existe una buena biblioteca de Python para entrenar árboles de decisión potenciados?
Respuestas:
Respuesta actualizada
El panorama ha cambiado mucho y la respuesta es clara hoy en día:
Actualización 1
Mi primer vistazo sería en Orange , que es una aplicación con todas las funciones para ML, con un backend en Python. Ver, por ejemplo, orngEnsemble .
Otros proyectos prometedores son mlpy y scikit.learn .
Sé que PyCV incluye varios procedimientos de refuerzo , pero aparentemente no para CART. Echa un vistazo también a MLboost
Puede usar la biblioteca del árbol de decisiones R usando Rpy (http://rpy.sourceforge.net/). Consulte también el artículo "creación de árboles de decisión utilizando python" (http: //onlamp.com/pub/a/python/2 ...).
también hay
Tuve un gran éxito con los alumnos basados en árboles en Milk: Machine Learning Toolkit for Python . Parece estar en desarrollo activo, pero la documentación era un poco escasa cuando la estaba usando. Sin embargo, el conjunto de pruebas (github.com/luispedro/milk/blob/master/tests/test_adaboost.py) contiene un "tocón reforzado", que podría ayudarlo a comenzar con bastante rapidez:
import numpy as np
import milk.supervised.tree
import milk.supervised.adaboost
def test_learner():
from milksets import wine
learner = milk.supervised.adaboost.boost_learner(milk.supervised.tree.stump_learner())
features, labels = wine.load()
features = features[labels < 2]
labels = labels[labels < 2] == 0
labels = labels.astype(int)
model = learner.train(features, labels)
train_out = np.array(map(model.apply, features))
assert (train_out == labels).mean() > .9
El scikit-learn ahora tiene buenos árboles de regresión (y clasificación) e implementaciones aleatorias de bosques . Sin embargo, el árbol impulsado aún no está incluido. La gente está trabajando en ello, pero lleva un tiempo lograr una implementación eficiente.
Descargo de responsabilidad: soy un desarrollador de scikit-learn.
JBoost es una biblioteca impresionante. Definitivamente no está escrito en Python, sin embargo, es algo agnóstico al lenguaje, ya que puede ejecutarse desde la línea de comando y así puede "manejarse" desde Python. Lo he usado en el pasado y me ha gustado mucho, particularmente las cosas de visualización.
Tengo el mismo problema ahora: codifico en Python a diario, uso R de vez en cuando y necesito un buen algoritmo de árbol de regresión mejorado. Si bien hay muchos paquetes excelentes de Python para análisis avanzados, mi búsqueda no ha encontrado una buena oferta para este algoritmo en particular. Por lo tanto, la ruta Creo que voy a tomar en las próximas semanas es utilizar el paquete de GBM en I . Hay un buen documento que muestra problemas prácticos con su uso que se pueden encontrar aquí . Es importante destacar que el paquete GBM se usó básicamente "listo para usar" en la Copa KDD 2009 . Entonces, probablemente haré todo mi modelado previo y posterior en Python y usaré RPy para ir y venir con R / GBM.
He experimentado una situación similar con usted, me parece que Orange es difícil de ajustar (tal vez sea mi problema). Al final, utilicé el código de Peter Norivig para su famoso libro, allí proporcionó un marco de código bien escrito para el árbol, todo lo que necesita es agregar impulso en él. De esta manera, puede codificar lo que quiera.
Árboles de decisión - Ada Boosting
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score
Árboles de decisión sin refuerzo
clf_entropy_no_ada = DecisionTreeClassifier(criterion = "entropy", random_state = 100,
max_depth=5, min_samples_leaf=5)
clf_entropy_no_ada.fit(X_train, y_train)
Árboles de decisión con Ada Boosting
clf_entropy_ada = AdaBoostClassifier(base_estimator= clf_entropy_no_ada,n_estimators=400,learning_rate=1)
clf_entropy_ada.fit(X_train, y_train)
Modelos de ajuste y cálculo de precisión
y_predict_no_ada = clf_entropy_no_ada.predict(X_test)
print ("Accuracy is ", accuracy_score(y_test,y_predict_no_ada)*100)
y_predict_ada = clf_entropy_ada.predict(X_test)
print ("Accuracy is ", accuracy_score(y_test,y_predict_ada)*100)