《机器学习》习题 第 4 章

文章讨论了决策树的构建过程,证明了不含冲突数据的训练集必然存在与其一致的决策树,并分析了以最小训练误差为准则的缺陷,可能导致过拟合,降低了泛化能力。此外,还提到了信息熵在划分选择中的作用以及如何避免递归导致的深度问题。
摘要由CSDN通过智能技术生成

4.1

试证明对于不含冲突数据 (即特征向量完全相同但标记不同) 的训练集, 必存在与训练集一致 (即训练误差为 0)的决策树.

答案:

假设不存在与训练集一致的决策树,那么训练集训练得到的决策树至少有一个节点上存在无法划分的多个数据(若节点上没有冲突数据,那么总是能够将数据分开的)。这与前提-不含冲突数据 矛盾,因此必存在与训练集一致的决策树

解释:

解决这个问题需要先理解构建决策树过程中的2--7行:

输入:训练集D = {(x1, y1), (x2, y2), (x3, y3),..., (xm, ym)};
      属性集A = {a1, a2,..., ad}.
过程:函数TreeGenerate(D, A)

1: 生成结点node;
2: if D中样本全属于同一类别C then
3:       将node标记为C类叶节点; return;
4: end if
5: if A = NULL OR D中样本在A上取值相同 then
6:       将node标记为叶结点,令其类别标记为D中样本数最多的类; return;
7: end if
8: 从A中选择最优划分属性a*;
9: for a*中的每一个值a*v do
10:       为node生成一个分支,令Dv表示D中在a*上取值为a*v的样本子集;
11:       if Dv为空 then
12:             将分支结点标记为叶结点,其类别标记为D中样本最多的类; return;
13:       else
14:             以TreeGenerate(Dv, A\{a*})为分支结点
15:       end if
16: end for

决策树的生成是一个递归过程,有三种情形导致递归返回

1.当前结点所包含的样本都属于同一类别,无需划分

2: if D中样本全属于同一类别C then
3:       将node标记为C类叶节点; return;
4: end if

做法: 将当前结点标记为叶结点,并令该类别为结点的类别

这个很好理解,划分后的数据集的类别都是好瓜,那么再继续划分就没有意义了


2.所有样本在所有属性上取值相同,无法划分

5: if A = NULL or D中样本在A上取值相同 then
6:       将node标记为叶结点,令其类别标记为D中样本数最多的类; return;
7: end if

做法:将当前结点标记为叶结点,但将其类别设定为父结点所含样本最多的类别(利用当前结点的后验分布)

这个不太好理解,意思是:西瓜A和西瓜B的所有属性一模一样,这俩西瓜都是色泽:浅白,敲声:沉闷,纹理:清晰。但是西瓜A是好瓜,西瓜B是坏瓜。比如有10个西瓜都是属性一模一样的,4好瓜,6坏瓜,那么这个结点就归类为坏瓜。

代码中的条件是A==NULL,A代表的意思是属性集合,举例:A={根蒂,敲声,色泽}。

在实现决策树的过程中,我们每次选出的一个最优属性,比如色泽,那么在色泽结点的子树中,这些子树的数据集和属性集合是不包含色泽的。色泽结点的A={根蒂,敲声}。

决策树的树高每加一,那么属性集合A就要减一,当A==NULL时,代表在这个结点除所有属性都用于描述这个西瓜,即题干中的特征向量完全相同。

