Zwiększone drzewa decyzyjne w pythonie? [Zamknięte]

13

Czy istnieje dobra biblioteka python do drzewek decyzyjnych przyspieszonych przez trening?

Andre Holzner
źródło
3
Rpy, oczywiście ;-)
Zgadzam się z mbq. Czy istnieje bardzo dobry powód, dla którego musisz to zrobić w Pythonie? W przeciwnym razie użyłbym również konia roboczego R jako zaplecza.
Joris Meys,
jedynym powodem jest to, że korzystałem z R tylko kilka razy w roku, a python używam każdego dnia ...
Andre Holzner
2
Rpy to naprawdę paskudna zależność. R ma ogromny zestaw funkcji, dlatego miło jest móc je kopać za pomocą Rpy, ale jeśli musisz udostępnić tę pracę, możesz mieć kłopoty, nawet jeśli są na różnych komputerach w tym samym laboratorium, jeśli twoje laboratorium znajduje się w heterogenicznym środowisku komputerowym. Wynika to z faktu, że Rpy zależy od posiadania odpowiednich mniejszych wersji Pythona, numpy i R. Na przykład ciągle się psuje w głównych dystrybucjach Linuksa.
Gael Varoquaux,
3
Odpowiedzi tutaj wydają się nieaktualne - wydają się pochodzić z czasów, gdy scikit.learn był na początku. Myślę, że czytelnicy i strona skorzystaliby, gdyby ktoś posiadający wiedzę umieścił zaktualizowaną odpowiedź.
Pere

Odpowiedzi:

5

Zaktualizowana odpowiedź

Krajobraz bardzo się zmienił, a odpowiedź jest obecnie jasna:

  • scikit-learn to bibliotekę w Pythonie i ma kilka wspaniałych algorytmów wzmocnionymi drzew decyzyjnych
  • „najlepszym” ulepszonym drzewem decyzyjnym w Pythonie jest implementacja XGBoost .

Aktualizacja 1

  • Tymczasem LightGBM , choć wciąż całkiem „nowy”, wydaje się być równie dobry, a nawet lepszy niż XGBoost
Mayou36
źródło
12

Moje pierwsze spojrzenie to Orange , która jest w pełni funkcjonalną aplikacją dla ML, z zapleczem w Pythonie. Zobacz np . OrngEnsemble .

Inne obiecujące projekty to mlpy i scikit.learn .

Wiem, że PyCV obejmuje kilka procedur przypominających, ale najwyraźniej nie w przypadku CART. Zobacz także MLboost

chl
źródło
6

Miałem dobry sukces z uczniami opartymi na drzewach w Milk: Machine Learning Toolkit for Python . Wydaje się, że jest w trakcie aktywnego opracowywania, ale dokumentacja była nieco rzadka, kiedy go używałem. Pakiet testowy (github.com/luispedro/milk/blob/master/tests/test_adaboost.py) zawiera jednak „wzmocniony kikut”, który może przyspieszyć:

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
źródło
4
Rozwijam mleko. Jeśli któryś z was napotka jakieś problemy, proszę dać mi znać przez e-mail (lpc at cmu dot edu). Zgłoszenia błędów zazwyczaj są naprawiane w ciągu 24 godzin.
luispedro
W międzyczasie dodałem trochę więcej dokumentacji na adaboost: packages.python.org/milk/adaboost.html, więc powyższy komentarz może być mniej poprawny niż wcześniej.
luispedro
4

Scikit-learn ma teraz dobre drzewa regresji (i klasyfikacji) oraz losowe implementacje lasów . Jednak wzmocnione drzewo nadal nie jest uwzględnione. Ludzie pracują nad tym, ale efektywne wdrożenie zajmuje trochę czasu.

Oświadczenie: Jestem programistą scikit-learn.

Gael Varoquaux
źródło
1

JBoost to niesamowita biblioteka. Zdecydowanie nie jest napisany w Pythonie, jednak jest on w pewnym stopniu niezależny od języka, ponieważ można go wykonać z wiersza poleceń i tym samym można „sterować” z Pythona. Używałem go w przeszłości i bardzo mi się podobało, szczególnie w przypadku wizualizacji.

carlosdc
źródło
1

Mam teraz ten sam problem: codziennie piszę w Pythonie, od czasu do czasu używam R i potrzebuję dobrego algorytmu drzewa regresji wzmocnionej. Chociaż istnieje wiele świetnych pakietów Pythona do zaawansowanej analizy, moje wyszukiwanie nie znalazło dobrej oferty dla tego konkretnego algorytmu. Tak więc, droga myślę, że będę brać w najbliższych tygodniach jest użycie pakietu GBM w R . Jest dobry artykuł pokazujący praktyczne problemy z jego używaniem, które można znaleźć tutaj . Co ważne, pakiet GBM został w zasadzie użyty „z półki”, aby zdobyć w Pucharze KDD 2009 . Więc prawdopodobnie wykonam całe moje modelowanie przed i po w Pythonie i używam RPy do przechodzenia tam iz powrotem z R / GBM.

Josh Hemann
źródło
0

Doświadczyłem podobnej sytuacji z tobą, uważam, że Orange trudno jest dostroić (może to mój problem). W końcu użyłem kodu Petera Noriviga do jego słynnej książki, w której dostarczyłem dobrze napisane ramy kodu dla drzewa, wszystko czego potrzebujesz to dodanie do niego ulepszeń. W ten sposób możesz kodować wszystko, co chcesz.

aurora1625
źródło
0

Drzewa decyzyjne - Ada Boosting

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

Drzewa decyzyjne bez wzmocnienia

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)

Drzewa decyzyjne z 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)

Dopasowywanie modeli i obliczanie dokładności

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
źródło