首页 文章

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

提问于
浏览
8

我通过 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 回答

  • 15

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

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

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

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

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

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


    RF算法基本上是两个独立想法的组合:装袋和随机选择的功能(参见Wikipedia entry以获得精彩的概述) . 套袋基本上是我的第二点,但适用于整体;随机选择的特征是我上面的第一点,看起来它是由Tin Kam Ho在Breiman 's RF (again, see the Wikipedia entry). Ho had already suggested that random feature selection alone improves performance. This is not exactly what you have done here (you still use the bootstrap sampling idea from bagging, too), but you could easily replicate Ho'想法之前通过在你的 RandomForestClassifier() 论证中设置 bootstrap=False 而独立提出的 . 事实是,鉴于这项研究,性能的差异并不出乎意料......

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

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

    在这种情况下,既不会进行自举采样也不会进行随机特征选择,并且性能应该大致等于单个决策树的性能 .

相关问题