决策树

七月的尾巴 七月的尾巴     2022-08-04     234

关键词:

决策树(DTS)是一个非参数监督学习用于方法分类和回归。我们的目标是创建一个预测通过学习从数据推断出功能简单的决策规则的目标变量的值的典范。

例如,在下面的例子中,决策树从数据学习来近似正弦曲线与一组,如果 - 则 - 否则决策规则。的树越深,越复杂决策规则和钳工模型。

技术分享

决策树的一些优点是:

  • 简单的理解和解释。树可以可视化。
  • 只需要很少的数据准备。其它技术通常需要数据归一化,虚设变量需要被创建和被删除的空白值。但是请注意,该模块不支持缺失值。
  • 使用树的成本(即,预测的数据)是在用于训练树数据点的数目的对数。
  • 能够同时处理数字和分类 ??数据。其它技术通常专门分析仅具有一种类型的变量的数据集。见算法,以获取更多信息。
  • 能够处理多输出的问题。
  • 采用了白色盒子模型。如果给定的情况是在一个模型中观察到,对于病情的解释很容易被布尔逻辑解释。与此相反,在黑盒模型(例如,在一个人工神经网络),结果可能更难以解释。
  • 可以使用统计测试来验证模型。这使得有可能考虑了模型的可靠性。
  • 性能良好,即使其假设一定程度上被从其中产生的数据的真实模型侵犯。

决策树的缺点包括:

  • 决策树学习者可以创建过于复杂的树木不一概而论数据良好。这就是所谓的过拟合。机制,例如修剪(目前尚不支持),设置在叶节点所需的样本的最小数目或设置树的最大深度是必要的,以避免此问题。
  • 决策树可以是不稳定的,因为在数据的微小变化可能导致生成一个完全不同的树。这个问题是通过使用合奏内决策树减轻。
  • 学习最佳决策树的问题是已知的NP完全下最优的几个方面,甚至简单的概念。因此,实际的决策树学习算法是基于启发式算法如贪婪算法,其中局部最优决策是在每个节点进行。这种算法不能保证返回全局最优决策树。这可以通过在合奏学习者,其中的功能和样本被随机地与替换采样训练多个树来减轻。
  • 有概念是很难学习,因为决策树不要轻易表达出来,如XOR,奇偶校验或多路复用器的问题。
  • 决策树学习者创造偏见的树木,如果一些类占据主导地位。因此建议对数据集之前与决策树嵌合平衡。

1.10.1。分类

DecisionTreeClassifier 能够对数据集执行多类分类的一类。

与其他分类,DecisionTreeClassifier需要输入两个数组:一个数组X,疏或密,规模 抱着训练样本,整数值,大小的列Y ,抱着类标签的训练样本:[n_samples, n_features][n_samples]

>>> from sklearn import tree
>>> X = [[0, 0], [1, 1]]
>>> Y = [0, 1]
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(X, Y)

被装配后,该模型然后可以用于预测类样品:

>>> clf.predict([[2., 2.]])
array([1])

可替代地,每个类的概率可以预测,这是在一个叶同一类的训练样本的比例:

>>> clf.predict_proba([[2., 2.]])
array([[ 0.,  1.]])

DecisionTreeClassifier 能够二进制的(其中,标签是[-1,1])分类和多类(其中,标签是[0,...,K-1])的分类。

使用虹膜数据,我们可以构造一个树如下:

>>> from sklearn.datasets import load_iris
>>> from sklearn import tree
>>> iris = load_iris()
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(iris.data, iris.target)

经过培训后,我们可以导出树的Graphviz使用的格式export_graphviz 导出。下面是培训了整个虹膜数据集的树的例子出口:

>>> from sklearn.externals.six import StringIO
>>> with open("iris.dot", ‘w‘) as f:
...     f = tree.export_graphviz(clf, out_file=f)

然后我们可以使用的Graphviz的dot工具来创建一个PDF文件(或任何其他支持的文件类型): 。dot -Tpdf iris.dot -o iris.pdf

>>> import os
>>> os.unlink(‘iris.dot‘)

另外,如果我们有Python模块pydot安装,我们可以直接在Python中生成PDF文件(或任何其他支持的文件类型):

>>> from sklearn.externals.six import StringIO  
>>> import pydot 
>>> dot_data = StringIO() 
>>> tree.export_graphviz(clf, out_file=dot_data) 
>>> graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
>>> graph.write_pdf("iris.pdf") 

export_graphviz出口还支持多种美学选项,其中包括他们的阶级着色节点(或价值回归),如果需要使用显式的变量和类名。IPython的笔记本电脑也可以使用使这些地块内嵌图像()函数:

