【问题标题】:Why is Random Forest with a single tree much better than a Decision Tree classifier?为什么单棵树的随机森林比决策树分类器好得多?
【发布时间】:2018-06-22 16:22:22
【问题描述】:

我应用 使用以下代码对我的数据进行决策树分类器和随机森林分类器:

def decision_tree(train_X, train_Y, test_X, test_Y):

    clf = tree.DecisionTreeClassifier()
    clf.fit(train_X, train_Y)

    return clf.score(test_X, test_Y)


def random_forest(train_X, train_Y, test_X, test_Y):
    clf = RandomForestClassifier(n_estimators=1)
    clf = clf.fit(X, Y)

    return clf.score(test_X, test_Y)

为什么随机森林分类器的结果要好得多(运行 100 次,随机抽样 2/3 的数据用于训练,1/3 用于测试)?

100%|███████████████████████████████████████| 100/100 [00:01<00:00, 73.59it/s]
Algorithm: Decision Tree
  Min     : 0.3883495145631068
  Max     : 0.6476190476190476
  Mean    : 0.4861783113770316
  Median  : 0.48868030937802126
  Stdev   : 0.047158171852401135
  Variance: 0.0022238931724605985
100%|███████████████████████████████████████| 100/100 [00:01<00:00, 85.38it/s]
Algorithm: Random Forest
  Min     : 0.6846846846846847
  Max     : 0.8653846153846154
  Mean    : 0.7894823428836184
  Median  : 0.7906101571063208
  Stdev   : 0.03231671150915106
  Variance: 0.0010443698427656967

具有一个估计器的随机森林估计器不只是一棵决策树吗? 我做错了什么或误解了这个概念吗?

【问题讨论】:

  • 这取决于您用于随机森林的参数。随机森林意味着使用许多树。它效率不高。 Xgboost 对许多树进行纠错。目标不是效率是减少错误的策略。

标签: python machine-learning scikit-learn random-forest decision-tree


【解决方案1】:

具有一个估计器的随机森林估计器不只是一棵决策树吗?

嗯,这是一个好问题,结果结果是;随机森林算法不仅仅是一袋单独生长的决策树。

除了由集成许多树引起的随机性外,随机森林 (RF) 算法还在以两种不同的方式构建单个树时结合了随机性,而简单的决策树 ( DT) 算法。

首先是在每个树节点寻找最佳分割时要考虑的特征数量:DT 考虑所有特征,RF 考虑它们的随机子集,大小等于参数max_features(参见docs)。

第二个是,当 DT 考虑整个训练集时,单个 RF 树只考虑它的自举子样本;再次来自docs

子样本大小始终与原始输入样本大小相同,但如果 bootstrap=True(默认),则使用替换抽取样本。


RF 算法本质上是两个独立思想的结合:装袋和随机选择特征(请参阅Wikipedia entry 以获得很好的概述)。 Bagging 本质上是我上面的第二点,但适用于整体;随机选择特征是我上面的第一点,它似乎是在 Breiman 的 RF 之前由 Tin Kam Ho 独立提出的(再次参见维基百科条目)。 Ho 已经建议单独随机特征选择可以提高性能。这不完全是您在这里所做的(您仍然使用 bagging 中的引导抽样思想),但您可以通过在 RandomForestClassifier() 参数中设置 bootstrap=False 轻松复制 Ho 的想法。事实是,鉴于这项研究,性能差异并不出人意料……

完全复制RandomForestClassifier() 中单个树的行为,您应该同时使用bootstrap=Falsemax_features=None 参数,即

clf = RandomForestClassifier(n_estimators=1, max_features=None, bootstrap=False)

在这种情况下,既不会进行自举采样,也不会进行随机特征选择,其性能应该与单个决策树的性能大致相当。

【讨论】:

    猜你喜欢
    • 2018-04-04
    • 2020-02-15
    • 2021-02-26
    • 2016-03-24
    • 2017-03-15
    • 2021-03-24
    • 2018-12-01
    • 2020-02-28
    • 2020-06-28
    相关资源
    最近更新 更多