Arbres de décision boostés en python? [fermé]

13

Existe-t-il une bonne bibliothèque python pour l'entraînement des arbres de décision boostés?

Andre Holzner
la source
3
Rpy, bien sûr ;-)
Je suis d'accord avec mbq. Y a-t-il une très bonne raison pour laquelle vous devez le faire en Python? Sinon, j'utiliserais également le cheval de bataille R comme back-end.
Joris Meys
la seule raison étant que je n'ai utilisé R que très peu de fois il y a environ un an et du python que j'utilise tous les jours ...
Andre Holzner
2
Rpy est une dépendance vraiment désagréable. R a un ensemble énorme de fonctionnalités, et il est donc agréable de pouvoir les creuser en utilisant Rpy, mais si vous devez partager ce travail, vous pourriez avoir des ennuis, même s'il se trouve sur différents ordinateurs d'un même laboratoire, si votre laboratoire se trouve dans un environnement informatique hétérogène. Cela est dû au fait que Rpy dépend de la bonne version mineure de Python, numpy et R. Par exemple, il continue d'être cassé dans les principales distributions Linux.
Gael Varoquaux
3
Les réponses ici semblent dépassées - elles semblent provenir de l'époque où scikit.learn était à ses débuts. Je pense que les lecteurs et le site gagneraient à ce que quelqu'un de bien informé mette une réponse à jour.
Pere

Réponses:

5

Réponse mise à jour

Le paysage a beaucoup changé et la réponse est claire de nos jours:

  • scikit-learn est la bibliothèque en python et possède plusieurs excellents algorithmes pour les arbres de décision boostés
  • le "meilleur" arbre de décision boosté en python est l' implémentation XGBoost .

Mise à jour 1

  • Pendant ce temps, LightGBM , bien que toujours assez "nouveau", semble être tout aussi bon voire meilleur que XGBoost
Mayou36
la source
12

Mon premier regard serait sur Orange , qui est une application complète pour ML, avec un backend en Python. Voir par exemple orngEnsemble .

D'autres projets prometteurs sont mlpy et scikit.learn .

Je sais que PyCV comprend plusieurs procédures de boost, mais apparemment pas pour CART. Jetez également un œil à MLboost

chl
la source
6

J'ai eu un bon succès avec les apprenants arborescents de Milk: Machine Learning Toolkit for Python . Il semble être en développement actif, mais la documentation était un peu clairsemée lorsque je l'utilisais. La suite de tests (github.com/luispedro/milk/blob/master/tests/test_adaboost.py) contient cependant une "souche boostée", qui pourrait vous permettre de démarrer assez rapidement:

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
la source
4
Je développe du lait. Si vous rencontrez des problèmes, veuillez m'en informer par e-mail (lpc at cmu dot edu). Les rapports de bugs sont généralement corrigés en moins de 24 heures.
luispedro
En attendant, j'ai ajouté un peu plus de documentation sur adaboost: packages.python.org/milk/adaboost.html afin que le commentaire ci-dessus soit moins valide qu'il ne l'était auparavant.
luispedro
4

Le scikit-learn a maintenant de bons arbres de régression (et de classification) et des implémentations de forêts aléatoires . Cependant, l'arbre boosté n'est toujours pas inclus. Les gens y travaillent, mais il faut du temps pour obtenir une mise en œuvre efficace.

Avertissement: je suis un développeur scikit-learn.

Gael Varoquaux
la source
1

JBoost est une bibliothèque géniale. Il n'est certainement pas écrit en Python, mais il est quelque peu indépendant du langage, car il peut être exécuté à partir de la ligne de commande et ainsi il peut être "piloté" à partir de Python. Je l'ai utilisé dans le passé et je l'ai beaucoup aimé, en particulier pour la visualisation.

carlosdc
la source
1

J'ai le même problème en ce moment: je code en Python quotidiennement, j'utilise R de temps en temps et j'ai besoin d'un bon algorithme d'arbre de régression boosté. Bien qu'il existe de nombreux packages Python pour des analyses avancées, ma recherche n'a pas trouvé une bonne offre pour cet algorithme particulier. Ainsi, la route , je pense que je vais prendre dans les prochaines semaines est d'utiliser le paquet GBM dans R . Il existe un bon document montrant les problèmes pratiques liés à son utilisation qui peut être trouvé ici . Surtout, le package GBM a été essentiellement utilisé "sur étagère" pour la Coupe KDD 2009 . Donc, je vais probablement faire toutes mes modélisations pré et post en Python et utiliser RPy pour aller et venir avec R / GBM.

Josh Hemann
la source
0

J'ai vécu la même situation avec vous, je trouve que Orange est difficile à régler (c'est peut-être mon problème). En fin de compte, j'ai utilisé le code de Peter Norivig pour son célèbre livre, là-dedans, il a fourni un cadre de code bien écrit pour l'arbre, tout ce dont vous avez besoin est d'y ajouter du boost. De cette façon, vous pouvez coder tout ce que vous aimez.

aurora1625
la source
0

Arbres de décision - Ada Boosting

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score

Arbres de décision sans boost

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)

Arbres de décision avec 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)

Ajustement des modèles et calcul de la précision

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
la source