随机森林学习笔记

您所在的位置:网站首页 git的特点 随机森林学习笔记

随机森林学习笔记

2023-06-09 11:44| 来源: 网络整理| 查看: 265

参考资料

最近经常看到随机森林算法,不管是在科研还是在建模,决定花一个下午系统的学一下这个算法。

《机器学习》 p178 Bagging与随机森林

csdn:随机森林算法详解

sklearn实战之随机森林

笔记:集成算法

集成学习是时下非常流行的机器学习算法,它本身不是一个单独的机器学习模型,而是在以往的数据上构建多个模型,集成所有模型的建模结果,基本上所有机器学习领域都可以看到集成学习的身影,在显示中集成学习也有相当大的作用,它可以用来做市场营销模拟的建模,统计客户俩元,保留和损失,也可以用来预测疾病的风险和患病者的易感性。在现在的各种算法竞赛中,随机森林,梯度提升树,XGBoost等集成算法的身影也随处可见,可见其效果之好,应用之广。

集成算法的目标: 集成算法会考虑多个评估器的建模效果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的回归或分类表现。

多个模型集成成为的模型叫做集成评估器(ensemble estimator),组成的集成评估器的每个模型都叫做基评估器(base estimator)。通常来说,有三类集成算法:袋装(bagging),提升法(Boosting),和Stacking。

装袋法的核心思想是构建多个相互独立的评估器,然后对其预测进行平均或者多数表决原则来决定集成评估其的结果,装袋法的代表模型是随机森林。

随机森林

随机森林是一种监督学习算法。就像你已经从它的名字中看到的一样,它创造了一个森林,并使它在某种程度上是随机的。它构建的“森林”是决策树的集合,大部分时间都是用“装袋”方法训练的。装袋方法的一般思想是学习模型的组合增加了整体结果。

随机森林的一大优势是,它可以用于分类和回归问题,这些问题构成了当前机器学习系统的大部分。我将在分类中讨论随机森林,因为分类有时被认为是机器学习的基石。您可以在下面看到随机森林如何使用两棵树

随机森林具有与决策树或装袋分类器几乎相同的超参数。幸运的是,您不必将决策树与装袋分类器组合在一起,只需轻松使用随机森林的分类器类即可。

随机森林为模型增加了额外的随机性,同时种植树木。它不是在分割节点时搜索最重要的特征,而是在随机特征子集中搜索最佳特征。这导致了广泛的多样性,通常导致更好的模型。

因此,在随机森林中,用于分割节点的算法仅考虑特征的随机子集。您甚至可以通过为每个特征使用随机阈值而不是搜索最佳可能阈值(如正常决策树那样)来使树更随机。

随机森林特点

随机森林是一种很灵活实用的方法,它有如下几个特点:

在当前所有算法中,具有极好的准确率 能够有效地运行在大数据集上 能够处理具有高维特征的输入样本,而且不需要降维 能够评估各个特征在分类问题上的重要性 在生成过程中,能够获取到内部生成误差的一种无偏估计 对于缺省值问题也能够获得很好得结果

  实际上,随机森林的特点不只有这六点,它就相当于机器学习领域的Leatherman(多面手),你几乎可以把任何东西扔进去,它基本上都是可供使用的。在估计推断映射方面特别好用,以致都不需要像SVM那样做很多参数的调试。

随机森林相关基础知识

随机森林看起来是很好理解,但是要完全搞明白它的工作原理,需要很多机器学习方面相关的基础知识。

1)信息、熵以及信息增益的概念

2)决策树

决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。常见的决策树算法有C4.5、ID3和CART。

3)集成学习 

随机森林是集成学习的一个子类,它依靠于决策树的投票选择来决定最后的分类结果。你可以在这找到用python实现集成学习的文档:Scikit 学习文档。

随机森林中的特征重要性

摘自:随机森林算法

