随机森林的直观理解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
随机森林的直观理解
导语:对于那些认为随机森林是黑匣子算法的人来说,这篇帖子会提供一个不同的观点。
接下来,我将从4个方面去理解随机森林模型。
1.我们的特征有多重要?
在sklearn随机森林中使用model.feature_importance来研究其重要特征是很常见的。
重要特征是指与因变量密切相关的特征,并且对因变量的变化影响较大。
我们通常将尽可能多的特征提供给随机森林模型,并让算法反馈对预测最有用的特征列表。
但仔细选择正确的特征可以使我们的目标预测更加准确。
计算feature_importances的想法很简单,但却很有效。
把想法分解成简单的几步:训练随机森林模型(假定有正确的超参数)找到模型的预测分数(称之为基准分数)多次(p 次,p为特征个数)计算预测分数,每次打乱某个特征的顺序,可见下图将每次预测分数与基准分数进行比较。
如果随机调整特征顺序后预测分数小于基准分数,这意味着我们的模型如果没有这个特征会变得很糟糕。
删除那些不会降低基准分数的特征,并用减少后的特征子集重新训练模型。
图1:计算特征重要性
注:将F4列打乱重新进行预测来判断特征F4的重要性
计算特征重要性的代码:
下面的代码将为所有特征提供一个结构为{特征,重要性}的字典。
图2:随机森ٹ 7;中的重要特_ 81;' role='presentation'> 图2:随机森林中的重要特征
输出:在上面的输出中,可以看出,YearMade将最大程度增加RMSE预测。
所以它一定是最重要的特征。
(上面的结果所对应的数据是从Kaggle competition获取的,这是链接——https:///c/bluebook-for-bulldozers)2.我们对我们的预测有多大信心?一般来说,当企业想要有所预测时,他们的最终目的不是降低成本就是提高利润。
在做出重大商业决策之前,企业十分热衷于去评估做出这个决定的风险的大小。
但是,当预测结果并没有被展现在置信区间时,我们可能会无意中将企业至于更多的风险中,而不是降低风险。
当我们使用线性模型(基于分布假设的一般模型)时,比较容易找到我们预测的置信水平。
但是当谈到随机森林的置信区间时,找起来并不是那么容易。
图3:偏差与方差的说明图
我想,任何上过线性回归课程的人都肯定看过这张图3。
为了找到一个最佳线性模型,我们要去寻找偏差—方差最为折
衷的模型。
这张图片很好地说明了预测中偏差和方差的定义。
(我们理解为这4张图分别是由四个不同的人掷飞镖所得)。
如果我们有高偏差和低方差值时(第三个人),我们投掷的
飞镖会固定的远离红心。
相反,如果我们有高的方差和低的偏差(第二个人),那么他投掷飞镖的结果就很不一样。
如
果有人去猜测他下一个飞镖击中的位置,那么它既有可能打到靶心也有可能远离靶心。
现在我们来假设在现实生活中识别一起信用欺诈等同于上面例子击中靶心。
如果信用公司拥有的的预测模型与上面第二人的掷飞镖行为很相似,那么该公司在大多数时候都不会抓住这个诈骗犯,尽管模型预测的是正确的。
因此,不仅仅是意味着预测的准确程度,我们还应该检查我们的预测的置信水平。
在随机森林中如何做到这一点?随机森林是由许多决策树组成。
每棵树分别预测新的数据,随机森林从这些树中提取出平均预测值。
预测置信水平的想法只是为了去看来自不同树木的预测有多少因为新
的观测而产生变化,然后进一步分析。
基于方差树预测置信度的源代码:注:偏差= (up-down)/Yhat以上代码的输出如下所示:图4:基于方差树的置信树
图5的这棵决策树(深度:3层)基于波士顿房价数据集。
根据中间节点的预测值以及导致数值发生变化的特征,它显示了决策路径的分解。
单节点的贡献是该节点的值与前一个节点值的差值。
图6:Tree interpreter(最终再次入院的概
率=0.6)
图6 给出了对于患者A使用Tree interpreter的输出示例。
图片显示年龄为65岁是模型预测再入院概率高于均值的最
高贡献者。
图7:将特征贡献通过瀑布图可视化展示图6同样也可以使用瀑布图7来表示。
我从“ 瀑布图包”中选材
做的这个快速简单的瀑布图。
上面的瀑布图可视化代码:相关变量的阐释:
· 值(图片B)是指通过节点预测目标值。
(就是在该节点中
落下的观测目标的平均值)。
· 贡献是当前节点的值减去上一节点的值(这是为一个路径提供的贡献特征)。
· 路径是为了到达叶节点而通过某些观察所获得的所有特征分割的组合。
tree interpreter包直接用来计算每个节点的贡献,链接:treeinterpreter4.目标变量如何与重要特征相关?Partial Dependence Plots找到最重要的特征后,下一步我们可能会感兴趣的是研究目标变量与兴趣特征之间的直接关系。
从线性回归中得到的与其相类似的是模型系数。
对于线性回归,系数以这种方式被计算,即我们可以通过说:“在Xj中有1
个单位变化,保持所有其他Xi不变,Y会发生什么变化?”
这样的方式来表示。
虽然我们有来自随机森林的特征重要性,但是它们只是给出Y的变量是由Xi的改变之间的相关性。
我们不能直接地解释他们就像保持所有其他特征不变,Y该变量取决于Xj中的单位的变化。
幸运的是,我们有看一被看作线性模型系数图表的局部依赖图,但同样也可被扩展为看起来像黑箱模型。
这个想法是将预测中所做的改变孤立于一个特定的功能。
它不同于X对Y的散点图,因为散点图不能隔离X对Y的直接关系,并且可能受X和Y所依赖的其他变量的间接关系所影响。
PDP分析步骤如下:训练一个随机森林模型(假设F1 … F4是我们的特征,Y是目标变量,假设F1是最重要的特征)。
我们有兴趣探索Y和F1的直接关系。
用F1(A)代替F1列,并为所有的观察找到新的预测值。
采取预测的平均值。
(称之为基准值)对F1(B)… F1(E)重复步骤3,即针对特征F1的所有不同值。
PDP的X轴具有不同的F1值,而Y轴是虽该基准值F1值的平均预测而变化。
图8:PDP分析逻辑图9 是partial dependence plot的一个例子。
数据来自kaggle bulldozer competition data,它显示了生产年份(YearMade)和(销售价格)SalesPrice的关系
图9:partial dependence plot(YearMade与SalePrice 的变化)而图10是SalePrice与YearMade的线状图。
我们可以看到,散点图/折线图可能无法像PDP那样捕获YearMade对SalesPrice的直接影响。
图10:上述两个图片
均来自(来源
https:///fastai/fastai/tree/master/courses/ml1)
写在最后:
在大多数情况下,随机森林在预测中可以击败线性模型预测。
针对随机森林经常提出的反对意见是:对它的理解没有线性模型那样直观,但是本文的讨论希望帮助你回答这样的反对意见。
作者个人简历:目前在旧金山大学学习数据科学(分析),
在Manifold.ai做实习生。
此前,曾在凯捷咨询公司担任数据科学家,在Altisource担任高级业务分析师。
加入人工智能量化投资交流群。