>>> from IPython.display import Image  
>>> dot_data = StringIO()  
>>> tree.export_graphviz(clf, out_file=dot_data,  
                         feature_names=iris.feature_names,  
                         class_names=iris.target_names,  
                         filled=True, rounded=True,  
                         special_characters=True)  
>>> graph = pydot.graph_from_dot_data(dot_data.getvalue())  
>>> Image(graph.create_png())  
技术分享

被装配后,该模型然后可以用于预测类样品:

>>> clf.predict(iris.data[:1, :])
array([0])

可替代地,每个类的概率可以预测,这是在一个叶同一类的训练样本的比例:

>>> clf.predict_proba(iris.data[:1, :])
array([[ 1.,  0.,  0.]])
技术分享

例子:

  • 绘制决策树的决定表面上的虹膜数据集

1.10.2。回归

技术分享

决策树也可使用适用于回归问题, DecisionTreeRegressor类。

作为在分类设置,配合方法将作为参数阵列的X和Y,只是在此情况下,y预计有浮点值,而不是整数值:

>>> from sklearn import tree
>>> X = [[0, 0], [2, 2]]
>>> y = [0.5, 2.5]
>>> clf = tree.DecisionTreeRegressor()
>>> clf = clf.fit(X, y)
>>> clf.predict([[1, 1]])
array([ 0.5])

例子:

  • 决策树回归

1.10.3多输出问题

一种多输出的问题是一个监督学习问题几个输出来预测时,即当Y为大小的2D阵列。[n_samples, n_outputs]

当在输出端之间没有相关性,一个非常简单的方法来解决这类问题是要建立n个独立的模型,即一个用于每个输出,然后使用这些模型来独立地预测n个输出端中的每一个。但是,因为它很可能是有关同一输入的输出值本身相关,一个常常更好的方式是建立能够同时预测所有n个输出端的一个单一的模式。首先,它要求,因为只有一个估计器被内置下的训练时间。其次,将所得估计的泛化精度可能往往增加。

关于决策树,这种策略可以容易地用于支持多输出的问题。这需要以下变化:

  • 在叶商店n个输出值,而不是1;
  • 使用计算所有n个输出平均降幅分割标准。

该模块通过实现双方这一战略提供了多路输出的问题,支持DecisionTreeClassifier和 DecisionTreeRegressor。如果决策树是适合的输出数组Y规格上则所得估计会:[n_samples, n_outputs]

  • 输出n_output在值predict;
  • 输出经类概率n_output阵列的列表 predict_proba

回归使用多输出树是体现在 多路输出决策树回归。在这个例子中,输入X为一个单一的实际值与输出Y的X的正弦和 ??余弦

技术分享

分类使用多输出树是表现在 面对完成了多路输出的估计。在这个例子中,输入X的面的上半部和输出Y的像素被这些面的下半部分的像素。

技术分享

例子:

  • 多路输出决策树回归
  • 面完成具有多输出估计

参考文献:

  • M. Dumont等, 随机子窗口和多输出随机树快多类图像标注,国际会议计算机视觉理论与应用2009

1.10.4。复杂性

在一般情况下,在运行时间成本来构造一个平衡二叉树是 技术分享与查询时间 技术分享。虽然树构建算法试图产生平衡树,他们不会永远是平衡的。假设该子树保持大致平衡,在每个节点处的费用由搜索通过技术分享寻找能够提供在熵最大减少的特征。这具有的成本 技术分享在每个节点,从而导致在整个树的总费用(通过求和每个节点的成本)的 技术分享

Scikit学习提供了决策树的结构的更有效的实现。一个天真实现(如上所述)将重新计算在类标签直方图(分类用)或装置(回归),用于沿一给定功能的每个新的分割点。预分类的特征在所有相关样品,和保持一个运行标签数量,将在每一个节点,以减少复杂性技术分享,这导致总费用技术分享。这是所有基于树算法的一个选项。默认情况下它是开启了梯度推进,其中一般来说它使训练速度快,但关闭了所有其它的算法,因为它往往训练很深的树时,放慢训练。

