Gibt es eine gute Python-Bibliothek zum Trainieren von Boosted Decision Trees?
Gibt es eine gute Python-Bibliothek zum Trainieren von Boosted Decision Trees?
Antworten:
Aktualisierte Antwort
Die Landschaft hat sich sehr verändert und die Antwort ist heutzutage klar:
Update 1
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
Sie können die R-Entscheidungsbaumbibliothek mit Rpy (http://rpy.sourceforge.net/) verwenden. Lesen Sie auch den Artikel "Erstellen von Entscheidungsbäumen mit Python" (http: //onlamp.com/pub/a/python/2 ...).
Es gibt auch
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
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.
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.
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.
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.
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)