Potenziare gli alberi delle decisioni in Python? [chiuso]


13

Esiste una buona libreria Python per l'addestramento di alberi decisionali potenziati?


3
Rpy, ovviamente ;-)

Sono d'accordo con mbq. C'è un ottimo motivo per cui devi farlo in Python? Altrimenti userei anche il cavallo di battaglia R come back-end.
Joris Meys,

l'unica ragione è che ho usato R solo poche volte all'anno circa e il pitone lo sto usando ogni giorno ...
Andre Holzner

2
Rpy è una dipendenza davvero brutta. R ha un enorme set di funzionalità, quindi è bello poter scavare in esse usando Rpy, ma se devi condividere quel lavoro, potresti essere nei guai, anche se si trova su computer diversi di uno stesso laboratorio, se il tuo laboratorio si trova in un ambiente informatico eterogeneo. Ciò è dovuto al fatto che Rpy dipende dall'avere le versioni minori giuste di Python, numpy e R. Ad esempio, continua a essere rotto nelle principali distribuzioni Linux.
Gael Varoquaux,

3
Le risposte qui sembrano obsolete - sembrano provenire dal momento in cui scikit.learn era all'inizio. Penso che i lettori e il sito ne trarrebbero beneficio se qualcuno competente fornisse una risposta aggiornata.
Pere,

Risposte:


5

Risposta aggiornata

Il panorama è cambiato molto e la risposta è chiara al giorno d'oggi:

  • scikit-learn è la libreria in Python e ha diversi grandi algoritmi per alberi decisionali potenziati
  • il "miglior" albero decisionale potenziato in Python è l' implementazione di XGBoost .

Aggiornamento 1

  • Nel frattempo, LightGBM , sebbene sia ancora "nuovo", sembra essere altrettanto buono o addirittura migliore di XGBoost

12

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



6

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

4
Sviluppo latte. Se uno di voi incontra qualche problema, per favore fatemelo sapere via e-mail (lpc a cmu dot edu). Le segnalazioni di bug generalmente vengono risolte in meno di 24 ore.
luispedro,

Nel frattempo, ho aggiunto un po 'più di documentazione su adaboost: packages.python.org/milk/adaboost.html, quindi il commento sopra potrebbe essere meno valido di prima.
luispedro,

4

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.


1

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.


1

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.


0

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.


0

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.