(因为西瓜数据集的属性是离散属性,所以在子节点不会出现祖先结点的属性,如果属性是连续属性,那么在子节点可能会出现祖先结点的属性。后面的题目对这个有具体解释

这种情况会导致验证训练集时存在误差,因为4个好瓜被归类为了坏瓜

这种情况即题干中的冲突数据 (即特征向量完全相同但标记不同)


3.当前结点包含的样本集合为空,不能划分

做法:将当前结点标记为叶结点,但将其类别设定为父结点所含样本最多的类别(把父结点的样本分布作为当前结点的先验分布)


这个情况是这样的:假如我们划分到纹理时,一般情况数据集是既包含清晰和模糊这两种情况的

 但是,有时候数据集存在只包含清晰这种情况,这时候我们就不能这样划分:

正确的做法是查看父节点,也就是纹理这个结点的数据中,正例有多少,反例有多少,取最多的。 比如这个结点有10个西瓜,4好瓜,6坏瓜,那么这个模糊结点就归类为坏瓜。

 

 

这种情况会导致验证训练集时存在误差

这种情况即题干中的冲突数据 (即特征向量完全相同但标记不同)


回到这道题,这道题是:

试证明对于不含冲突数据 (即特征向量完全相同但标记不同) 的训练集, 必存在与训练集一致 (即训练误差为 0)的决策树.

如果没有冲突数据,那么在运行中就不会执行

5: if A = NULL OR D中样本在A上取值相同 then
6:       将node标记为叶结点,令其类别标记为D中样本数最多的类; return;
7: end if

这样就不会产生误差,所以训练误差为0

题型:判断题

只要数据集不存在冲突。一棵决策树通常可以完美(100%)拟合训练数据。此时,这棵树的泛化误差也达到了最优值。T

4.2

试析使用 “最小训练误差” 作为决策树划分选择准则的缺陷.

答案:

若以最小训练误差作为决策树划分的依据,由于训练集和真是情况总是会存在一定偏差,这使得这样得到的决策树会存在过拟合的情况,对于未知的数据的泛化能力较差。因此最小训练误差不适合用来作为决策树划分的依据。

解释:

4.1的情况就是以最小训练误差作为决策树划分的依据,训练误差达到了0,但是现实情况中不是所有的西瓜都是这样的,这种做法导致了过拟合,对于未知的数据的泛化能力较差。

4.3
试编程实现基于信息熵进行划分选择的决策树算法, 并为表 4.3 4.34.3 中数据生成一棵决策树.

机器学习算法的Python实现 (2):ID3决策树

《机器学习》西瓜书 第 4 章 编程实例

4.7
图 4.2是一种递归算法, 若面临巨量数据, 则决策树的层数会很深, 使用递归方法易导致 “栈” 溢出. 试使用 “队列” 数据结构, 以参数 MaxDepth控制树的最大深度, 写出与图 4.2等价、但不使用递归的决策树生成算法.

图4.2

输入:训练集D = {(x1, y1), (x2, y2), (x3, y3),..., (xm, ym)};
      属性集A = {a1, a2,..., ad}.
过程:函数TreeGenerate(D, A)

1: 生成结点node;
2: if D中样本全属于同一类别C then
3:       将node标记为C类叶节点; return;
4: end if
5: if A = NULL OR D中样本在A上取值相同 then
6:       将node标记为叶结点,令其类别标记为D中样本数最多的类; return;
7: end if
8: 从A中选择最优划分属性a*;
9: for a*中的每一个值a*v do
10:       为node生成一个分支,令Dv表示D中在a*上取值为a*v的样本子集;
11:       if Dv为空 then
12:             将分支结点标记为叶结点,其类别标记为D中样本最多的类; return;
13:       else
14:             以TreeGenerate(Dv, A\{a*})为分支结点
15:       end if
16: end for

算法:

# 输入: 训练集 D
#      属性集 A
array[0] = [D, A]
for D, A in array:
    生成节点node;
    if D中样本全属于同一类别C:
        将node标记为C类叶节点
        continue
    elif A = 空 or D中样本在A上取值相同:
        将node标记为叶节点, 其类别标记为D中样本数最多的类
        continue
    从A中选择最优划分属性a
    for a_v in a每个取值:
        为node生成一个分支, 令D_v表示D在a上取值为a_v的样本子集
        if D_v == null:
            将分支节点标记为叶节点, 其类别标记为D中样本最多的类
            continue
        elif
            array.append([D_v, A \ {a}])
# 输出: 以node为根节点的一棵决策树

1.一棵决策树的不同节点处,不能存在重复子树。F

知识点:连续属性  p85

对于决策树算法而言,如果说上一节点为分类型变量的话,下一节点不可以使用这个属性,如图outlook为分类型变量,如果下面没有分完是不可以再使用了,

但是如果上一节点是连续型变量,好比是humidity这个变量,如果下面的yes项并没有分完是还可以在yes节点使用humidity这个变量继续分,只不过是需要在小于70的这个连续变量中重新确定阈值在划分。(而这个windy虽然在上面的别的枝干使用过了,但是如果在yes那个点还没分完,也可以考虑使用) 

2.以下哪项关于决策树的说法是错误的 (C)

A. 冗余属性不会对决策树的准确率造成不利的影响

B. 子树可能在决策树中重复多次

C. 决策树算法对于噪声的干扰非常敏感

D. 寻找最佳决策树是NP完全问题

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值