当前位置: 首页 > 网络应用技术

数据科学:底层如何设计和存储在Sklearn的决策树中?

时间:2023-03-06 23:10:18 网络应用技术

  简介:在早期,我正在做一些机器学习的研究,而算法则复制了迁移随机森林的论文算法。其中,Sklearn中的决策树继承并扩展了API。如何设计和实施。本文简要介绍并分享了此细节。

  决策树是一种经典的机器学习算法。它经历了几个主要版本,例如ID3,C4.5和CART。对于制定树的原则,您可以参考历史文章:Chang!5000个粗俗的单词谈论决策的基本原理 - 制造树木决策树可用于分类或返回,同时,它也构成了许多集成算法的基础。因此,它在机器学习领域具有举重的作用。对于集成算法,您可以参考历史文章:图片介绍了机器Learning Integrated学习算法中的机器学习。

  为了探索Sklearn中的决策树如何设计和实现,以分类决策树为例,首先查看决策树中内置了哪些属性和接口:要查看初始决策树的哪些属性通过DIR属性包含(以下是以“ _”开头的属性,因为它通常是在私有属性中构建的),结果如下:

  在上面的接口中,有两个主要类别:属性和函数(这似乎是胡说八道:了解编程语言中类的定义,类主要包括属性和函数。ACCOMPLISH)。如果您需要区分哪些属性并且是功能,您可以通过IPYTHON解释器自动补充该功能。

  预测:模型预测等。

  本文的重点是在保存训练树后探索“该树”,因此我们使用虹膜数据集进一步训练决策树,然后再次调用DIR函数以查看添加了哪些属性和接口:

  通过集合的集合,可以清楚地看到训练之前和之后的决策树主要增加了6个属性(所有属性,而不是功能功能)。其中,属性的名称也很容易推断出其含义:

  然后,我们进一步探索这个树_属性。首先,打印tree_属性并发现这是一个树对象,并在sklearn中给出文件路径:

  我们可以通过帮助方法查看树类的引入:

  通过上面的DOC文档,第一个句子清楚地描述为以下描述:

  基于数组的二进制识别树的可靠性。

  也就是说:数组表达的二进制决策树,即二进制树!进一步,在此二进制树中,数组的第一个元素代表决策树节点的信息,而节点0代表root节点决策树。那么每个节点包含哪些信息?我们注意到上面文档中列出了文件名:_tree.pxd,检查它,很容易找到节点的定义:

  尽管这是Cython的定义语法,但不难推断其各种属性字段的类型和含义,例如:::::

  在这一点上,决策树中单个节点的属性定义和实现基本上已经完成,那么整个决策树字符串如何所有节点?我们已求助于训练后的Decipt tree_属性,并查看哪个接口,并查看哪个接口它仍然过滤掉构建的私有属性,并获得以下结果:

  当然,您还可以使用ipython解释器的自动完成功能来进一步查看每个接口是属性还是函数:

  当上述解释节点的定义定义时,已经提到了其中许多属性。在这里,我们需要关注以下属性值:

  重要的是,这些就是这些!为了进一步了解每个属性中的数据如何存储,我们仍然以虹膜数据集为示例来训练max_depth = 2的决策树(根节点对应于depth = = =0),并查看以下值:

  可以被看见:

  使用虹膜花数据集来手动验证上述猜想,将根节点3的拆分特性和阈值0.8划分,并如下获取左节点的样品计数。发现确实只有50种第一类样品在分区之后剩下的样本。也就是说,样本计数为[50,0,0],这是完全相同的。

  此外,通过children_left和childres_right的两个属性之间的相应关系,实际上,我们还可以推断二进制树的遍历方法为前奏决策树之后分配后对应的二进制树。原理图如下:

  原始:https://juejin.cn/post/7096110958065483806