增强了python中的决策树?[关闭]


13

是否有一个好的Python库用于训练增强型决策树?


3
Rpy,当然;-)

我同意mbq。是否有充分的理由说明为什么必须在Python中执行此操作?否则,我也会将主力R用作后端。
Joris Meys 2010年

唯一的原因是,我一年左右才使用R很少,而我每天都在使用python……
Andre Holzner 2010年

2
Rpy是一个非常讨厌的依赖。R具有很多功能,因此能够使用Rpy深入研究它们很不错,但是如果您必须共享这项工作,即使它位于同一实验室的不同计算机上,也可能会遇到麻烦,如果您的实验室位于异构计算环境中。这是由于Rpy依赖于拥有正确的次要版本的Python,numpy和R。例如,它在主要的Linux发行版中一直被破坏。
Gael Varoquaux

3
这里的答案似乎已经过时了-它们似乎来自scikit.learn创立之初。我认为如果有经验的人提出更新的答案,读者和网站都会受益。
佩雷

Answers:


5

更新的答案

形势发生了很大变化,如今答案很明确:

  • scikit-learn是python中库,并且具有用于增强决策树的几种出色算法
  • python中最好的增强决策树是XGBoost实现。

更新1

  • 同时,LightGBM虽然仍然相当“新”,但似乎与XGBoost一样好,甚至更好



6

Milk:针对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
我开发牛奶。如果您中的任何一个遇到任何问题,请通过电子邮件(位于cmu dot edu的lpc)通知我。错误报告通常会在24小时内得到修复。
luispedro 2011年

同时,我在adaboost上添加了更多文档:packages.python.org/milk/adaboost.html,因此上述注释的有效性可能不及以前。
luispedro 2011年

4

scikit学习现在具有良好的回归(和分类)树和随机森林实现。但是,升压树仍不包括在内。人们正在努力,但是要花一些时间才能有效地实施。

免责声明:我是一个scikit学习开发人员。


1

JBoost是一个很棒的库。它绝对不是用Python编写的,但是它在语言上是不可知的,因为它可以从命令行执行,因此可以从Python“驱动”。我过去曾经使用过它,并且非常喜欢它,特别是可视化方面的东西。


1

我现在遇到同样的问题:我每天都用Python编写代码,偶尔使用R,并且需要一个好的增强回归树算法。尽管有很多很棒的Python包可用于高级分析,但我的搜索没有发现针对此特定算法的优质产品。因此,我认为我将在未来几周采用的方法是在R中使用GBM软件包。有一篇很好的文章显示了使用它的实际问题,可以在这里找到。重要的是,GBM软件包在2009年KDD杯中基本上是“现成”使用的。因此,我可能会使用Python进行所有的前后建模,并使用RPy与R / GBM来回交互。


0

我也遇到过类似的情况,我发现Orange很难调音(也许是我的问题)。最后,我将Peter Norivig的代码用于他的著名著作,在那里他为树提供了一个编写良好的代码框架,您所需要的只是在其中添加了boosting。这样,您可以编写任何喜欢的代码。


0

决策树-Ada提升

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)

具有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)

拟合模型和计算精度

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.