Mehr Entscheidungsbäume in Python? [geschlossen]

13

Gibt es eine gute Python-Bibliothek zum Trainieren von Boosted Decision Trees?

Andre Holzner
quelle
3
Rpy, natürlich ;-)
Ich bin mit mbq einverstanden. Gibt es einen sehr guten Grund, warum Sie das in Python tun müssen? Ansonsten würde ich das Arbeitstier R auch als Backend verwenden.
Joris Meys
Der einzige Grund ist, dass ich R nur sehr wenige Male im Jahr oder so verwendet habe und Python ich jeden Tag benutze ...
Andre Holzner
2
RPY ist eine wirklich üble Abhängigkeit. R verfügt über eine Vielzahl von Funktionen, und daher ist es schön, sie mit Rpy durchsuchen zu können. Wenn Sie diese Funktionen jedoch gemeinsam nutzen müssen, kann dies zu Problemen führen, auch wenn sie sich auf mehreren Computern desselben Labors befinden. Wenn sich Ihr Labor in einer heterogenen Computerumgebung befindet. Dies liegt an der Tatsache, dass Rpy davon abhängt, die richtigen Nebenversionen von Python, numpy und R zu haben. Beispielsweise ist es in den großen Linux-Distributionen immer wieder kaputt.
Gael Varoquaux
3
Die Antworten hier scheinen veraltet zu sein - sie scheinen aus der Zeit zu stammen, als scikit.learn noch am Anfang stand. Ich denke, Leser und die Site würden davon profitieren, wenn jemand, der sich auskennt, eine aktualisierte Antwort geben würde.
Pere

Antworten:

5

Aktualisierte Antwort

Die Landschaft hat sich sehr verändert und die Antwort ist heutzutage klar:

  • scikit-learn ist die Bibliothek in Python und verfügt über mehrere großartige Algorithmen für beschleunigte Entscheidungsbäume
  • Der "beste" geboostete Entscheidungsbaum in Python ist die XGBoost- Implementierung.

Update 1

  • Währenddessen scheint LightGBM , obwohl es noch ziemlich "neu" ist, gleich gut oder sogar besser als XGBoost zu sein
Mayou36
quelle
12

Mein erster Blick wäre Orange , eine voll funktionsfähige App für ML, mit einem Backend in Python. Siehe zB orngEnsemble .

Weitere vielversprechende Projekte sind mlpy und scikit.learn .

Ich weiß, dass PyCV mehrere Boosting-Verfahren beinhaltet, aber anscheinend nicht für CART. Schauen Sie sich auch MLboost an

chl
quelle
6

Ich hatte gute Erfolge mit den baumbasierten Lernende in der Milch: Machine Learning Toolkit für Python . Es scheint sich in der aktiven Entwicklung zu befinden, aber die Dokumentation war etwas spärlich, als ich es verwendete. Die Testsuite (github.com/luispedro/milk/blob/master/tests/test_adaboost.py) enthält jedoch einen "Boosted Stump", der Sie ziemlich schnell zum Laufen bringen könnte:

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 Flachsmann
quelle
4
Ich entwickle Milch. Wenn einer von Ihnen Probleme hat, lassen Sie es mich bitte per E-Mail wissen (lpc bei cmu dot edu). Fehlerberichte werden in der Regel in weniger als 24 Stunden behoben.
Luispedro
In der Zwischenzeit habe ich etwas mehr Dokumentation zu adaboost hinzugefügt: packages.python.org/milk/adaboost.html, sodass der obige Kommentar möglicherweise weniger gültig ist als zuvor.
Luispedro
4

Das Scikit-Learn hat jetzt gute Implementierungen für Regressions- (und Klassifizierungs-) Bäume und zufällige Wälder . Boosted Tree ist jedoch immer noch nicht enthalten. Die Leute arbeiten daran, aber es dauert eine Weile, bis eine effiziente Implementierung erreicht ist.

Haftungsausschluss: Ich bin ein Scikit-Learn-Entwickler.

Gael Varoquaux
quelle
1

JBoost ist eine großartige Bibliothek. Es ist definitiv nicht in Python geschrieben, aber es ist etwas sprachunabhängig, weil es von der Kommandozeile ausgeführt werden kann und so von Python "gesteuert" werden kann. Ich habe es in der Vergangenheit benutzt und mochte es sehr, besonders das Visualisierungsmaterial.

carlosdc
quelle
1

Ich habe im Moment das gleiche Problem: Ich codiere täglich in Python, verwende ab und zu R und benötige einen guten Algorithmus für verstärkte Regressionsbäume. Obwohl es viele großartige Python-Pakete für erweiterte Analyse gibt, hat meine Suche kein gutes Angebot für diesen bestimmten Algorithmus gefunden. Der Weg, den ich in den kommenden Wochen einschlagen werde, ist also, das GBM-Paket in R zu verwenden . Es gibt ein gutes Papier, das praktische Probleme bei der Verwendung zeigt und hier zu finden ist . Wichtig ist, dass das GBM-Paket im KDD-Cup 2009 grundsätzlich "von der Stange" verwendet wurde . Also werde ich wahrscheinlich alle meine Vor- und Nachmodelle in Python erstellen und RPy verwenden, um mit R / GBM hin und her zu gehen.

Josh Hemann
quelle
0

Ich habe die ähnliche Situation bei Ihnen erlebt. Ich finde, Orange ist schwer einzustellen (vielleicht ist es mein Problem). Am Ende habe ich Peter Norivigs Code für sein berühmtes Buch verwendet. Dort hat er ein gut geschriebenes Code-Framework für Tree bereitgestellt. Alles, was Sie brauchen, ist das Hinzufügen von Boosting. Auf diese Weise können Sie alles programmieren, was Sie möchten.

aurora1625
quelle
0

Entscheidungsbäume - Ada Boosting

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

Entscheidungsbäume ohne Boosting

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)

Entscheidungsbäume mit 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)

Modelle anpassen und Genauigkeit berechnen

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
quelle