我通过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
具有一个估计量的随机森林估计量不仅仅是决策树吗?我做错了什么或误解了这个概念吗?
感谢您的回复。
具有一个估计量的随机森林估计量不仅仅是决策树吗?
好吧,这是一个好问题,答案是“ 否” 。随机森林算法不只是一个简单的独立生长的决策树包。
除了由于合并许多树而引起的随机性之外,随机森林(RF)算法还在以两种不同的方式构建 单个树 时并入了随机性,而简单决策树(DT)算法中都没有这种随机性。
第一个是在每个树节点上寻找最佳分割时要考虑的特征数量:虽然DT考虑了所有特征,RF却考虑了它们的随机子集,其大小等于参数max_features
(请参阅docs)。
第二点是,虽然DT考虑了整个训练集,但单个RF树仅考虑了它的自举子样本;从文档再次:
子样本大小始终与原始输入样本大小相同,但是如果bootstrap = True(默认值),则将替换绘制样本。
RF算法本质上是两个独立概念的组合:装袋和特征的随机选择(有关详细概述,请参阅Wikipedia条目)。套袋本质上是我的第二点,但适用于合奏。特征的随机选择是我在上面提到的第一点,似乎它是由Breeman
RF之前的Tin Kam
Ho独立提出的(再次参见Wikipedia条目)。Ho已经建议仅通过随机特征选择来提高性能。这与您在这里所做的不完全一样(您仍然仍然使用装袋中的引导抽样概念),但是您可以通过bootstrap=False
在RandomForestClassifier()
参数中进行设置来轻松复制Ho的思想。事实是,鉴于这项研究,性能差异并不出乎意料…
要 确切地
复制中的单个树的行为RandomForestClassifier()
,应同时使用bootstrap=False
和max_features=None
参数,即
clf = RandomForestClassifier(n_estimators=1, max_features=None, bootstrap=False)
在这种情况下,引导采样和随机特征选择均不会发生,并且性能应大致等于单个决策树的性能。
1 Bagging Bagging采用自助采样法(bootstrap sampling)采样数据。给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时,样本仍可能被选中, 这样,经过m次随机采样操作,我们得到包含m个样本的采样集。 按照此方式,我们可以采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基本学习器,再将这些基本学习
在这里,我们将探索一类基于决策树的算法。 最基本决策树非常直观。 它们编码一系列if和else选项,类似于一个人如何做出决定。 但是,从数据中完全可以了解要问的问题以及如何处理每个答案。 例如,如果你想创建一个识别自然界中发现的动物的指南,你可能会问以下一系列问题: 动物是大于还是小于一米? 较大:动物有角吗? 是的:角长是否超过十厘米? 不是:动物有项圈吗? 较小:动物有两条腿还是四条腿? 二:
主要内容:生成森林在学习 连通图的基础上,本节学习什么是 生成树,以及什么是 生成森林。 对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为 生成树 。 图 1 连通图及其对应的生成树 如图 1 所示,图 1a) 是一张连通图,图 1b) 是其对应的 2 种生成树。 连通图中,由于任意两顶点之间可能含有多条通路,遍历连通图的方式有多种,往往一张连通图可能有多种不同的生成树与之对应。 连通图中
主要内容:决策树算法应用,决策树实现步骤,决策树算法应用本节基于 Python Sklearn 机器学习算法库,对决策树这类算法做相关介绍,并对该算法的使用步骤做简单的总结,最后通过应用案例对决策树算法的代码实现进行演示。 决策树算法应用 在 sklearn 库中与决策树相关的算法都存放在 模块里,该模块提供了 4 个决策树算法,下面对这些算法做简单的介绍: 1) .DecisionTreeClassifier() 这是一个经典的决策树分类算法,它提供
1 决策树理论 1.1 什么是决策树 所谓决策树,顾名思义,是一种树,一种依托于策略抉择而建立起来的树。机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。 树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,从根节点到叶节点所经历的路径对应一个判定测试序列。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。 1.2 决策树学习流
随机森林是集成学习中可以和梯度提升树GBDT分庭抗礼的算法,尤其是它可以很方便的并行训练,在如今大数据大样本的的时代很有诱惑力。 1. bagging的原理 在集成学习原理小结中,我们给Bagging画了下面一张原理图。 从上图可以看出,Bagging的弱学习器之间的确没有boosting那样的联系。它的特点在“随机采样”。那么什么是随机采样? 随机采样(bootsrap)就是从我们的训练集里面采