「java决策树分类」决策树分类变量

博主:adminadmin 2022-12-29 20:15:10 1115

今天给各位分享java决策树分类的知识,其中也会对决策树分类变量进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

常见的几种决策树

基于条件概率 则分为正类,否则为负类。

如果瞎猜中的概率与特征选择出来的概率相差无几,那么就可以放弃该特征了。特征选择的标准是信息增益或信息增益比。

得知特征X的信息而使输出的分类Y的不确定性减少的程度。

条件熵:

信息增益: ,D是数据集,A是特征。

(1)计算数据集D的经验熵:

,k为第一级特征{纹理,色泽,触感}

(2)计算条件熵:

i为第二级特征{ 清晰,模糊,稍糊 },ik为第二级特征中的第一级特征{ 纹理 / 色泽 / 触感 }

(3) ,越大越好。

固有值: , 是第一级特征a下的第二级特征,固有值随V的个数增加而增加。

使用Gini系数替代ID3里的熵,Gini系数越小越均衡(被错分的概率低),说明该样本只属于同一类的概率(纯度)越高。

pk表示选中的样本属于k类别的概率,则这个样本被分错的概率是(1-pk)

基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率

在决策树公式中,叶子结点的取值对应的是 ,现在假设被划分到叶子结点 t 的数据为 ,那么在分类问题中,该叶子结点对应的取值为 里面占比最高的类别,即Majority of classes;在回归问题中,采用所有 值的平均,因为这样的话会使得 最小。

预剪枝使得很多分支没有展开,这不仅 降低了过拟合的风险 ,还显著 减少了决策树的训练时间开销和测试时间 。但是,有些分支虽当前不能提升泛化性。甚至可能导致泛化性暂时降低,但在其基础上进行后续划分却有可能导致显著提高,因此预剪枝的这种贪心本质,给决策树带来了 欠拟合的风险 。

后剪枝通常比预剪枝 保留更多的分支 ,其 欠拟合风险很小 ,因此后剪枝的 泛化性能 往往 优 于预剪枝决策树。但后剪枝过程是从底往上裁剪,因此其 训练时间开销 比前剪枝要 大 。

(1)C4.5还有ID3算法的剪枝:

叶节点的个数是|T|,t是树T的叶节点,该叶节点有 个样本点,其中第k类的样本点有 个,k=1,2,...K, 为叶节点t上的经验熵。

记 ,可得 , 表示模型对训练数据的预测误差。 为调整模型复杂度的参数, 表示只考虑拟合程度,不考虑复杂度。

(2)CART算法的剪枝:

后剪枝,进行交叉验证。

连续(非离散)特征可以将特征值从小到大排列然后取

按照 进行划分 { - ,+ },从而得到该情况下的信息增益。

(1)如何在属性值缺失的情况下进行划分属性的选择?(创建决策树的时候怎么计算缺失值存在下的信息增益,选择正确的属性)

(2)给定划分属性,若样本在该属性上的值是缺失的,那么该如何对这个样本进行划分?(在分类过程中有缺失值的话怎么进行划分)

无缺失样本所占比例:

无缺失样本中第k类所占比例:

无缺失样本中在特征a上取值为 的样本所占比例:

最后得到了推广了的公式:

一般的决策树分类边界由若干个与坐标轴平行的分段组成:

判断过程:密度 - 含糖率 - 密度 - 含糖率...

多变量决策树有d个属性对应d维空间的一个数据点,对样本分类表示在坐标空间中找到不同样本之间的分类边界。

“多变量决策树”能实现斜的划分边界,使决策树模型简化。在多变量决策树的学习过程中,不是为非叶结点寻找最优划分属性,而是试图建立合适的线性分类器:

可以通过最小二乘或者嵌入神经网络进一步优化。

增量学习:根据新样本可对学得的模型进行调整适应当前形势,而不需要重新训练。如ID4,ID5R还有ITI

和熵模型的度量方式比,基尼系数对应的误差有多大呢?对于二类分类,基尼系数和熵之半的曲线如下:

从上图可以看出,基尼系数和熵之半的曲线非常接近,因此,基尼系数可以做为熵模型的一个近似替代。而CART分类树算法就是使用的基尼系数来选择决策树的特征。为了进一步简化,CART分类树算法每次仅仅对某个特征的值进行二分,而不是多分,这样CART分类树算法建立起来的是二叉树,而不是多叉树。

第三章 决策树分类

[TOC]

