决策树-缺失值和连续值处理及属性划分

       决策树是一个树结构(可以是二叉树或非二叉树),其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个输出类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

决策树学习通常包含这几个方面:特征选择、决策树生成、决策树剪枝、缺失值/异常值处理、决策树集成学习。

决策树-特征属性选择划分

决策树-缺失值和连续值处理及属性划分

决策树-不同的决策树模型对比

决策树-避免过拟合预剪枝和后剪枝对比区别

决策树-算法小结及常见问题


    

到目前为止我们仅讨论了基于离散属性来生成决策树,现实学习任务中常常遇到连续属性,以及数据中缺失问题。

目录

连续值处理

缺失值处理


连续值处理

基本思路:连续属性离散化,常见做法:二分法(这是C4.5决策树算法中采用的机制)。

对于连续属性a,我们可考察包括 n-1 个元素的候选划分集合(个属性值可形成 n-1 个候选点):

决策树-缺失值和连续值处理及属性划分_第1张图片

示例1:

决策树-缺失值和连续值处理及属性划分_第2张图片

示例2:

决策树-缺失值和连续值处理及属性划分_第3张图片

对于数据集中的属性“密度”,决策树开始学习时,根节点包含的17个训练样本在该属性上取值均不同。我们先把“密度”这些值从小到大排序:
图片描述
根据上面计算 的公式,可得:
图片描述
下面开始计算t 取不同值时的信息增益:
决策树-缺失值和连续值处理及属性划分_第4张图片

有一点需要注意的是 :与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。**如下图所示的一颗决策树,“含糖率”这个属性在根节点用了一次,后代结点也用了一次,只是两次划分点取值不同。
决策树-缺失值和连续值处理及属性划分_第5张图片

缺失值处理

       现实生活中的数据集中的样本通常在某系属性上是缺失的,如果属性值缺失的样本数量比较少,我们可以直接简单粗暴的把不完备的样本删除掉,但是如果有大量的样本都有属性值的缺失,那么就不能简单地删除,因为这样删除了大量的样本,对于机器学习模型而言损失了大量有用的信息,训练出来的模型性能会受到影响。

在决策树中处理含有缺失值的样本的时候,需要解决两个问题:

  • 如何在属性值缺失的情况下进行划分属性的选择?(比如“色泽”这个属性有的样本在该属性上的值是缺失的,那么该如何计算“色泽”的信息增益?)
  • 给定划分属性,若样本在该属性上的值是缺失的,那么该如何对这个样本进行划分?(即到底把这个样本划分到哪个结点里?)

 

决策树-缺失值和连续值处理及属性划分_第6张图片

示例1:

决策树-缺失值和连续值处理及属性划分_第7张图片

比较发现,“纹理”在所有属性中的信息增益值最大,因此,“纹理”被选为划分属性,用于对根节点进行划分。划分结果为:“纹理=稍糊”分支:{7,9,13,14,17},“纹理=清晰”分支:{1,2,3,4,5,6,15},“纹理=模糊”分支:{11,12,16}。如下图所示:

决策树-缺失值和连续值处理及属性划分_第8张图片

那么问题来了,编号为{8,10}的样本在“纹理”这个属性上是缺失的,该被划分到哪个分支里?前面讲过了,这两个样本会同时进入到三个分支里,只不过进入到每个分支后权重会被调整(前面也说过,在刚开始时每个样本的权重都初始化为1)。编号为8的样本进入到三个分支里后,权重分别调整为5/15,7/15 和 3/15;编号为10的样本同样的操作和权重。因此,经过第一次划分后的决策树如下图所示:

决策树-缺失值和连续值处理及属性划分_第9张图片

我们都知道构造决策树的过程是一个递归过程,原来不打算继续介绍递归过程了,但是因为权重发生了变化,所以继续介绍下递归过程。接下来,递归执行“纹理=稍糊”这个分支,样本集D = {7,8,9,10,13,14,17},共7个样本。如下图所示:

决策树-缺失值和连续值处理及属性划分_第10张图片

下面来看具体的计算过程:

决策树-缺失值和连续值处理及属性划分_第11张图片

对比能够发现属性“敲声”的星系增益值最大,因此选择“敲声”作为划分属性,划分后的决策树如下图所示:
决策树-缺失值和连续值处理及属性划分_第12张图片
接下来对分支{敲声 = 沉闷}即结点{9,14,17}进行划分,根据博客决策树(一)介绍的三种递归返回情形,结点{9,14,17}因为包含的样本全部属于同一类别,因此无需划分,直接把结点{9,14,17}标记为叶结点,如下图所示:
决策树-缺失值和连续值处理及属性划分_第13张图片
根据递归过程,接下来对分支“敲声 = 浊响”即结点{7,8,13}进行划分,计算过程和上面一样,虽然我也算过了,但是不再贴出来了,需要注意的是样本的权重是1/3。计算完比较能够知道属性“脐部”的信息增益值最大,因此选择“脐部”作为划分属性,划分完的决策树如下图所示:
决策树-缺失值和连续值处理及属性划分_第14张图片
接下来,继续,对于结点{13},因为就一个样本了,直接把该结点标记为叶结点,类别为“坏瓜”;递归到结点{7,8},因为样本类别相同,所以也标记为叶结点,类别为“好瓜”;递归到结点“脐部=平坦”,因为这个结点不包含任何样本为空集,因此,把该结点标记为叶结点,类别设置为父节点中多数类的类别,即为“好瓜”。因此“纹理=稍糊”这颗子树构造完毕,如下图所示:
决策树-缺失值和连续值处理及属性划分_第15张图片


接下来,只需递归的重复上述过程即可,即能训练出一颗完整的决策树,最终的决策树如下图所示(该图片来自西瓜书):
决策树-缺失值和连续值处理及属性划分_第16张图片
 

 

 

参考链接:https://www.imooc.com/article/257743
参考链接:https://blog.csdn.net/leaf_zizi/article/details/83503167
参考链接:https://www.cnblogs.com/lsm-boke/p/12260343.html
参考链接:https://blog.csdn.net/qq_35649945/article/details/96633602

 

你可能感兴趣的:(机器学习,机器学习,决策树,python,算法,数据挖掘)