怎么理解决策树 基尼系数中基尼系数的逻辑含义

中国领先的IT技术网站
51CTO旗下网站
2.3.1 决策树
《数据挖掘与数据化运营实战:思路、方法、技巧与应用》第2章数据挖掘概述,本章将为读者简单回顾一下数据挖掘作为一门学科的发展历史,并具体探讨统计分析与数据挖掘的主要区别,同时,将力求用简单、通俗、明了的文字把目前主流的、成熟的、在数据化运营中常用的统计分析和数据挖掘的算法、原理以及主要的应用场景做出总结和分类。本节为大家介绍决策树。
作者:卢辉来源:机械工业出版社| 19:33
2.3 数据挖掘的主要成熟技术以及在数据化运营中的主要应用
2.3.1 决策树
决策树(Decision Tree)是一种非常成熟的、普遍采用的数据挖掘技术。之所以称为树,是因为其建模过程类似一棵树的成长过程,即从根部开始,到树干,到分枝,再到细枝末节的分叉,最终生长出一片片的树叶。在决策树里,所分析的数据样本先是集成为一个树根,然后经过层层分枝,最终形成若干个结点,每个结点代表一个结论。
决策树算法之所以在数据分析挖掘应用中如此流行,主要原因在于决策树的构造不需要任何领域的知识,很适合探索式的知识发掘,并且可以处理高维度的数据。在众多的数据挖掘、统计分析算法中,决策树最大的优点在于它所产生的一系列从树根到树枝(或树叶)的规则,可以很容易地被分析师和业务人员理解,而且这些典型的规则甚至不用整理(或稍加整理),就是现成的可以应用的业务优化策略和业务优化路径。另外,决策树技术对数据的分布甚至缺失非常宽容,不容易受到极值的影响。
目前,最常用的3种决策树算法分别是CHAID、CART和ID3(包括后来的C4.5,乃至C5.0)。
CHAID( Chi-square Automatic Interaction Detector)算法的历史较长,中文简称为卡方自动相互关系检测。CHAID依据局部最优原则,利用卡方检验来选择对因变量最有影响的自变量,CHAID应用的前提是因变量为类别型变量(Category)。
CART( Classification and Regression Tree)算法产生于20世纪80年代中期,中文简称为分类与回归树,CART的分割逻辑与CHAID相同,每一层的划分都是基于对所有自变量的检验和选择上的。但是,CART采用的检验标准不是卡方检验,而是基尼系数(Gini)等不纯度的指标。两者最大的区别在于CHAID采用的是局部最优原则,即结点之间互不相干,一个结点确定了之后,下面的生长过程完全在结点内进行。而CART则着眼于总体优化,即先让树尽可能地生长,然后再回过头来对树进行修剪(Prune),这一点非常类似统计分析中回归算法里的反向选择(Backward Selection)。CART所生产的决策树是二分的,每个结点只能分出两枝,并且在树的生长过程中,同一个自变量可以反复使用多次(分割),这些都是不同于CHAID的特点。另外,如果是自变量存在数据缺失(Missing)的情况,CART的处理方式将会是寻找一个替代数据来代替(填充)缺失值,而CHAID则是把缺失数值作为单独的一类数值。
ID3(Iterative Dichotomiser)算法与CART是同一时期产生的,中文简称为迭代的二分器,其最大的特点在于自变量的挑选标准是:基于信息增益的度量选择具有最高信息增益的属性作为结点的分裂(分割)属性,其结果就是对分割后的结点进行分类所需的信息量最小,这也是一种划分纯度的思想。至于之后发展起来的C4.5可以理解为ID3的发展版(后继版),两者的主要区别在于C4.5采用信息增益率(Gain Ratio)代替了ID3中的信息增益度量,如此替换的主要原因是信息增益度量有个缺点,就是倾向于选择具有大量值的属性。这里给个极端的例子,对于Member_Id 的划分,每个Id都是一个最纯的组,但是这样的划分没有任何实际意义。而C4.5 所采用的信息增益率就可以较好地克服这个缺点,它在信息增益的基础上,增加了一个分裂信息(SplitInformation)对其进行规范化约束。
决策树技术在数据化运营中的主要用途体现在:作为分类、预测问题的典型支持技术,它在用户划分、行为预测、规则梳理等方面具有广泛的应用前景,决策树甚至可以作为其他建模技术前期进行变量筛选的一种方法,即通过决策树的分割来筛选有效地输入自变量。
关于决策树的详细介绍和实践中的注意事项,可参考本书10.2节。
【责任编辑: TEL:(010)】&&&&&&
大家都在看猜你喜欢
热点热点头条头条热点
24H热文一周话题本月最赞
讲师:413828人学习过
讲师:738876人学习过
讲师:171406人学习过
精选博文论坛热帖下载排行
本书是根据全国计算机技术与软件专业技术资格(水平)考试《网络管理员考试大纲》所要求的考试范围而编写的试题集。全书共分10个单元,同步...
订阅51CTO邮刊数据挖掘(6):决策树分类算法 - 文章 - 伯乐在线
& 数据挖掘(6):决策树分类算法
从这篇开始,我将介绍分类问题,主要介绍决策树算法、朴素贝叶斯、支持向量机、BP神经网络、懒惰学习算法、随机森林与自适应增强算法、分类模型选择和结果评价。总共7篇,欢迎关注和交流。
这篇先介绍分类问题的一些基本知识,然后主要讲述决策树算法的原理、实现,最后利用决策树算法做一个泰坦尼克号船员生存预测应用。
一、分类基本介绍
物以类聚,人以群分,分类问题只古以来就出现我们的生活中。分类是数据挖掘中一个重要的分支,在各方面都有着广泛的应用,如医学疾病判别、垃圾邮件过滤、垃圾短信拦截、客户分析等等。分类问题可以分为两类:
归类:归类是指对离散数据的分类,比如对根据一个人的笔迹判别这个是男还是女,这里的类别只有两个,类别是离散的集合空间{男,女}的。
预测:预测是指对连续数据的分类,比如预测明天8点天气的湿度情况,天气的湿度在随时变化,8点时的天气是一个具体值,它不属于某个有限集合空间。预测也叫回归分析,在金融领域有着广泛应用。
虽然对离散数据和连续数据的处理方式有所不同,但其实他们之间相互转化,比如我们可以根据比较的某个特征值判断,如果值大于0.5就认定为男性,小于等于0.5就认为是女性,这样就转化为连续处理方式;将天气湿度值分段处理也就转化为离散数据。
数据分类分两个步骤:
构造模型,利用训练数据集训练分类器;
利用建好的分类器模型对测试数据进行分类。
好的分类器具有很好的泛化能力,即它不仅在训练数据集上能达到很高的正确率,而且能在未见过得测试数据集也能达到较高的正确率。如果一个分类器只是在训练数据上表现优秀,但在测试数据上表现稀烂,这个分类器就已经过拟合了,它只是把训练数据记下来了,并没有抓到整个数据空间的特征。
二、决策树分类
决策树算法借助于树的分支结构实现分类。下图是一个决策树的示例,树的内部结点表示对某个属性的判断,该结点的分支是对应的判断结果;叶子结点代表一个类标。
上表是一个预测一个人是否会购买购买电脑的决策树,利用这棵树,我们可以对新记录进行分类,从根节点(年龄)开始,如果某个人的年龄为中年,我们就直接判断这个人会买电脑,如果是青少年,则需要进一步判断是否是学生;如果是老年则需要进一步判断其信用等级,直到叶子结点可以判定记录的类别。
决策树算法有一个好处,那就是它可以产生人能直接理解的规则,这是贝叶斯、神经网络等算法没有的特性;决策树的准确率也比较高,而且不需要了解背景知识就可以进行分类,是一个非常有效的算法。决策树算法有很多变种,包括ID3、C4.5、C5.0、CART等,但其基础都是类似的。下面来看看决策树算法的基本思想:
算法:GenerateDecisionTree(D,attributeList)根据训练数据记录D生成一棵决策树.
数据记录D,包含类标的训练数据集;
属性列表attributeList,候选属性集,用于在内部结点中作判断的属性.
属性选择方法AttributeSelectionMethod(),选择最佳分类属性的方法.
输出:一棵决策树.
构造一个节点N;
如果数据记录D中的所有记录的类标都相同(记为C类):则将节点N作为叶子节点标记为C,并返回结点N;
如果属性列表为空:则将节点N作为叶子结点标记为D中类标最多的类,并返回结点N;
调用AttributeSelectionMethod(D,attributeList)选择最佳的分裂准则splitC
将节点N标记为最佳分裂准则splitC
如果分裂属性取值是离散的,并且允许决策树进行多叉分裂:从属性列表中减去分裂属性,attributeLsit -= splitA
对分裂属性的每一个取值j:记D中满足j的记录集合为Dj;如果Dj为空:则新建一个叶子结点F,标记为D中类标最多的类,并且把结点F挂在N下;
否则:递归调用GenerateDecisionTree(Dj,attributeList)得到子树结点Nj,将Nj挂在N下;
返回结点N;
算法的1、2、3步骤都很显然,第4步的最佳属性选择函数会在后面专门介绍,现在只有知道它能找到一个准则,使得根据判断结点得到的子树的类别尽可能的纯,这里的纯就是只含有一个类标;第5步根据分裂准则设置结点N的测试表达式。在第6步中,对应构建多叉决策树时,离散的属性在结点N及其子树中只用一次,用过之后就从可用属性列表中删掉。比如前面的图中,利用属性选择函数,确定的最佳分裂属性是年龄,年龄有三个取值,每一个取值对应一个分支,后面不会再用到年龄这个属性。算法的时间复杂度是O(k*|D|*log(|D|)),k为属性个数,|D|为记录集D的记录数。
三、属性选择方法
属性选择方法总是选择最好的属性最为分裂属性,即让每个分支的记录的类别尽可能纯。它将所有属性列表的属性进行按某个标准排序,从而选出最好的属性。属性选择方法很多,这里我介绍三个常用的方法:信息增益(Information gain)、增益比率(gain ratio)、基尼指数(Gini index)。
信息增益(Information gain)
信息增益基于香浓的信息论,它找出的属性R具有这样的特点:以属性R分裂前后的信息增益比其他属性最大。这里信息的定义如下:
其中的m表示数据集D中类别C的个数,Pi表示D中任意一个记录属于Ci的概率,计算时Pi=(D中属于Ci类的集合的记录个数/|D|)。Info(D)表示将数据集D不同的类分开需要的信息量。
如果了解信息论,就会知道上面的信息Info实际上就是信息论中的熵Entropy,熵表示的是不确定度的度量,如果某个数据集的类别的不确定程度越高,则其熵就越大。比如我们将一个立方体A抛向空中,记落地时着地的面为f1,f1的取值为{1,2,3,4,5,6},f1的熵entropy(f1)=-(1/6*log(1/6)+&#*log(1/6))=-1*log(1/6)=2.58;现在我们把立方体A换为正四面体B,记落地时着地的面为f2,f2的取值为{1,2,3,4},f2的熵entropy(1)=-(1/4*log(1/4)+1/4*log(1/4)+1/4*log(1/4)+1/4*log(1/4)) =-log(1/4)=2;如果我们再换成一个球C,记落地时着地的面为f3,显然不管怎么扔着地都是同一个面,即f3的取值为{1},故其熵entropy(f3)=-1*log(1)=0。可以看到面数越多,熵值也越大,而当只有一个面的球时,熵值为0,此时表示不确定程度为0,也就是着地时向下的面是确定的。
有了上面关于熵的简单理解,我们接着讲信息增益。假设我们选择属性R作为分裂属性,数据集D中,R有k个不同的取值{V1,V2,…,Vk},于是可将D根据R的值分成k组{D1,D2,…,Dk},按R进行分裂后,将数据集D不同的类分开还需要的信息量为:
信息增益的定义为分裂前后,两个信息量只差:
信息增益Gain(R)表示属性R给分类带来的信息量,我们寻找Gain最大的属性,就能使分类尽可能的纯,即最可能的把不同的类分开。不过我们发现对所以的属性Info(D)都是一样的,所以求最大的Gain可以转化为求最小的InfoR(D)。这里引入Info(D)只是为了说明背后的原理,方便理解,实现时我们不需要计算Info(D)。举一个例子,数据集D如下:
是否购买电脑
这个数据集是根据一个人的年龄、收入、是否学生以及信用等级来确定他是否会购买电脑,即最后一列“是否购买电脑”是类标。现在我们用信息增益选出最最佳的分类属性,计算按年龄分裂后的信息量:
整个式子由三项累加而成,第一项为青少年,14条记录中有5条为青少年,其中2(占2/5)条购买电脑,3(占3/5)条不购买电脑。第二项为中年,第三项为老年。类似的,有:
可以得出Info年龄(D)最小,即以年龄分裂后,分得的结果中类标最纯,此时已年龄作为根结点的测试属性,根据青少年、中年、老年分为三个分支:
注意,年龄这个属性用过后,之后的操作就不需要年龄了,即把年龄从attributeList中删掉。往后就按照同样的方法,构建D1,D2,D3对应的决策子树。ID3算法使用的就是基于信息增益的选择属性方法。
增益比率(gain ratio)
信息增益选择方法有一个很大的缺陷,它总是会倾向于选择属性值多的属性,如果我们在上面的数据记录中加一个姓名属性,假设14条记录中的每个人姓名不同,那么信息增益就会选择姓名作为最佳属性,因为按姓名分裂后,每个组只包含一条记录,而每个记录只属于一类(要么购买电脑要么不购买),因此纯度最高,以姓名作为测试分裂的结点下面有14个分支。但是这样的分类没有意义,它没有任何泛化能力。增益比率对此进行了改进,它引入一个分裂信息:
增益比率定义为信息增益与分裂信息的比率:
我们找GainRatio最大的属性作为最佳分裂属性。如果一个属性的取值很多,那么SplitInfoR(D)会大,从而使GainRatio(R)变小。不过增益比率也有缺点,SplitInfo(D)可能取0,此时没有计算意义;且当SplitInfo(D)趋向于0时,GainRatio(R)的值变得不可信,改进的措施就是在分母加一个平滑,这里加一个所有分裂信息的平均值:
基尼指数(Gini index)
基尼指数是另外一种数据的不纯度的度量方法,其定义如下:
其中的m仍然表示数据集D中类别C的个数,Pi表示D中任意一个记录属于Ci的概率,计算时Pi=(D中属于Ci类的集合的记录个数/|D|)。如果所有的记录都属于同一个类中,则P1=1,Gini(D)=0,此时不纯度最低。在CART(Classification and Regression Tree)算法中利用基尼指数构造二叉决策树,对每个属性都会枚举其属性的非空真子集,以属性R分裂后的基尼系数为:
D1为D的一个非空真子集,D2为D1在D的补集,即D1+D2=D,对于属性R来说,有多个真子集,即GiniR(D)有多个值,但我们选取最小的那么值作为R的基尼指数。最后:
我们转Gini(R)增量最大的属性作为最佳分裂属性。
本来打算还讲一下实现的,今天要回家,帮家里收下谷子,本来买的前天的票的,台风影响京广线没走成,先写到这里,收拾东西去。9月30回来,再总结一下实现和实践,并持续后面的话题,欢迎持续关注。
参考文献:
[1]:HanJiaWei. Data Mining: concept and techniques.
可能感兴趣的话题
博主写的真的很不错,受教了,多谢
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线后使用快捷导航没有帐号?
查看: 3544|回复: 10
有谁对决策树比较熟的?spark决策树中的有些参数到底是什么意思?
中级会员, 积分 239, 距离下一级还需 261 积分
论坛徽章:4
先上源代码里的参数&&1.1的版本/**
* :: Experimental ::
* Stores all the configuration options for tree construction
* @param algo&&Learning goal.&&Supported:
*& && && && &&&[[org.apache.spark.mllib.tree.configuration.Algo.Classification]],
*& && && && &&&[[org.apache.spark.mllib.tree.configuration.Algo.Regression]]
* @param impurity Criterion used for information gain calculation.
*& && && && && &&&Supported for Classification: [[org.apache.spark.mllib.tree.impurity.Gini]],
*& && && && && && &[[org.apache.spark.mllib.tree.impurity.Entropy]].
*& && && && && &&&Supported for Regression: [[org.apache.spark.mllib.tree.impurity.Variance]].
* @param maxDepth Maximum depth of the tree.
*& && && && && &&&E.g., depth 0 means 1 depth 1 means 1 internal node + 2 leaf nodes.
* @param numClasses Number of classes for classification.
*& && && && && && && && && && && && &(Ignored for regression.)
*& && && && && && && && && && && && &Default value is 2 (binary classification).
* @param maxBins Maximum number of bins used for discretizing continuous features and
*& && && && && & for choosing how to split on features at each node.
*& && && && && & More bins give higher granularity.
* @param quantileCalculationStrategy Algorithm for calculating quantiles.&&Supported:
*& && && && && && && && && &&&[[org.apache.spark.mllib.tree.configuration.QuantileStrategy.Sort]]
* @param categoricalFeaturesInfo A map storing information about the categorical variables and the
*& && && && && && && && && && &&&number of discrete values they take. For example, an entry (n -&
*& && && && && && && && && && &&&k) implies the feature n is categorical with k categories 0,
*& && && && && && && && && && &&&1, 2, ... , k-1. It's important to note that features are
*& && && && && && && && && && &&&zero-indexed.
* @param minInstancesPerNode Minimum number of instances each child must have after split.
*& && && && && && && && && & Default value is 1. If a split cause left or right child
*& && && && && && && && && & to have less than minInstancesPerNode,
*& && && && && && && && && & this split will not be considered as a valid split.
* @param minInfoGain Minimum information gain a split must get. Default value is 0.0.
*& && && && && && &&&If a split has less information gain than minInfoGain,
*& && && && && && &&&this split will not be considered as a valid split.
* @param maxMemoryInMB Maximum memory in MB allocated to histogram aggregation. Default value is
*& && && && && && && & 256 MB.
* @param subsamplingRate Fraction of the training data used for learning decision tree.
* @param useNodeIdCache If this is true, instead of passing trees to executors, the algorithm will
*& && && && && && && & maintain a separate RDD of node Id cache for each row.
* @param checkpointInterval How often to checkpoint when the node Id cache gets updated.
*& && && && && && && && && &E.g. 10 means that the cache will get checkpointed every 10 updates. If
*& && && && && && && && && &the checkpoint directory is not set in
*& && && && && && && && && &[[org.apache.spark.SparkContext]], this setting is ignored.
@Experimental
class Strategy (
& & @BeanProperty var algo: Algo,
& & @BeanProperty var impurity: Impurity,
& & @BeanProperty var maxDepth: Int,
& & @BeanProperty var numClasses: Int = 2,
& & @BeanProperty var maxBins: Int = 32,
& & @BeanProperty var quantileCalculationStrategy: QuantileStrategy = Sort,
& & @BeanProperty var categoricalFeaturesInfo: Map[Int, Int] = Map[Int, Int](),
& & @BeanProperty var minInstancesPerNode: Int = 1,
& & @BeanProperty var minInfoGain: Double = 0.0,
& & @BeanProperty var maxMemoryInMB: Int = 256,
& & @BeanProperty var subsamplingRate: Double = 1,
& & @BeanProperty var useNodeIdCache: Boolean = false,
& & @BeanProperty var checkpointInterval: Int = 10)
中级会员, 积分 239, 距离下一级还需 261 积分
论坛徽章:4
不知道理解的对不对
&&algo: Algo&&它分为分类决策树Classification和回归决策树Regression
& & 分类决策树Classification观察值是分类的&&(实际计算是要把字符类型(字符串)转成数据类型(double)&&a&&b&&a&&c--&1 2 1 3)
& &他有两种判断信息增益方式 Impurity
& &&&Entropy& & 熵&&
& && &Gini& &&&基尼系数& &
& &回归决策树Regression观察值是连续的&&判断依据是
& &variance&&
中级会员, 积分 239, 距离下一级还需 261 积分
论坛徽章:4
那么后面的参数都是什么意思?
maxDepth 表示树的最多的深度
maxBins呢?表示分值数目小于一定值就剪枝?
numClasses?& &
categoricalFeaturesInfo? 一个Map型的kv对& &k指层数?v呢?
还有其他的参数呢?
中级会员, 积分 239, 距离下一级还需 261 积分
论坛徽章:4
还有DecisionTreeModel如何保存?
它包含 (Node,algo)
split:Option[Split]
leftNode:Option[Node]
rightNode:Option[Node]
stats:Option[InfoemationGainStats]
都是什么意思?
中级会员, 积分 239, 距离下一级还需 261 积分
论坛徽章:4
drugC& & 1.0
drugB& & 2.0
drugY& & 3.0
drugX& & 4.0
drugA& & 5.0
result:---------------------------------------------------
23& && & 1& && & 3& && & 2& && & 0.792535& && & 0.031258& && & drugY& && & drugY& && &
47& && & 0& && & 1& && & 2& && & 0.739309& && & 0.056468& && & drugC& && & drugC& && &
47& && & 0& && & 1& && & 2& && & 0.697269& && & 0.068944& && & drugC& && & drugC& && &
28& && & 1& && & 2& && & 2& && & 0.563682& && & 0.072289& && & drugX& && & drugX& && &
61& && & 1& && & 1& && & 2& && & 0.559294& && & 0.030998& && & drugY& && & drugY& && &
22& && & 1& && & 2& && & 2& && & 0.676901& && & 0.078647& && & drugX& && & drugX& && &
49& && & 1& && & 2& && & 2& && & 0.789637& && & 0.048518& && & drugY& && & drugY& && &
41& && & 0& && & 1& && & 2& && & 0.766635& && & 0.069461& && & drugC& && & drugC& && &
60& && & 0& && & 2& && & 2& && & 0.777205& && & 0.05123& && & drugY& && & drugY& && &
43& && & 0& && & 1& && & 1& && & 0.526102& && & 0.027164& && & drugY& && & drugY& && &
47& && & 1& && & 1& && & 2& && & 0.896056& && & 0.076147& && & drugC& && & drugC& && &
34& && & 1& && & 3& && & 1& && & 0.667775& && & 0.034782& && & drugY& && & drugY& && &
43& && & 0& && & 1& && & 2& && & 0.626527& && & 0.040746& && & drugY& && & drugX& && &
74& && & 1& && & 1& && & 2& && & 0.792674& && & 0.037851& && & drugY& && & drugY& && &
50& && & 1& && & 2& && & 2& && & 0.82778& && & 0.065166& && & drugX& && & drugX& && &
16& && & 1& && & 3& && & 1& && & 0.833837& && & 0.053742& && & drugY& && & drugY& && &
69& && & 0& && & 1& && & 1& && & 0.848948& && & 0.074111& && & drugX& && & drugC& && &
43& && & 0& && & 3& && & 2& && & 0.656371& && & 0.046979& && & drugA& && & drugX& && &
23& && & 0& && & 1& && & 2& && & 0.55906& && & 0.076609& && & drugC& && & drugC& && &
32& && & 1& && & 3& && & 1& && & 0.643455& && & 0.024773& && & drugY& && & drugY& && &
algo:& &Classification&&depth&&3&&numNodes 13&&topNode&&id = 0, isLeaf = false, predict = 3.0, split = Some(Feature = 5, threshold = 0.055401, featureType =&&Continuous, categories = List()), stats = Some(gain = 0.535940, impurity = 1.968780, left impurity = 1.079100, right impurity = 1.911431, predict = 3.000000, prob = 0.455000)
&&algo&&Classification
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
& &节点编号 nodeID& && & 0& && && && &############################################
predict& && &3.0
isLeaf& && &false
numDescendants& &12
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &5
threshould& &&&0.055401
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.535940, impurity = 1.968780, left impurity = 1.079100, right impurity = 1.911431, predict = 3.000000, prob = 0.455000)
& &节点编号 nodeID& && & 1& && && && &############################################
predict& && &3.0
isLeaf& && &false
numDescendants& &4
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &5
threshould& &&&0.999996
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.244140, impurity = 1.079100, left impurity = 0.000000, right impurity = 1.600342, predict = 3.000000, prob = 0.782609)
& &节点编号 nodeID& && & 3& && && && &############################################
predict& && &3.0
isLeaf& && &true
numDescendants& &0
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &0
threshould& &&&1.0
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.000000, impurity = 0.000000, left impurity = 0.000000, right impurity = 0.000000, predict = 3.000000, prob = 1.000000)
& &节点编号 nodeID& && & 7& && && && &############################################
predict& && &0.0
isLeaf& && &true
numDescendants& &0
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &0
threshould& &&&1.0
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.000000, impurity = 0.000000, left impurity = 0.000000, right impurity = 0.000000, predict = 0.000000, prob = 0.000000)
& &节点编号 nodeID& && & 8& && && && &############################################
predict& && &0.0
isLeaf& && &true
numDescendants& &0
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &0
threshould& &&&1.0
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.000000, impurity = 0.000000, left impurity = 0.000000, right impurity = 0.000000, predict = 0.000000, prob = 0.000000)
& &节点编号 nodeID& && & 4& && && && &############################################
predict& && &3.0
isLeaf& && &false
numDescendants& &2
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &4
threshould& &&&0.684323
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.552067, impurity = 1.600342, left impurity = 1.926355, right impurity = 0.329846, predict = 3.000000, prob = 0.583333)
& &节点编号 nodeID& && & 9& && && && &############################################
predict& && &4.0
isLeaf& && &true
numDescendants& &0
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &2
threshould& &&&2.0
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.770148, impurity = 1.926355, left impurity = 1.122114, right impurity = 1.224394, predict = 4.000000, prob = 0.481481)
& &节点编号 nodeID& && & 10& && && && &############################################
predict& && &3.0
isLeaf& && &true
numDescendants& &0
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &5
threshould& &&&0.05098
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.121427, impurity = 0.329846, left impurity = 0.000000, right impurity = 0.764205, predict = 3.000000, prob = 0.939394)
& &节点编号 nodeID& && & 2& && && && &############################################
predict& && &4.0
isLeaf& && &false
numDescendants& &6
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &2
threshould& &&&2.0
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.955511, impurity = 1.911431, left impurity = 0.931007, right impurity = 0.997180, predict = 4.000000, prob = 0.458824)
& &节点编号 nodeID& && & 5& && && && &############################################
predict& && &4.0
isLeaf& && &false
numDescendants& &2
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &2
threshould& &&&1.0
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.324016, impurity = 0.931007, left impurity = 1.191501, right impurity = 0.000000, predict = 4.000000, prob = 0.735849)
& &节点编号 nodeID& && & 11& && && && &############################################
predict& && &1.0
isLeaf& && &true
numDescendants& &0
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &3
threshould& &&&1.0
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.999010, impurity = 1.191501, left impurity = 0.000000, right impurity = 0.371232, predict = 1.000000, prob = 0.481481)
& &节点编号 nodeID& && & 12& && && && &############################################
predict& && &4.0
isLeaf& && &true
numDescendants& &0
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &0
threshould& &&&1.0
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.000000, impurity = 0.000000, left impurity = 0.000000, right impurity = 0.000000, predict = 4.000000, prob = 1.000000)
& &节点编号 nodeID& && & 6& && && && &############################################
predict& && &5.0
isLeaf& && &false
numDescendants& &2
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &5
threshould& &&&0.000004
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.195619, impurity = 0.997180, left impurity = 0.684038, right impurity = 0.863121, predict = 5.000000, prob = 0.531250)
& &节点编号 nodeID& && & 13& && && && &############################################
predict& && &2.0
isLeaf& && &true
numDescendants& &0
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &4
threshould& &&&0.531191
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.257679, impurity = 0.684038, left impurity = 0.000000, right impurity = 0.468996, predict = 2.000000, prob = 0.818182)
& &节点编号 nodeID& && & 14& && && && &############################################
predict& && &5.0
isLeaf& && &true
numDescendants& &0
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &5
threshould& &&&0.070974
featureType& &&&Continuous
~~~~~~~~~~~~~输出status~~~~~~~~~~~~~~~~~~~~~~~~~
& && && & Some(gain = 0.400763, impurity = 0.863121, left impurity = 0.000000, right impurity = 0.970951, predict = 5.000000, prob = 0.714286)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
总节点数:& & 15
num大于0节点数& && &&&:& & 6
中级会员, 积分 239, 距离下一级还需 261 积分
论坛徽章:4
这个是我的程序运行 打印出所有Node信息后的结果
drug是目标字段
前面6列是输入字段
选择的是Classification&&Entropy
0.19是错误率
maxDepth 是树的深度&&我选的是3
那么共有节点数2*2*2+2*2+2+1=15
numClasses应该是输入字段的列数&&我用的是6
输出了从topnode往下形成的一个2叉树
中级会员, 积分 239, 距离下一级还需 261 积分
论坛徽章:4
那么看每个节点
&&节点编号 nodeID& && & 0& && && && &############################################
predict& && &3.0
isLeaf& && &false
numDescendants& &12
isTraceEnabled& & false
logName&&org.apache.spark.mllib.tree.model.Node
~~~~~~~~~~~~~输出split信息~~~~~~~~~~~~
categories:& && &0
Fearture:& &5
threshould& &&&0.055401
featureType& &&&Continuous
numDescendants&&表示该节点数目
isLeaf& && &表示数目是否为0
Fearture:& &5 表示第6列为判断字段
threshould& &&&0.055401 表示分隔点 及第六列
大于该值和小于该值的分为两组
中级会员, 积分 239, 距离下一级还需 261 积分
论坛徽章:4
其他的节点依次类推
那么每个节点其他信息是什么意思
featureType& &&&Continuous这个一直都是连续的么
我用其他方式输入也是这个值&&
isTraceEnabled& & false这个是什么
status里面的信息呢
还没找到每个节点里面每种预测字段类别的比例
中级会员, 积分 239, 距离下一级还需 261 积分
论坛徽章:4
status 里能通过增益和杂质推算出什么?
中级会员, 积分 239, 距离下一级还需 261 积分
论坛徽章:4
categoricalFeaturesInfo k是指层数
如果设置了值&&比如categorical.put(3,20)
那么表示第3(四)列是分类的&&并且分成了20类
分成的类别需提前知道
扫一扫加入本版微信群

我要回帖

更多关于 决策树的理解 的文章

 

随机推荐