决策树是判别模型吗,决策树是什么模型
=======================================================================
机器学习笔记本Python介绍用Python进行机器学习https://github.com/amueller/introduction _ to _ ml _ with _ Python/blob/master/02-supervised-Learning . ipynb时间:2019年5月12日
阅后即改:《机器学习实战》
=======================================================================
目录1决策树1.1节点属性公式6-1基尼杂质2决策树可视化第一种和第二种方法1:在IDE中读取和显示方法2:在终端中控制决策树的复杂度3树的特征重要性5参数、优缺点
1决策树
PS:
Scikit-Learn使用CART算法,只生成二叉树:非叶节点总是有两个子节点(即问题的答案只有是或否)。然而,其他算法,如ID3生成的决策树,可以有两个以上的子节点。
决策树是一种广泛用于分类和回归任务的模型(也可以胜任多输出任务)。它功能强大,可以适应复杂的数据集。本质上,它从if/else问题的层次中学习并得出结论。
学习决策树就是学习一系列的if/else问题,这样我们才能尽快得到正确的答案。在机器学习中,这些问题被称为测试(不要和测试集混淆,测试集是用来测试模型泛化性能的数据)。
对于构造决策树,算法搜索所有可能的测试,以找到目标变量信息量最大的测试。
根节点代表整个数据集。
根据测试条件是真还是假来划分数据集。
重复在该区域寻找最佳测试的过程,以建立更准确的模型。这个递归过程生成一个二叉决策树,其中每个节点包含一个测试。
递归重复划分数据,知道每个划分的区域(决策树的每个叶节点)只包含一个目标值(单个类别或单个回归值)。如果一个树种的一个叶节点所包含的数据点的目标值都相同,那么这个叶节点就是纯的(纯)。
如果要对新数据进行预测,首先要检查这个点位于特征空间的哪个区域,然后取这个区域的大部分目标值(如果是纯叶节点,就是单个目标值)作为预测结果。从根节点开始遍历树可以找到这个区域,每一步是左还是右取决于是否满足相应的测试。
决策树也可以用于回归任务,使用完全相同的方法。预测方法是在每个节点测试的基础上遍历树,最终找到新数据点所属的叶节点。该数据点的输出是该叶节点中所有训练点的平均目标值。
1.1节点属性属性含义样本统计该节点值应用的训练实例数该节点上每个类别的训练实例数基尼(基尼系数)衡量节点的杂质:如果所有应用的训练实例都属于同一类别,则该节点是“纯的”(基尼=0)公式6-1基尼杂质
Pi,k是第I个节点上类别为k的训练样本的百分比。
2决策树可视化sk learn . tree . export _ graphviz(decision _ tree,out _ file=none,#输出文件名max_depth=None,#决策树feature_names的最大深度=none,# feature name class_names=None,# class name label=all ,#是否显示标签,all filled=False,#默认显示,#设置为True时,绘制节点以指示用于分类的大多数类的纯度,用于回归的极值,或用于多输出的节点。Leaves_parallel=False,#设置为True时,在树的底部绘制所有叶节点。Imperceptibility=True,#设置为True时,不纯节点node _ ids显示在每个节点中=false,#设置为True时,ID号显示在每个节点中。比例=假,#设置为真时,将“值”和/或“样本”的显示分别更改为比例和百分比。Rotate=False,#当设置为True时,树的方向是从左到右,而不是从上到下。Round=false,#当设置为True时,使用圆角绘制节点框,并使用Helvetica字体而不是Times-Roman字体。Special_characters=False,#设置为False时,忽略特殊字符获得PostScript兼容精度=3#各节点的不纯点值、阈值、属性值中的浮点精度位数)。树的可视化有助于深入理解算法是如何进行预测的,也是一个很好的机器学习算法的例子,很容易向非专家解释。
首先调用scikit-learn的tree模块中的export_graphviz方法,将决策树导出到。点格式。
从sk learn . tree import export _ graphvizexport _ graphviz(tree _ clf,out _ file=image _ path( iris _ tree . dot ),feature _ names=iris . feature _ names[2:],Class _ names=iris.target _ names,rounded=true,filled=true)这样,你应该能在。项目文件夹中的点格式。
其次,使用graphivz来读取和显示。点文件。
1.在IDE中读取和显示https://blog.csdn.net/az9996/article/details/86564357。
2:在终端中,可以使用graphviz包[1]中的dot命令行工具对此进行转换。点文件转换成其他格式,如PDF或PNG。下面的命令将。点文件转换为. png图像文件:
$ dot-TPN giris _ tree . dot-o iris _ tree . png 3控制决策树的复杂度。一般来说,建立一个决策树,直到所有的叶子节点都是纯叶子节点,会导致一个非常复杂的模型,而且对训练数据高度过拟合。纯叶节点的存在,说明这棵树在训练集中的准确率是100%。训练集中的每个数据点都位于正确分类的叶节点中。这个时候,决策边界并不是人们想象的那样。这个决策边界是过于关注远离同类别其它点的单个异常点。
防止过拟合有两种常用策略:一种是尽早停止树的生长,也叫010-预剪枝(预修剪););另一种是先构造树,然后删除或折叠信息很少的节点,也叫后剪枝(后剪枝)或剪枝。预修剪的限制可以包括限制树的最大深度,限制叶节点的最大数量,或者指定节点中数据点的最小数量以防止进一步分割。
scikit-learn的决策树是在DecisionTreeRegressor类和DecisionTreeClassifier类中实现的。Scikit-learn只实现了预剪枝,而没有实现后剪枝。
如果我们不限制决策树的深度,它的深度和复杂性可能会变得非常大。因此,不分枝的树容易过拟合,新数据的泛化性能差。现在我们对决策树应用预剪枝,这样可以防止在训练数据被完美拟合之前树的膨胀。一种选择是在达到一定深度后停止树的扩展。树的扩展可以通过设置相同的max_depth值来控制。限制树的深度可以减少过度拟合。这一次,训练集的准确性降低了,但测试集的准确性可以提高。
4树特征的重要性查看整棵树可能非常费力。此外,一些有用的属性可以用来总结树的工作原理。其中最长的是特征重要性(特征重要性),对每个特征对树的决策的重要性进行排序。对于每个特征,它是一个介于0和1之间的数字,其中0表示“完全没用”,1表示“完美的预测目标值”。特征的总和总是1。
如果一个特征的feature_importance_很小,并不意味着该特征不提供任何信息。这只意味着该特征没有被树选择,可能是因为另一个特征也包含相同的信息。
与线性模型的系数不同,一个特征的重要性永远是正的,并不能说明该特征对应哪一类。特征的重要性告诉我们“最差半径”特征是重要的,但它没有告诉我们大半径是否表明样本是良性的还是恶性的。事实上,特征和类别之间可能没有这么简单的关系。
回归树的使用和分析与分类树非常相似。但是当把基于树的模型应用于回归时,我们想指出它的一个特殊性质。DecisionTreeRegressor(以及所有其他基于树的回归模型)不能在定型数据范围之外进行外推或预测。
一旦输入超出了模型训练数据的范围,模型就只能持续预测最后一个已知数据点。树不能在训练数据的范围之外生成“新的”响应。所有基于树的模型都有这个缺点。(实际上,可以使用基于树的模型来进行非常好的预测(例如试图预测价格是上涨还是下跌)。这个例子的目的不是说明树对于时间序列来说是一个不好的模型,而是以预测的方式来说明树的特殊性质。)
5.参数、优缺点控制决策树模型复杂度的参数是预剪枝参数,它在树完全展开之前停止树的构建。选择一种预剪枝策略(设置max_depth、max_leaf_nodes或min_samples_leaf)足以防止过拟合。
优势:
是的,模型很容易可视化,非专家也很容易理解(至少对于较小的树);
第二,算法完全不受数据缩放的影响。由于每个特征都是单独处理的,而且数据划分不依赖于缩放,所以决策树算法不需要特征预处理,比如归一化或标准化。特别是当特征的尺度完全不同时或者二元特征和连续特征同时存在时,决策树工作得很好。
缺点:
即使做了预剪枝,也往往过拟合,泛化性能差。因此,在大多数应用中,经常使用决策树集成(决策树集成)来代替单个决策树。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。