Улучшенные деревья решений в python? [закрыто]

13

Есть ли хорошая библиотека Python для обучения расширенных деревьев решений?

Андре Хольцнер
источник
3
Rpy, конечно ;-)
Я согласен с МБК. Есть ли очень веская причина, почему вы должны сделать это в Python? В противном случае я бы также использовал рабочую лошадку R в качестве серверной части.
Йорис Мейс
единственная причина в том, что я использовал R всего несколько раз в год или около того, и python я использую каждый день ...
Andre Holzner
2
Rpy - очень неприятная зависимость. R обладает огромным набором функций, и поэтому неплохо иметь возможность копаться в них с помощью Rpy, но если вам придется делиться этой работой, у вас могут возникнуть проблемы, даже если это на разных компьютерах одной лаборатории, если ваша лаборатория находится в гетерогенной вычислительной среде. Это связано с тем, что Rpy зависит от наличия нужных минорных версий Python, numpy и R. Например, он продолжает ломаться в основных дистрибутивах Linux.
Gael Varoquaux
3
Здесь ответы кажутся устаревшими - они, похоже, пришли с того времени, когда scikit.learn был в его начале. Я думаю, что читатели и сайт выиграют, если кто-то знающий поставит обновленный ответ.
Пере

Ответы:

5

Обновленный ответ

Ландшафт сильно изменился, и ответ ясен:

  • scikit учиться является библиотека на python, в которой есть несколько отличных алгоритмов для улучшенных деревьев решений.
  • «лучшее» расширенное дерево решений в python - это реализация XGBoost .

Обновление 1

  • Между тем, LightGBM , хотя все еще довольно «новый», кажется одинаково хорошим или даже лучше, чем XGBoost
Mayou36
источник
12

Мой первый взгляд был бы на Orange , который является полнофункциональным приложением для ML, с бэкэндом в Python. Смотрите, например, orngEnsemble .

Другими перспективными проектами являются mlpy и scikit.learn .

Я знаю, что PyCV включает несколько процедур повышения, но, очевидно, не для CART. Взгляните также на MLboost

хл
источник
7

Вы можете использовать библиотеку дерева решений R, используя Rpy (http://rpy.sourceforge.net/). Также проверьте статью «Построение деревьев решений с использованием python» (http: //onlamp.com/pub/a/python/2 ...).

а также есть

http://opencv.willowgarage.com/documentation/index.html

http://research.engineering.wustl.edu/~amohan/

Мариана Софер
источник
6

У меня были хорошие успехи с учениками на основе дерева в Milk: Machine Learning Toolkit для Python . Кажется, он находится в стадии активной разработки, но документация была немного скудной, когда я ее использовал. Набор тестов (github.com/luispedro/milk/blob/master/tests/test_adaboost.py), однако, содержит «усиленный пень», который может довольно быстро привести вас в движение:

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
Я разрабатываю молоко. Если у кого-либо из вас возникнут какие-либо проблемы, пожалуйста, сообщите мне об этом по электронной почте (lpc at cmu dot edu). Сообщения об ошибках обычно исправляются менее чем за 24 часа.
Луиспедро
Тем временем я добавил немного больше документации по adaboost: packages.python.org/milk/adaboost.html, поэтому приведенный выше комментарий может быть менее действительным, чем был ранее.
Луиспедро
4

У scikit-learn теперь есть хорошие деревья регрессии (и классификации) и реализации случайных лесов . Однако увеличенное дерево все еще не включено. Люди работают над этим, но для эффективной реализации требуется время.

Отказ от ответственности: я разработчик scikit-Learn.

Gael Varoquaux
источник
1

JBoost - это потрясающая библиотека. Это определенно не написано на Python, однако, это несколько не зависит от языка, потому что он может быть выполнен из командной строки и так далее, так что он может быть "извлечен" из Python. Я использовал это в прошлом, и мне это очень понравилось, особенно материал визуализации.

carlosdc
источник
1

У меня сейчас та же проблема: я ежедневно пишу код на Python, время от времени использую R и мне нужен хороший алгоритм ускоренного дерева регрессии. Хотя существует множество отличных пакетов Python для расширенной аналитики, мой поиск не нашел хорошего предложения для этого конкретного алгоритма. Таким образом, маршрут я думаю , что я буду принимать в ближайшие недели, чтобы использовать пакет GBM в R . Есть хорошая статья, показывающая практические проблемы с ее использованием, которую можно найти здесь . Важно отметить, что пакет GBM в основном использовался "с полки", чтобы выиграть в Кубке KDD 2009 года . Итак, я, вероятно, сделаю все свои модели до и после моделирования на Python и буду использовать RPy, чтобы переходить назад и вперед с R / GBM.

Джош Хеманн
источник
0

Я сталкивался с подобной ситуацией с вами, я нахожу, что Orange сложно настроить (возможно, это моя проблема). В конце концов, я использовал код Питера Норивига для его знаменитой книги, там он предоставил хорошо написанную структуру кода для дерева, все, что вам нужно, это добавить в него бустинг. Таким образом, вы можете кодировать все что угодно.

aurora1625
источник
0

Деревья решений - Ada Boosting

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

Деревья решений без ускорения

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)

Деревья решений с Ада 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)

Подгонка моделей и расчет точности

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)
Судхаршана Раджасекаран
источник