Árvores de decisão melhoradas em python? [fechadas]

13

Existe uma boa biblioteca python para o treinamento de árvores de decisão aprimoradas?

Andre Holzner
fonte
3
Rpy, é claro ;-)
Eu concordo com o mbq. Existe uma boa razão para você fazer isso no Python? Caso contrário, eu também usaria o cavalo de batalha R como back-end.
Joris Meys
a única razão é que eu usei R muito poucas vezes por ano ou mais atrás e python Eu estou usando todos os dias ...
Andre Holzner
2
Rpy é uma dependência realmente desagradável. O R tem um conjunto enorme de recursos e, portanto, é bom poder cavá-los usando o Rpy, mas se você precisar compartilhar esse trabalho, poderá estar com problemas, mesmo que seja em computadores diferentes de um mesmo laboratório, se o seu laboratório estiver em um ambiente de computação heterogêneo. Isso se deve ao fato de o Rpy depender de ter as versões secundárias corretas do Python, numpy e R. Por exemplo, ele continua sendo quebrado nas principais distribuições do Linux.
Gael Varoquaux 5/02
3
As respostas aqui parecem desatualizadas - parecem vir do momento em que o scikit.learn estava no início. Acho que os leitores e o site se beneficiariam se alguém com conhecimento colocasse uma resposta atualizada.
Pere

Respostas:

5

Resposta atualizada

A paisagem mudou muito e a resposta é clara hoje em dia:

  • O scikit-learn é a biblioteca em python e possui vários ótimos algoritmos para árvores de decisão aprimoradas
  • a "melhor" árvore de decisão aprimorada em python é a implementação do XGBoost .

Atualização 1

  • Enquanto isso, o LightGBM , embora ainda seja "novo", parece ser igualmente bom ou até melhor que o XGBoost
Mayou36
fonte
12

Meu primeiro olhar seria em Orange , que é um aplicativo completo para ML, com um back-end em Python. Veja, por exemplo, orngEnsemble .

Outros projetos promissores são o mlpy e o scikit.learn .

Eu sei que o PyCV inclui vários procedimentos de reforço, mas aparentemente não para a CART. Veja também o MLboost

chl
fonte
6

Tive um bom sucesso com os alunos baseados em árvores no Milk: Machine Learning Toolkit for Python . Parece estar em desenvolvimento ativo, mas a documentação era um pouco esparsa quando eu a estava usando. A suíte de testes (github.com/luispedro/milk/blob/master/tests/test_adaboost.py) contém um "tronco aprimorado", o que pode fazer você avançar rapidamente:

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
fonte
4
Eu desenvolvo leite. Se algum de vocês tiver algum problema, entre em contato por e-mail (lpc em cmu dot edu). Os relatórios de erros geralmente são corrigidos em menos de 24 horas.
Luispedro
Enquanto isso, adicionei um pouco mais de documentação no adaboost: packages.python.org/milk/adaboost.html, para que o comentário acima possa ser menos válido do que era antes.
Luispedro
4

O scikit-learn agora tem boas árvores de regressão (e classificação) e implementações de florestas aleatórias . No entanto, a árvore impulsionada ainda não está incluída. As pessoas estão trabalhando nisso, mas leva um tempo para obter uma implementação eficiente.

Disclaimer: Eu sou um desenvolvedor de scikit-learn.

Gael Varoquaux
fonte
1

JBoost é uma biblioteca incrível. Definitivamente não é escrito em Python, no entanto, é um pouco independente da linguagem, porque pode ser executado a partir da linha de comando e, portanto, pode ser "orientado" a partir do Python. Eu usei no passado e gostei muito, principalmente o material de visualização.

carlosdc
fonte
1

Eu tenho o mesmo problema agora: eu codigo no Python diariamente, uso R de vez em quando e preciso de um bom algoritmo de árvore de regressão aprimorado. Embora existam muitos ótimos pacotes Python para análises avançadas, minha pesquisa não encontrou uma boa oferta para esse algoritmo específico. Então, a rota que eu acho que eu vou tomar nas próximas semanas é usar o pacote de GBM em R . Há um bom artigo mostrando questões práticas sobre como usá-lo, que podem ser encontradas aqui . É importante ressaltar que o pacote GBM foi basicamente usado "pronto para uso" na Copa KDD de 2009 . Portanto, provavelmente farei toda a minha modelagem pré e pós em Python e usarei o RPy para ir e voltar no R / GBM.

Josh Hemann
fonte
0

Eu já experimentei a mesma situação com você, acho que é difícil ajustar a Orange (talvez seja o meu problema). No final, usei o código de Peter Norivig em seu famoso livro, onde ele forneceu uma estrutura de código bem escrita para a árvore, tudo o que você precisa é adicionar um reforço nela. Dessa forma, você pode codificar o que quiser.

aurora1625
fonte
0

Árvores de decisão - Ada Boosting

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

Árvores de decisão sem aumento

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)

Árvores de decisão com 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)

Montagem de modelos e cálculo de precisão

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
fonte