1.10.5。在实际使用技巧

  • 决策树往往在数据过度拟合了大量的功能。得到的样品的右侧比为特征数是重要的,因为在高维空间几个样品树很可能过度拟合。
  • 考虑进行降维(PCA, ICA,或特征选择)中预先给你的树发现有歧视性的特点更好的机会。
  • Visualise你的树,你是通过训练export 功能。使用max_depth=3作为初始树的深度来获取树是如何装修你的数据的感觉,再增加深度。
  • 请记住,填充树所需的样本数加倍为每个附加级的树生长到。使用max_depth来控制树的大小,以防止过 ??度拟合。
  • 使用min_samples_splitmin_samples_leaf在一个叶节点,以控制样本的数目。一个非常小的数量通常意味着树会过度拟合,而大量将防止树借鉴的数据。尝试min_samples_leaf=5作为初始值。两者之间的主要区别在于,min_samples_leaf保证在一个叶样品的最小数目,而min_samples_split可以创建任意小叶子,虽然min_samples_split更常见在文献中。
  • 培训以防止树从往那占主导类被偏置前平衡你的数据集。类平衡可以通过取样样品从每个类数目相同,或优选通过样品重量(总和正常化来完成sample_weight)对于每个类为相同的值。还要注意的是基于重量的修剪前的标准,如min_weight_fraction_leaf,那么将是朝向主导类比是不知道样品的重量,如标准偏差较小min_samples_leaf
  • 如果样本被加权,它会更容易使用基于权重的修剪预准则如优化的树结构 min_weight_fraction_leaf,这确保叶节点至少包含样本权的总体总和的一小部分。
  • 所有的决策树使用np.float32阵列内部。如果训练数据不是在此格式中,数据集的副本将被制成。
  • 如果输入矩阵X是非常稀疏,建议将其转换为稀疏 调用预测之前。训练时间可以是数量级相比时特征具有在大多数样本的零值的密集矩阵为稀疏矩阵输入快。csc_matrix` before calling fit and sparse ``csr_matrix

1.10.6。树算法:ID3,C4.5,C5.0和CART 

什么是所有不同的决策树算法和他们如何各不相同?哪一个是scikit学习的实施?

ID3(迭代Dichotomiser 3)由罗斯·昆兰在1986年开发的。该算法创建了一个多路树,找到每个节点(即贪婪地)中的分类功能,将产生分类目标最大的信息增益。树木生长至它们的最大尺寸,然后修剪步骤通常 ??适用于改进树的推广到看不见数据的能力。

C4.5的前身是ID3和删除的功能,必须通过动态定义离散属性(基于数值变量)类别的分区连续属性值转换成一组离散的时间间隔的限制。C4.5转换训练有素树木(即ID3算法的输出)成组的如果 - 那么规则。然后每个规则的这些准确性进行评估,以决定它们应该被应用顺序。修剪是,如果该规则的精度提高,没有它删除规则的前提进行。

C5.0是专有许可证下昆兰的最新版本发布。它使用较少的内存,并同时更加准确的建立比C4.5小的规则集。

CART(分类和回归树)非常相似C4.5,但不同之处在于,它支持数值目标变量(回归),不计算规则集。CART构建使用功能和阈值产生在每一个节点上最大的信息增益二叉树。

scikit学习使用CART算法的优化版本。

1.10.7。数学公式

给定的训练矢量技术分享,I = 1,...,l和一个标签矢量 技术分享,决策树递归分割,使得具有相同的标签样品被分组在一起的空间。

让在节点的数据技术分享被表示技术分享。对于每一个候选分割技术分享包括功能技术分享和阈值技术分享,将数据划分为 技术分享技术分享子集

技术分享

在杂质技术分享用杂质函数被计算 技术分享,这取决于任务的选择得到解决(分类或回归)

技术分享

选择杂质最小化的参数

技术分享

递归为子集技术分享和 技术分享直到到达最大允许深度, 技术分享技术分享

1.10.7.1。分类标准

如果目标是一个分类结果承担值0,1,...,K-1,为节点技术分享,表示区域技术分享技术分享 观察,让

技术分享

是类k观测点中的比例 技术分享

杂质的常用措施是基尼

技术分享

交叉熵

技术分享

和误分类

技术分享

1.10.7.2。回归标准

如果目标是一个连续的值,则节点技术分享,表示区域技术分享技术分享观察,一个共同的标准,以减少是均方误差

技术分享

一文看懂决策树

 决策树是一种逻辑简单的机器学习算法,它是一种树形结构,所以叫决策树。本文将介绍决策树的基本概念、决策树学习的3个步骤、3种典型的决策树算法、决策树的10个优缺点。什么是决策树?决策树是一种解决分类问题... 查看详情

统计学习方法 李航 决策树

决策树一.决策树基本描述决策树是一种基本的分类与回归方法,呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程.学习时,利用训练数据根据损失函数最小化的原则建立决策树模型.预测时,对新的数据,利用决策树模型... 查看详情

机器学习决策树

1、决策树简介1.1决策树概述决策树算法是一种基于树形结构的分类算法,它能从给定的无序的训练样本中,提炼出树型的分类模型,树形中包含判断模块和终止模块。它是一种典型的分类算法,首先对数据进行处理,利用归纳... 查看详情

大数据项目8(sklearn决策树)

决策树一、了解什么是决策树二、决策树模型三、决策树-信息增益四、信息增益比五、ID3算法六、决策树的剪枝一、了解什么是决策树分类分类树:分类标签值(天气?是否垃圾网页?)定性决策树:定... 查看详情

决策树

第5章决策树决策树(decisiontree)是一种基本的分类与回归方法。本章主要讨论用于分类的决策树。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义... 查看详情

决策树 - 决策树如何在每个节点上选择规则

】决策树-决策树如何在每个节点上选择规则【英文标题】:DecisionTree-Howdoesdecisiontreeselectrulesoneachnode【发布时间】:2019-01-2808:16:16【问题描述】:我正在学习机器学习中的决策树算法我可以从教程中了解到,决策树在每个节点上... 查看详情

决策树(回归树)分析及应用建模

一、CART决策树模型概述(ClassificationAndRegressionTrees)    决策树是通过一系列规则对数据进行分类的过程。它提供一种在什么条件下会得到什么值的类似规则的方法。??决策树算法属于有指导的学习,即原数据必须... 查看详情

机器学习算法之决策树(上)

信息熵决策树决策树优化剪枝决策树可视化决策树直观理解比特化(Bits) 查看详情

决策树的剪枝

决策树算法原理(ID3,C4.5)决策树算法原理(CART分类树)CART回归树   决策树的剪枝是通过极小化决策树整体的损失函数。(决策树的生成只考虑局部最优,决策树的剪枝考虑全局最优)  设树T的叶节点为t,个数为|T|,该叶节... 查看详情

决策树

决策树原理对一系列问题进行if/else推导,最终实现决策决策树构建#导入numpyimportnumpyasnp#导入画图工具importmatplotlib.pyplotaspltfrommatplotlib.colorsimportListedColormap#导入树模型和数据集加载工具fromsklearnimporttree,datasets#导入数据集拆分工... 查看详情

雪饮者决策树系列决策树应用

  本篇以信息增益最大作为最优化策略来详细介绍决策树的决策流程。  首先给定数据集,见下图  注:本数据来源于网络本篇将以这些数据作为训练数据(虽然少,但足以介绍清楚原理!),下图是决策树选择特征的流... 查看详情

构建决策树

构建决策树决策树信息熵划分基尼系数划分调用CART 决策树决策树,是通过数据归纳,总结出条件判断的学习模式。如果新来一位男生/客户/面试者,根据上面的树状图就可以作出是否见面/贷款/入职的决定,所以... 查看详情

决策树学习笔记(decisiontree)

 什么是决策树?  决策树是一种基本的分类与回归方法。其主要有点事模型具有可得性,分类速度快。学习时,利用训练数据,根据损失函数最小化原则建立决策树模型;预测时,对新数据,利用决策树模型进行分类。 决... 查看详情

机器学习笔记-决策树

决策树(DecisionTree)决策树学习,建立一颗树结构的模型。此模型由一系列逻辑决策构成。在此结构中决策点代表某个属性上的决策,分支表示决策选择项,树的叶子节点是一系列联合决策的结论。决策树通过分而治之(Divideandconq... 查看详情

ml:决策树算法

...sp;在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型(DecisionTreeModel)和朴素贝叶斯模型(NaiveBayesianModel,NBC)。决策树模型通过构造树来解决分类问题。首先利用训练数据集来构造一棵决策树,一旦树建立起来,... 查看详情

数据结构-决策树(分类)

数据结构-决策树一决策树的介绍二决策树的构造使用决策树做预测需要以下过程:1.信息熵2.条件熵(ConditionalEntropy)与信息增益(InformationGain)3.信息增益做特征选择的优缺点4.信息增益比(InfomationGainRatio)5.Gini系数一决... 查看详情

决策树

决策树(DTS)是一个非参数监督学习用于方法分类和回归。我们的目标是创建一个预测通过学习从数据推断出功能简单的决策规则的目标变量的值的典范。例如,在下面的例子中,决策树从数据学习来近似正弦曲线与一组,如果... 查看详情

C++ 决策树存储

】C++决策树存储【英文标题】:C++decisiontreestorage【发布时间】:2013-05-1918:36:51【问题描述】:我有一个决策树。我给这个决策树提供了一些输入值。然后决策树返回一个值。输入值可以是“孩子的数量”、“年龄”等。然后,... 查看详情