Czy istnieje dobra biblioteka python do drzewek decyzyjnych przyspieszonych przez trening?
Czy istnieje dobra biblioteka python do drzewek decyzyjnych przyspieszonych przez trening?
Odpowiedzi:
Zaktualizowana odpowiedź
Krajobraz bardzo się zmienił, a odpowiedź jest obecnie jasna:
Aktualizacja 1
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
Możesz użyć biblioteki drzewa decyzyjnego R za pomocą Rpy (http://rpy.sourceforge.net/). Zobacz także artykuł „Budowanie drzew decyzyjnych za pomocą Pythona” (http: //onlamp.com/pub/a/python/2 ...).
jest również
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
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.
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.
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.
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.
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)