Esiste una buona libreria Python per l'addestramento di alberi decisionali potenziati?
Esiste una buona libreria Python per l'addestramento di alberi decisionali potenziati?
Risposte:
Risposta aggiornata
Il panorama è cambiato molto e la risposta è chiara al giorno d'oggi:
Aggiornamento 1
Il mio primo sguardo sarebbe Orange , che è un'app completa per ML, con un backend in Python. Vedi ad esempio orngEnsemble .
Altri progetti promettenti sono mlpy e scikit.learn .
So che PyCV include diverse procedure di potenziamento, ma apparentemente non per CART. Dai un'occhiata anche a MLboost
È possibile utilizzare la libreria dell'albero decisionale R utilizzando Rpy (http://rpy.sourceforge.net/). Consulta anche l'articolo "Creazione di alberi decisionali mediante python" (http: //onlamp.com/pub/a/python/2 ...).
c'è anche
Ho avuto un buon successo con gli studenti basati su alberi in Milk: Machine Learning Toolkit per Python . Sembra essere in fase di sviluppo attivo, ma la documentazione era un po 'scarsa quando la stavo usando. La suite di test (github.com/luispedro/milk/blob/master/tests/test_adaboost.py) contiene però un "ceppo potenziato", che potrebbe farti andare abbastanza velocemente:
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
Lo scikit-learn ora ha una buona regressione (e classificazione) alberi e implementazioni di foreste casuali . Tuttavia, l'albero potenziato non è ancora incluso. Le persone ci stanno lavorando, ma ci vuole un po 'di tempo per ottenere un'implementazione efficiente.
Disclaimer: sono uno sviluppatore di scikit-learn.
JBoost è una libreria fantastica. Non è sicuramente scritto in Python, tuttavia è in qualche modo indipendente dal linguaggio, perché può essere eseguito dalla riga di comando e quindi può essere "guidato" da Python. L'ho usato in passato e mi è piaciuto molto, in particolare le cose di visualizzazione.
Ho lo stesso problema in questo momento: codice in Python ogni giorno, uso R una volta ogni tanto e ho bisogno di un buon algoritmo dell'albero della regressione potenziato. Mentre ci sono molti fantastici pacchetti Python per analisi avanzate, la mia ricerca non ha trovato una buona offerta per questo particolare algoritmo. Quindi, il percorso Penso che prenderò nelle prossime settimane è quello di utilizzare il pacchetto di GBM in R . C'è un buon documento che mostra problemi pratici con l'utilizzo che può essere trovato qui . È importante sottolineare che il pacchetto GBM è stato sostanzialmente utilizzato "pronto all'uso" per la Coppa KDD 2009 . Quindi, probabilmente farò tutta la mia modellazione pre e post in Python e userò RPy per andare avanti e indietro con R / GBM.
Ho vissuto una situazione simile con te, trovo che Orange sia difficile da sintonizzare (forse è un mio problema). Alla fine, ho usato il codice di Peter Norivig per il suo famoso libro, lì ha fornito un framework di codice ben scritto per l'albero, tutto ciò che serve è aggiungere ulteriore enfasi in esso. In questo modo, puoi codificare tutto ciò che ti piace.
Alberi decisionali - Ada Boosting
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score
Alberi decisionali senza potenziamento
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)
Alberi decisionali 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)
Modelli di adattamento e precisione di calcolo
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)