分类:确定对象属于哪个 预定义 的目标类(目标类的总体是已知的)。分类问题中,类标号必须是离散属性,这也是区分分类和回归(regression,回归的目标属性是连续的)的关键特征。

分类,classification,通过学习训练样本得到一个目标函数f(target function),把属性集x映射到预先定义的类标号y。

分类模型(classification model)有两个目的:

分类技术特点:适合描述或预测二元或标称类型的数据集,对序数分类不太有效,因为分类技术不考虑隐含在目标类中的序号关系。(即分类器只负责区分元素们属于哪一类,对于某一类中的元素之间的序关系不做表达)

分类方法:决策树分类法、基于规则的分类法、神经网络、支持向量机和朴素贝叶斯分类法。殊途同归,都是通过学习算法(learning algorithm)从训练数据集提炼一种模型拟合输入数据的类标号和属性之间的联系。

泛化 :在模型的评估中,泛化是一个重要的概念,它表达通过已知数据建立的模型在应用到未知数据上的时候的有效性。这个泛可以理解为广泛、扩大,从特定的已有的数据一般化到所有的未知的数据。

分类过程:$$训练集(training set)\rightarrow学习模型\rightarrow模型\rightarrow应用模型\rightarrow检验集(test set)$$

模型评估 :通过正确和错误的记录数量评估,列一个混淆矩阵(confusion matrix)可清晰算得相应的新能度量(performance metric)。

分类模型误差:

模型拟合不足(model underfitting),训练和泛化误差都很大,原因是模型尚未学到数据的真实结构。

模型过分拟合(model overfitting),树的规模持续变大,训练误差持续降低,但泛化误差开始增大。

泛化误差估计

处理(避免)决策树归纳中的过分拟合

本章描述对某一个分类器的性能的评估方法。

本章描述两个或多个分类器之间的对比方法,针对不同分类方法在不同规模的数据集上的准确性比较。即得到不同分类方法在忽略数据量下的性能对比。

任务一:决策树-最佳属性划分度量-连续属性划分算法,实现二分划分点选择算法,考虑连续属性的多路划分的划分点选择算法【深入研究切入点:C4.5算法】。

任务二:决策树-决策树归纳算法

任务三:尝试树剪枝

决策树标签怎么分成10类

决策树标签分成10类的方法是:使用决策树构建然后对决策树进行节点分割来分为10类

步骤1:将所有的数据看成是一个节点,进入步骤2。

步骤2:从所有的数据特征中挑选一个最优数据特征对节点进行分割,使得分割后的子集有一个在当前条件下最好的分类,进入步骤3。

步骤3:生成若干孩子节点,对每一个孩子节点进行判断,如果满足停止分裂的条件,进入步骤4否则,进入步骤2。

步骤4:设置该节点是子节点,其输出的结果为该节点数量占比最大的类别。

决策树的特点是:

优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。

 缺点:可能会产生过度匹配的问题(需要剪枝)。 适用数据类型:数值型和标称型。

决策树在对中间节点进行分裂的时候,是选择最优分裂结果的属性进行分裂,决策树使用信息增益或者信息增益率作为选择属性的依据。

信息增益表示划分数据前后信息发生的变化,获得信息增益最高的特征就是最好的选择。

决策树的使用之分类树

5.2 决策树的基本流程可以简单概括为:

5.3 DecisionTreeClassifier参数之random_state splitter

random_state用来设置分枝中随机模式的参数,默认为none,在高维度时随机性会表现更明显。输入任意整数,会一直长出同一棵树,让模型稳定下来。

splitter有两种输入值,输入”best",决策树在分枝时虽然随机,但是还是会优先选择更重要的特征进行分枝(重要性可以通过属性feature_importances_查看),输入“random",决策树在分枝时会更加随机,树会因为含有更多的不必要信息而更深更大,并因这些不必要信息而降低对训练集的拟合。这也是防止过拟合的一种方式。当你预测到你的模型会过拟合,用这两个参数来帮助你降低树建成之后过拟合的可能性。当然,树一旦建成,我们依然是使用剪枝参数来防止过拟合。

5.4 剪枝参数

我们收集的样本数据不可能和整体的状况完全一致,因此当一棵决策树对训练数据有了过于优秀的解释性,它找出的规则必然包含了训练样本中的噪声,并使它对 未知数据 的拟合程度不足。(过拟合指的是在训练集上表现很好,在测试集上却表现糟糕)

为了让决策树有更好的泛化性,我们要对决策树进行剪枝。剪枝策略对决策树的影响巨大,正确的剪枝策略是优化决策树算法的核心。sklearn为我们提供了不同的剪枝策略:

