Existe uma boa biblioteca python para o treinamento de árvores de decisão aprimoradas?
Existe uma boa biblioteca python para o treinamento de árvores de decisão aprimoradas?
Respostas:
Resposta atualizada
A paisagem mudou muito e a resposta é clara hoje em dia:
Atualização 1
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
Você pode usar a biblioteca de árvore de decisão R usando Rpy (http://rpy.sourceforge.net/). Verifique também o artigo "construindo árvores de decisão usando python" (http: //onlamp.com/pub/a/python/2 ...).
existe também
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
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.
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.
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.
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.
Á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)