本文原载于Medium网站,经原作者授权,由InfoQ中文网翻译分享。
决策树是一个经久不衰的话题。本文要做的是将一系列决策树组合成一个单一的预测模型;也就是说,我们将创建一个集成方法的模型。
决策树是最准确的预测模型之一。想象一下,同时使用多棵树,预测能力可以有多高提高!
一些集成的方法和算法的预测能力超过了当今机器学习领域一流的先进深度学习模型。此外,Kaggle参赛者广泛使用集成方法来应对数据科学的挑战。
该积分方法以相对较低的复杂度提供了较高的精度。决策树模型和决策树组易于构建、理解和解释。我们将在另一篇文章中讨论宏伟的随机森林,因为它除了是机器学习的模型之外,还被广泛用于执行变量选择!我们可以为机器学习模型的预测器选择最佳候选变量。
Juter Notebook请查看Jupyter Notebook,了解我们接下来要介绍的构建机器学习模型的概念。也可以参考我在Medium写的其他数据科学文章和教程。
本文中我们要做的是用Python构建一个决策树。实践中会有两棵树:一棵树基于熵,一棵树基于基尼系数。
安装包的第一步是安装pydot和Graphviz包来查看决策树。没有这些包装,我们只有3354型。我们想更进一步,考虑分别通过熵和基尼系数计算值的决策树。
命令!指示它将在操作系统上运行。这是一条捷径,所以我们不必离开朱庇特和打开终端。
!pip install-upgrade pydot requirement已经满足:c:\ users \ anell \ appdata \ local \ programs \ python \ python 38 \ lib \ site-packages(21 . 1 . 3)中的pip!pip-升级graphviz所需的已经满足:graphviz在c:\ users \ anell \ appdata \ local \ programs \ python \ python 38 \ lib \ site-packages(0.16)中复制代码
如果我们在Windows上安装Graphviz有问题,我们可以在终端上运行它!条件安装python-graphviz命令。
#!pip安装graphviz#您可能需要为windows#运行此命令(CMD )!条件安装python-graphviz #文档http://www.graphviz.org复制代码
Graphviz是一个图形可视化软件包。图是有节点和边的结构。换句话说,实际的决策树是一个计算图。
为了导入许多包,我们需要Pandas来创建Datarame格式的结构。我们将使用DecisionTreeClassifier,即Scikit Learn的树包中实现的决策树算法。另外,我们需要export_Graphviz函数将决策树导出为Graphviz格式,然后使用Graphviz来可视化这个导出。
如果我们想看这棵树,它还没准备好!我们需要创建一个模型,以图形格式导出它,并使用Graphviz查看它。
#导入包从sklearn导入熊猫作为PD。从sklearn导入决策树分类器。树导入导出_ graphviz导入pydot导入graphviz复制代码
创建数据集接下来,我们创建一个数据集,它实际上是一个字典列表。
# Creating a datasetinstances=[{'Best Friend' False,' Species' 'Dog'},{'Best Friend' True,' Species' 'Dog'},{'Best Friend' True,' Species' 'Cat'},{'Best Friend' False,' Species' 'Cat'},{'Best Friend' True,' Species' 'Cat'},{'Best Friend' True,' Species' 'Cat'},{'Best Friend' True,' Species '' Best ' },{ ' Best Friend 'False,' Species' 'Dog'},{ ' bes
转换为数据框让我们转换这些数据并将其格式化为数据框。
#将字典转换为dataframedf=pd.dataframe(实例)df复制代码
这样我们就有了一个数据框架,可以用来判断某个物种是否适合做人类最好的朋友。一会儿,我们将通过决策树进行分类。
拆分数据接下来,我们拆分训练数据和测试数据。在本例中,我们使用列表合成根据括号中的条件将数据转换为0或1:
#准备训练和测试数据x _ train=[[1]if a else[0]for a in df[' Best Friend ']]y _ train=[1 if d==' Dog ' else 0 for d in df[' Species ']]Labels=[' Best Friend ']print(x _ train)[[0],[1],[1],[0],[1],[1],[0],[1],[0],[0]
我们把输入数据和输出值转换成0或1,也就是说——机器学习算法最擅长处理数字。
这样我们就把值转换成了X输入值和target Y目标值,因为我们把变量X构造成了一个循环结构。接下来,我们遍历Best Friend列的每个元素来表示输入变量,并将它们放入变量A和d中。
我们使用代码将值转换为文本和数字表示,以呈现给机器学习模型。
建立一个机器学习模型并不容易。它涉及到不同领域的一系列知识,以及构成这一切基础的数学和统计学背景。此外,它还需要计算机编程知识和对我们正在学习的语言包、业务问题和数据预处理的理解。
也就是说,建立机器学习模型的过程涉及到很多领域。到目前为止,我们已经准备好了数据,尽管我们还没有准备好对数据进行检验来做出熵和基尼系数的模型。
这里不评价模型,所以不需要测试数据。因此,我们得到所有的数据,并用它们作为X和y的训练数据。
必须记住,如果我们评估模型,我们需要测试数据。由于我们不会在这里进行评估,我们将只使用训练数据,即整个数据集。
建立树模型在这个阶段,我们已经建立了模型,其中第一阶段定义了model_v1对象,然后使用model_v1.fit()来训练模型。
model _ v1=decision tree classifier(max _ depth=none,max _ features=none,criterion=' entropy 'min _ samples _ leaf=1,min _ samples _ split=2)
Python是面向对象的编程。DecisionTreeClassifier函数实际上是一个类,它创建了——对象类的一个实例。当我们调用DecisionTreeClassifier类时,它将依赖几个参数来定义sklearn文档中的算法行为查询。
这里我们用熵作为标准。至于我们不能指定的参数,算法认为是默认的。
那么这个对象就会有方法和属性,fit()就是应用于model_v1对象进行模型训练的方法:
#将数据呈现给分类器model _ v1.fit (x _ train,y _ train)决策树分类器(criterion=' entropy ')复制代码。
创建变量在这里,我们定义了一个名为tree_model_v1的变量,它位于我们现在所在的目录下。
#用决策树file='/doc/machine learning/python/decision tree/tree _ model _ v1 . dot '设置文件名复制代码。
定义文件变量后,我们将调用从model_v1计算图中提取的export_graphviz,也就是决策树。我们打开整个文件并记录计算图的所有元素:
#生成open (file)为f的决策树图export _ graphviz (model _ v1,out _ file=file,feature _ names=labels:dot _ graph=f . read()graphviz . source(dot _ graph)复制代码。
将点文件转换为png。在此之上,我们有一个计算图格式的树。如果您想以png格式编写这个树:
!dot-tpng tree _ model _ v1 . dot-otree _ model _ v1.png复制代码
在演绎层次的顶端是最好的朋友。在这个例子中,我们只有一个变量。请注意,这个算法计算的熵是0.985,其他聚类的熵还是会计算的。
[8,6]的第一组和14个样本通过熵显示了最高的信息增益。基于此,我们在熵计算层次结构的顶部有一个节点。
该算法遍历所有数据示例,计算熵,并找到最佳组合3354。具有最高熵的属性到达顶部,并创建了我们的决策树级别。
第二版模型的另一种方法是使用另一种标准而不是基于熵的决策树来创建相同的模型。我们将使用基尼系数。
为了仅使用基尼系数构建相同的树,有必要改变标准并删除标准参数:
model _ v2=decision tree classifier(max _ depth=none,max _ features=none,min _ samples _ leaf=1,min _ samples _ split=2)复制代码。
当我们移除标准参数时,算法将考虑应用基尼系数。我们有一个有趣的参数叫做max_depth。其中我们可以定义树的最大深度。在我们的例子中没有意义,因为我们只有一个变量;但是如果我们有几十个输入变量,max_depth会非常有用。
当我们有很多输入变量时,树的深度会很大,会带来过拟合的问题。因此,我们应该在建立模型时定义树的深度。
由于我们有许多参数,找到最佳参数组合来构建算法是一项复杂的任务!当以自动化的方式测试多个参数组合时,我们可以使用需要大量计算资源的交叉验证。
我们还有min_samples_leaf来表示决策树的最低层:叶子节点所需的最小样本数,即它将考虑多少个观测值来构造决策树的最低节点。
最后,参数min_samples_split是分割内部节点所需的最小样本数。在决策树中,我们将根节点作为顶部,顶部节点作为树的基础,中间节点。因此,我们可以简单地调整这些参数来定义如何构建所有节点。
训练Gini版本#将数据呈现给分类器model _ v2.fit (x _ train,y _ train)复制代码
我们再次生成文件参数:
#用决策树file='/user/documents/machine learning/decision tree _ tree _ model _ v1 . dot ' '设置文件名复制代码。
我们提取了模型的计算图:
在本文中,我们用同样的方法创建了两棵树2。我们用熵和基尼系数来计算。这两棵树的区别在于用来定义节点组织的标准。他们之间没有区别。根据上下文、数据和业务问题,它们都可能很有趣。
我们建议创建同一模型的多个版本,并评估最佳性能。
!dot-tpng tree _ model _ v2 . dot-otree _ model _ v2.png复制代码
最后,我们保存了决策树的出口。希望这篇文章对你有帮助。感谢您的阅读。
原始链接:
https://level up . git connected . com/how-to-build-a-decision-tree-model-in-python-75 F6 F3 af 159d