用30行Python从零开始建立回归树

介绍

流程图用于通过可视媒体阐明决策过程。设计需要对整个系统有完整的了解,因此也需要人的专业知识。问题是:“就流程的复杂性而言,是否可以自动创建流程图以使其设计更快,更便宜且更具可扩展性?” 答案就是决策树!

决策树可以自动推断出最能表达决策内部工作的规则。在经过标记的数据集上训练时,决策树将学习规则树(即流程图),并遵循该树来确定任何给定输入的输出。它们的简单性和高解释性使它们成为ML工具箱中的重要资产。

描述了回归树-具有连续输出的决策树-并实现了用于学习和预测的代码段。使用波士顿数据集创建用例场景并学习定义房屋价格的规则。可以在参考文献中找到完整代码的链接。

学习规则

寻求的规则,树类似的流程图,是最好的解释了房子的功能和它的价格之间的关系。每个规则将成为该树中的一个节点,并将房屋分成不相交的集合,例如具有两个房间的房子,具有三个房间的房子和具有三个以上房间的房子。规则也可以基于多种功能,例如带有两个房间且靠近查尔斯河的房屋。因此所有可能的树的空间都是巨大的,需要简化以计算方式解决学习问题。

作为第一个简化,仅考虑二进制规则:将房屋分为两部分的规则,例如“房屋是否少于三个房间?”。作为第二个,省略了特征的组合,因为组合的数量可能很大,并且仅考虑基于一个特征的规则。在这些简化下,规则是具有两个部分的“ 小于关系”:特征(例如房间数量)和划分阈值(例如三个)。

基于此规则定义,我们通过递归搜索将数据最好分为两部分的规则来构建规则树。

换句话说,首先将数据尽可能地划分为两个拆分,然后再分别考虑每个拆分。继续分割分割,直到满足预定条件,例如最大深度。由于简化和贪婪规则搜索,构造的树只是最佳树的近似。在下面,可以找到实现该学习的Python代码。


用Python实现的递归拆分过程。

将拆分过程作为一个函数来实现,并使用训练数据(X_train,y_train)来调用它。该功能找到将训练数据分为两部分的最佳规则,并根据找到的规则进行分割。它通过使用左右拆分作为训练数据来不断调用自己,直到达到预先指定的最大深度或训练数据太小而无法划分为止。当满足停止条件时,它将停止划分,并以当前拆分中训练数据的平均价格来预测房价。

在split函数中,将除法规则定义为具有left,right,feature和threshold的键的字典。最佳划分规则由另一个功能返回,该功能通过遍历训练集中的每个特征和阈值来详尽地扫描可能的规则。确定特征的阈值取决于特征在整个数据集中所取的值。这是代码:

查找最佳规则的功能,该规则将手头的训练数据分开。

该功能通过测量规则建议的分割质量来跟踪最佳规则。质量通过名为“ 残差平方和”(RSS)的“越低越好”度量来度量(有关RSS的更多详细信息,请参见参考资料中的笔记本)。最后,最佳规则作为字典返回。

解释规则

学习算法自动选择特征和阈值以创建最能解释房屋特征与其价格之间关系的规则。下面以最大深度为3的方式可视化从波士顿数据集中学习到的规则树。可以观察到提取的规则与人类的直觉相重叠。此外可以像跟踪流程图一样容易地预测房屋价格。


从波士顿数据集中学习的最大深度为3的规则树。


现在描述一个自动使用以上流程图进行预测的过程。给定具有数据集中特征的房屋,在节点中提出问题并根据答案进行传播,直到得出预测(即叶节点)为止。

例如,位于以下位置的房屋:(i)较低的身份百分比为5.3,(ii)每个住宅的平均房间为10.2,并且(iii)人均犯罪率为0.01,将第一个问题回答为“是”,第二个问题回答为“ 否”第三个是YES。因此预计其价格为45.80K。可以在下面找到所遵循路径的可视化。


树规则中的示例预测路径。

使用split函数返回的字典对预测过程进行编码非常简单。通过比较规则指定的特征值和阈值来遍历规则字典。根据答案向左或向右移动,直到遇到带有预测键(即叶节点)的规则。以下是用于预测的代码段。


使用学到的树来预测房屋价格的功能。  

结论

回归树是用作回归模型的快速直观的结构。对于波士顿数据集,当适当调整最大深度时,它们可以达到0.9左右的R²分数。但是它们可能对数据集中的微小变化是脆弱的,这使得它们不可靠地用作单个预测变量。提出了随机森林和梯度增强树来解决高灵敏度问题,它们可以产生与深度模型相当的结果。

你可能感兴趣的:(用30行Python从零开始建立回归树)