随机森林模型数学建模,随机森林分类预测模型
=======================================================================
机器学习笔记本
python机器学习入门(Python机器学习入门)
https://github . com/a mueller/introduction _ to _ ml _ with _ python/blob/master/02-supervised-learning . ipynb
=======================================================================
集成
(ensemble)是一种将多个机器学习模型结合起来构建更强大模型的方法。机器学习文献中的很多模型都属于这一类,但是已经证明了两种集成模型对于大量的分类回归数据集是有效的,这两种模型都是基于决策树的,即随机森林和梯度提升决策树。
1、随机森林
决策树的一个主要缺点是它经常过度拟合训练数据。随机森林是解决这个问题的一种方法。
随机森林本质上是许多决策树的集合,其中每棵树都和其它树略有不同
。随机森林背后的思想是
,每棵树的预测可能相对较好,但有些数据可能会过拟合。如果构造了很多树,每棵树的预测都非常好,但是都以不同的方式过拟合,那么我们可以对这些树的结果进行平均,以减少过拟合。它既能减少过拟合又能保持树的预测能力,这在数学上是可以严格证明的。为了实现这一策略,我们需要构建许多决策树。每棵树都要对目标值做出可接受的预测,也要和其他树不一样。随机森林的名称来自于在树的构建过程中添加随机性,以确保每棵树都是不同的。在随机森林中有两种随机化树的方法:
一种是通过选择用于构建树的数据点。
另一种是通过选择每个分区测试的特征。
构造随机森林
。要构建随机森林模型,需要确定用于构建的树的数量(randomforestclassifier或randomforestclassifier的n_estimators参数)。这些树在构造时是完全相互独立的,算法会对每棵树进行不同的随机选择,以保证树与树之间存在差异。要构建一个树,首先为每棵树做自助采样
(引导示例)。也就是从n_samples数据点中随机抽取一个样本(即同一样本可以多次抽取),总共抽取n_samples。这将创建一个与原始数据集大小相同的数据集,但是一些数据点将会丢失(大约三分之一),一些数据点将会重复。基于这个新创建的数据集构建一个决策树。但是,单决策树中描述的算法需要稍加修改。
在每个结点处,算法随机选择特征的一个子集,并对其中一个特征寻找最佳测试,而不是对每个结点都寻找最佳测试
。所选要素的数量由max_features参数控制。每个节点中特征子集的选择是相互独立的,因此树的每个节点可以使用不同的特征子集进行决策。由于采用自助抽样,随机森林中每个决策树的数据集略有不同。由于每个节点的特征选择,每个树中的每个分区都基于不同的特征子集。这两种方法共同保证了随机森林中所有树的差异。
此过程中的一个关键参数是max_features。
如果我们设置max_features等于n_features,那么在每个划分中都要考虑数据集的所有特征,在特征选择的过程中不加入随机性(但在自助抽样中随机性仍然存在)。
如果max_features设置为等于1,则在分割时不能选择要测试的要素。您只能搜索具有不同阈值的随机选择的功能。
因此,如果max_features很大,随机森林中的树将非常相似,可以使用最独特的特征来轻松拟合数据。
如果max_features很小,那么随机森林里的树会很不一样。为了很好地拟合数据,每棵树的深度应该非常大。
为了使用随机森林进行预测,该算法首先预测森林中的每棵树。
对于回归问题,可以将这些结果取平均值作为最终预测。
对于分类问题,采用“软投票”策略。也就是说,每个算法做出一个“软”预测,给出每个可能输出标签的概率。平均所有树的预测概率,然后取概率最高的类别作为预测结果。
2、分析随机森林
作为随机森林的一部分,树保存在estimator_ attribute中。可视化每棵树学习到的决策边界,也可视化它们的总预测(即整个森林做出的预测)。五棵树学习到的决策边界大相径庭。每棵树都会犯一些错误,因为这里画的一些训练点实际上并没有包含在这些树的训练集中,因为自助采样。
随机森林比每棵树单独的过拟合小,给出的决策边界更直观。在任何实际应用中,我们会使用更多的树(通常是数百或数千)来获得更平滑的边界。
在没有任何调节的情况下,随机森林的精度为97%,比线性模型或单颗决策树都要好
。我们可以调整max_features参数,或者像单个决策树一样进行预修剪。但是,随机森林的默认参数通常就已经可以给出很好的结果。
从乳腺癌数据集学习决策树的特征重要性:
通过拟合乳腺癌数据集获得的随机森林特征的特征重要性;
可以看到,与单棵树相比,随机森林中拥有更多特征的重要性并不为零。由于构建随机森林过程中的随机性,算法需要考虑多种可能的解释。因此,随机森林比单棵树更能掌握数据的特征。
3、优点、缺点和参数
用于回归和分类的随机森林是最广泛使用的机器学习方法之一。这个方法很厉害,
通常不需要反复调节参数就可以给出很好的结果,也不需要对数据进行缩放。
本质上,随机森林具有决策树的所有优点,同时弥补了决策树的一些缺陷。仍然使用决策树的一个原因是
需要决策过程的紧凑表示
。基本上不可能详细解释几十棵甚至几百棵。随机森林中树的深度往往大于决策树的深度(因为使用了特征子集)。因此,如果你需要可以可视化的方式向非专家总结预测过程,那么选择单颗决策树可能更好。
虽然在大型数据集上构建随机森林可能很耗时,但在计算机的多个CPU核心上进行并行计算也很容易。
可以使用参数n_jobs参数来调节使用的内核个数
。使用更多的CPU内核可以线性提升速度,但是设置n_jobs大于内核数是没有用的。可以设置n_jobs=-1来使用电脑的所有内核。
随机森林本质上是随机的,设置不同的随机状态(或者不设置random_state参数)可以彻底改变构建的模型
。森林中的树越多,它对随机状态选择的鲁棒性越好。如果您希望结果是可重复的,修复random_state是很重要的。
对于维度非常高的稀疏矩阵(比如文本数据),随机森林的表现往往不是很好
。对于这类数据,使用线性模型可能更合适。即使是非常大的数据集,random forest通常表现良好,训练过程可以在强大计算机的多个CPU核心上轻松并行。但是,随机森林需要更多的内存,训练和预测的速度比线性模型慢。对于一个应用程序,如果时间和内存很重要,那么切换到线性模型可能更明智。
需要调节的重要参数有n_estimators和max_features,可能还包括预剪枝选项(如max_depth)。n_estimators总是越大越好。对更多的树取平均可以降低过拟合,从而得到鲁棒性更好的集成
。但是收入在减少,树越多,需要的内存越多,训练时间越长。一个常见的经验法则是“在你的时间/记忆允许的范围内”。Max_features决定了每棵树的随机性,较小的max_features可以减少过拟合。一般来说