¿Árboles de decisión impulsados ​​en Python? [cerrado]

13

¿Existe una buena biblioteca de Python para entrenar árboles de decisión potenciados?

Andre Holzner
fuente
3
Rpy, por supuesto ;-)
Estoy de acuerdo con mbq. ¿Hay una muy buena razón por la que tienes que hacer eso en Python? De lo contrario, también usaría el caballo de batalla R como back-end.
Joris Meys
La única razón es que he usado R muy pocas veces hace un año más o menos y Python estoy usando todos los días ...
Andre Holzner
2
Rpy es una dependencia realmente desagradable. R tiene un gran conjunto de características y, por lo tanto, es bueno poder cavar en ellas usando Rpy, pero si tiene que compartir ese trabajo, podría estar en problemas, incluso si se trata de diferentes computadoras de un mismo laboratorio, si su laboratorio se encuentra en un entorno informático heterogéneo. Esto se debe al hecho de que Rpy depende de tener las versiones menores correctas de Python, numpy y R. Por ejemplo, se sigue rompiendo en las principales distribuciones de Linux.
Gael Varoquaux
3
Las respuestas aquí parecen anticuadas: parecen provenir del momento en que scikit.learn estaba en sus comienzos. Creo que los lectores y el sitio se beneficiarían si alguien bien informado respondiera de manera actualizada.
Pere

Respuestas:

5

Respuesta actualizada

El panorama ha cambiado mucho y la respuesta es clara hoy en día:

  • scikit-learn es el biblioteca en python y tiene varios algoritmos geniales para árboles de decisión potenciados
  • El "mejor" árbol de decisión impulsado en Python es la implementación de XGBoost .

Actualización 1

  • Mientras tanto, LightGBM , aunque todavía es bastante "nuevo", parece ser igual de bueno o incluso mejor que XGBoost
Mayou36
fuente
12

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

chl
fuente
6

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
Abraham Flaxman
fuente
44
Yo desarrollo la leche. Si alguno de ustedes tiene algún problema, hágamelo saber por correo electrónico (lpc en cmu dot edu). Los informes de errores generalmente se arreglan en menos de 24 horas.
luispedro
Mientras tanto, agregué un poco más de documentación sobre adaboost: packages.python.org/milk/adaboost.html, por lo que el comentario anterior podría ser menos válido de lo que era antes.
luispedro
4

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.

Gael Varoquaux
fuente
1

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.

carlosdc
fuente
1

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.

Josh Hemann
fuente
0

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.

aurora1625
fuente
0

Á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)
Sudharsana Rajasekaran
fuente