为什么具有单个树的Random Forest比决策树分类器好得多?

时间:2018-01-13 11:04:40

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

我通过scikit-learn库学习机器学习。我申请了 使用以下代码将决策树分类器和随机森林分类器添加到我的数据中:

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

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

感谢您的回复。

1 个答案:

答案 0 :(得分:16)

  

带有一个估算器的随机森林估算器不仅仅是一个决策树吗?

嗯,这是一个很好的问题,答案结果是没有;随机森林算法不仅仅是一个单独生成的决策树的简单包。

除了集合许多树所引起的随机性之外,随机森林(RF)算法在以两种不同的方式构建单个树时也包含随机性,其中没有一种存在于简单的决策树中( DT)算法。

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

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

  

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

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

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

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

在这种情况下,不会发生自举采样和随机特征选择,并且性能应该大致等于单个决策树的性能。