5.4.1 max_depth

限制树的最大深度,超过设定深度的树枝全部剪掉。这是用得最广泛的剪枝参数,在高维度低样本量时非常有效。

5.4.2 min_samples_leaf

min_samples_leaf 限定,一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练本,否则分枝就不会发生,或者分枝会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发生。一般搭配max_depth使用,在回归树中有神奇的效果,可以让模型变得更加平滑。这个参数的数量设置得太小会引起过拟合,设置得太大就会阻止模型学习数据。一般来说,建议从=5开始使用。如果叶节点中含有的样本量变化很大,建议输入浮点数作为样本量的百分比来使用。对于类别不多的分类问题,=1通常就是最佳选择。

5.4.3 min_samples_split

min_samples_split限定,一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则分枝就不会发生。

5.4.4 max_features

max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。和max_depth异曲同工,max_features是用来限制高维度数据的过拟合的剪枝参数,但其方法比较暴力,是直接限制可以使用的特征数量而强行使决策树停下的参数,在不知道决策树中的各个特征的重要性的情况下,强行设定这个参数可能会导致模型学习不足。如果希望通过降维的方式防止过拟合,建议使用PCA,ICA或者特征选择模块中的降维算法。

5.4.5 min_impurity_decrease

min_impurity_decrease限制信息增益的大小,信息增益小于设定数值的分枝不会发生。这是在0.19版本种更新的功能,在0.19版本之前时使用min_impurity_split。

5.4.6 确认最优的剪枝参数

我们要使用确定超参数的曲线来进行判断了,继续使用我们已经训练好的决策树模型clf。超参数的学习曲线,是一条以超参数的取值为横坐标,模型的度量指标为纵坐标的曲线,它是用来衡量不同超参数取值下模型的表现的线。在我们建好的决策树里,我们的模型度量指标就是score。

5.5 目标权重参数

5.5.1 class_weight

完成样本标签平衡的参数。样本不平衡是指在一组数据集中,标签的一类天生占有很大的比例。因此我们要使用class_weight参数对样本标签进行一定的均衡,给少量的标签更多的权重,让模型更偏向少数类,向捕获少数类的方向建模。该参数默认None,此模式表示自动给与数据集中的所有标签相同的权重。

5.5.2 min_weight_fraction_leaf

有了权重之后,样本量就不再是单纯地记录数目,而是受输入的权重影响了,因此这时候剪枝,就需要搭配min_ weight_fraction_leaf这个基于权重的剪枝参数来使用。如果样本是加权的,则使用基于权重的预修剪标准来更容易优化树结构,这确保叶节点至少包含样本权重的总和的一小部分。

5.6 红酒数据实例

1)加载红酒数据集

2)查看标签数据

3)查看标签名称

4)划分训练集和测试集,random_state可以使拆分出的训练集、测试集是相同的

5)建立决策树,训练模型

6)导出决策树结构

7)查看每个特征的重要性

决策树(decisionTree)

决策树(decisionTree)是一种基本的分类和回归方法。此文仅讨论用于分类方法的决策树。

决策树的学习通常分为3步:

决策树的学习的思想主要源于

定义决策树 :

分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点又分为内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。

形如:

其中,圆表示内部结点,方框表示叶结点。

if-then规则,简单来说就是 :

举例:对于一个苹果,外表是红色的是红苹果,外表是绿色的是青苹果。可以表示为:

if-then规则集合具有一个重要的性质:

这就是说每一个实例都被一条路径或规则覆盖,并且只被一条路径或规则覆盖。这里所谓的覆盖是指实例的特征与路径上的特征一致,或实例满足规则的条件。

给定数据集:

其中, 为输入实例(特征向量),含有 个特征, 为类标记, , 为样本容量。

目标 :

根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确分类。

特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率。

如果我们利用某一个特征进行分类的结果与随机分类的结果没什么很大的差别的话,则称这个特征没有分类能力。

那么问题来了,怎么选择特征呢?

通常特征选择的准则是

下面通过例子来说明一下。

目标 :

希望通过所给的训练集数据,学习一个贷款申请的决策树。当新的客户提出贷款申请的时候,根据申请人的特征利用决策树决定是否批准贷款申请。

可见这里共有4个特征可供选择。用特征选择的准则是 。接下来介绍 。

熵是表示随机变量不确定性的度量。

设 是一个取有限个值的随机变量,其概率分布为

则随机变量 的熵定义为