随机森林算法很容易测量每个特征对预测的相对重要性。Sklearn为此提供了一个很好的工具,它可以通过查看使用该功能的树节点减少森林中所有树木的杂质来测量特征的重要性。它会在训练后自动为每个要素计算此分数并对结果进行缩放,以使所有重要性的总和等于1。

通过查看特征重要性,您可以决定要删除哪些特征,因为它们对预测过程没有足够的贡献或没有贡献。这很重要,因为机器学习的一般规则是,您拥有的特征越多,您的模型就越容易受到过度拟合的影响,反之亦然。

下面你可以看到一个表格和一个可视化,它显示了13个特征的重要性,我在监督分类项目中使用了有名的泰坦尼克号数据集。你可以在这里找到整个项目。

sklean 中RF的实现

RandomForestClassifier

随机森林是非常具有代表性的Bagging集成算法,它所有的基评估器都是决策树,分类树组成的森林就叫做随机森林分类器,回归树组成的森林就叫做随机森林回归器。这一讲主要是讲解RandomForestClassifier,随机森林分类器。

重要参数

随机森林中的超参数用于增加模型的预测能力或使模型更快。我将在这里谈谈sklearns内置随机森林函数的超参数。

1. 增加预测能力

“n_estimators”超参数是森林中树木的数量,即基评估器的数量。这个参数对随机森林模型的精确性影响是单调的,n_estimator越大,模型的效果越好。但相应的,任何模型都有决策边界,n_estimator达到一定程度后,随机森林的精确性往往不再上升或开始波动,并且,n_estimator越大,需要的计算量和内存也就越大,训练的时间也会越来越长,对于这个参数,我们是渴望在训练难度和模型效果之间取得平衡。

另一个重要的超参数是“max_features”,它是Random Forest考虑拆分节点的最大特征数。Sklearn提供了几个选项,在他们的文档中有描述。

我们将在速度方面讨论的最后一个重要的超参数是“min_sample_leaf”。与其名称一样,这确定了拆分内部节点所需的最小叶子数。

2. 提高模型速度

“n_jobs”超参数告诉引擎是多少处理器允许使用。如果它的值为1,则它只能使用一个处理器。值“-1”表示没有限制。

“random_state”使模型的输出可复制。当模型具有random_state的确定值并且已经给出相同的超参数和相同的训练数据时,该模型将始终产生相同的结果。

当random_state固定时,随机森林中生成是一组固定的树,但每棵树依然是不一致的,这是用”随机挑选特征进行分枝“的方法得到的随机性。并且我们可以证明,当这种随机性越大的时候,袋装法的效果一 般会越来越好。用袋装法集成时,基分类器应当是相互独立的,是不相同的。 但这种做法的局限性是很强的,当我们需要成千上万棵树的时候,数据不一定能够提供成千上万的特征来让我们构 筑尽量多尽量不同的树。因此,除了random_state。我们还需要其他的随机性。

最后,还有“oob_score”(也称为oob采样),它是一种随机森林交叉验证方法。在此抽样中,大约三分之一的数据不用于训练模型,可用于评估其性能。这些样品称为袋外样品。它与留一法交叉验证方法非常相似,但几乎没有额外的计算负担。

如果希望用袋外数据来测试,则在实例化时需要将oob_score这个参数调整为True,训练完毕时,我们可以用随机森林的另外一个重要属性哦:oob_score_来查看我们的模型在袋外数据上测试的结果.

接口

随机森林的接口和决策树完全一致,因此依然有四个常用接口:

apply(apply返回每个测试样本所在的叶子节点的索引), fit, predict, score。

除此之外,还需要注意随机森林内的predict_proba接口,这个接口返回每个测试样本对应被分到每一类标签的概率,标签有几个分类就返回几个概率,如果是二分类问题,则predict_proba返回的数值大于0.5的,被分为1,小于的被分为0。传统的随机森林是利用袋装法中的规则,平均或少数服从多数来决定集成的结果,而sklearn中的随机森林是平均每个样本对应的predict_praba返回的概率,得到一个平均概率,从而决定测试样本的分类。

机器学习中调参的基本思想


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3