若 ,则定义 。通常对数取以2为底,或是以 为底,熵的单位分布为比特(bit)或是纳特(nat)。

由上式可知,熵只依赖 的分布,而已 的值无关,则 的熵还可记作 ,即

则从定义可知

当随机变量只取2个值的时候,例如 时, 的分布为

熵为

熵随概率变化的曲线为

当 或 时 ,随机变量完全没有不确定性,当 时 ,熵取值最大,随机变量不确定性最大。

设随机变量 ,其联合概率分布

条件熵 表示在已知随机变量 的条件下随机变量 的不确定性。随机变量 给定条件下随机变量 的条件熵(conditional entropy),定义为 给定条件下 的条件概率分布的熵对 的数学期望

信息增益

特征 对训练集 的信息增益

根据信息增益准则的特征选择方法:对训练集 ,计算其每个特征的信息增益,并比较大小,选择信息增益最大的特征。

前期定义各个量:

信息增益的算法

输入:训练集 和特征 ;

输出:特征 对训练集 的信息增益

回看刚才的例子,

解 :

这一次我很无聊的想用一下.csv文件类型。

所以训练数据集部分如下,我存在一个loan.csv文件里了。对.csv文件的各种处理一般由python的pandas模块完成。

第一步,导入相关模块

第二步,读入数据

若是使用jupyter,可以即刻查看一下数据,和数据标签。

可以看出,除了'ID'之外前4个标签 'age', 'work', 'own house', 'Credit conditions'为我们一直在说的特征 ,而最后一个标签'label'是我们所说的类 ,所以要处理一下这些标签,

第三步,计算训练集 的熵 :

这里会用到pandas的一个统计数据的功能, groupby(by = [列]).groups ,将数据统计成字典的形式,这么说比较抽象,看下图,将我们用pandas读入的data,分为2类, , Index 表示索引,即第0,1,4,5,6,14(python计数从0开始)个数据的 ,第2,3,7,8,9,10,11,12,13个数据的 .

那么计算训练集 的熵

第四步,计算特征 对数据集 的条件熵

第五步 ,计算信息增益

输入:训练集 和特征 和阈值 ;

输出:决策树

(1) 中所有实例都属于同一类 ,则 为单结点树,并将类 作为该结点的类标记,返回 ;

(2) 若 ,则 为单结点树,并将 中实例数最大的类 作为该结点的类标记,返回 ;

(3)否则,按照上述信息增益的算法,计算 中各个特征对 的信息增益,选择信息增益最大的特征 ;

(4)如果特征 的信息增益小于阈值 ,将置 为单结点树,并将 中实例数最大的类 作为该结点的类标记,返回 ;

(5)否则,对 的每一个可能值 ,依 将 分割为若干非空子集 ,将 中实例数最大的类 作为该结点的类标记,构建子结点,由结点及其子结点构成树 ,返回 ;

(6)对第 个子结点,以 为训练集,以 为特征集,递归的调用步骤(1)~步骤(5),得到子树 ,返回 。

对上述表的训练集数据,利用ID3算法建立决策树。

解 :

第一次迭代 :

【特征:有自己的房子】将数据集 划分为2个子集 (有自己的房子)和 (没有自己的房子),观察一下 和 :

由于 所有实例都属于同一类 ,所以它是一个叶结点,结点的类标记为“是”。

对于 则需从特征 中选择新的特征。

第二次迭代 :

将 看作新的数据集 。【特征:有工作】有2个可能值,划分为2个子集 (有工作)和 (没有工作),观察一下 和 :

由于 所有实例都属于同一类 ,所以它是一个叶结点,结点的类标记为“是”。

决策树分类的原理

决策树是通过一系列规则对数据进行分类的过程。它提供一种在什么条件下会得到什么值的类似规则的方法。决策树分为分类树和回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树。

如果不考虑效率等,那么样本所有特征的判断级联起来终会将某一个样本分到一个类终止块上。实际上,样本所有特征中有一些特征在分类时起到决定性作用,决策树的构造过程就是找到这些具有决定性作用的特征,根据其决定性程度来构造一个倒立的树--决定性作用最大的那个特征作为根节点,然后递归找到各分支下子数据集中次大的决定性特征,直至子数据集中所有数据都属于同一类。所以,构造决策树的过程本质上就是根据数据特征将数据集分类的递归过程,我们需要解决的第一个问题就是,当前数据集上哪个特征在划分数据分类时起决定性作用。

关于java决策树分类和决策树分类变量的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。