《机器学习》习题 第 4 章

news2024/11/20 11:31:11

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 then
6:       将node标记为叶结点,令其类别标记为D中样本数最多的类; return;
7: end if

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

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

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

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


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

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

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


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

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

正确的做法是查看色泽为青绿的数据中,正例有多少,反例有多少,取最多的。 比如有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为根节点的一棵决策树

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/536930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux速通 常用基本命令

大部分摘自《Linux 命令行与shell脚本编程大全》该书,少部分参考自csdn博客 目录 一、基本的bash shell 命令 1、文件和目录列表 基本列表功能 修改输出信息 过滤输出列表 2、处理文件 3、处理目录 4、查看文件内容 查看整个文件 查看部分文件 二、更多的…

makefile 学习(1):C/C++ 编译过程

1. GCC 介绍 1.1 介绍 GCC 官方文档 https://gcc.gnu.org/onlinedocs/ 官方文档是最权威的,网上所有的答案都来自官方文档国内论坛参差不齐,找到好的答案比较花时间,并且很容易被错误的文档误导。所以推荐看官方文档靠谱点,并且…

mongodb设置用户名和密码

docker run --name mongodb -p 27017:27017 -v /opt/mongodb/data:/data/db -v /opt/mongodb/backup:/data/backup -d mongo --auth进入容器: docker -it exec 容器id /bin/bash进入mongo的控制台 mongosh设置用户名及密码 use admin db.createUser({ user: &…

dwg格式转换pdf,教大家几个简单方法

dwg格式转换pdf,今天教大家几个简单方法吧。因为有很多小伙伴私信小编,询问关于CAD格式转换的问题。我们知道,dwg是CAD格式的一种,只能使用CAD软件进行打开,这非常不方便。特别是在需要在手机或其他平台查看时&#xf…

IT项目管理小题计算总结【太原理工大学】

计算题小题应该就这些了吧&#xff0c;祝大家都高过&#xff01;>_< 目录 1. 求投资回收期 2. 求投资收益率 3. 求功能点 4. 成本预期值 5. 成本加固定 6. 期望时间及概率 7. 项目进度计算 8. 完工尚需估算 9. 合格率计算 10. 合同总价 11. 压缩工期 1. 求投资…

Hugging Face Transformers Agent

&#x1f917;Hugging Face Transformers Agent 就在两天前&#xff0c;&#x1f917;Hugging Face 发布了 Transformers Agent——一种利用自然语言从精选工具集合中选择工具并完成各种任务的代理。听着是不是似曾相识&#xff1f; 没错&#xff0c;Hugging Face Transformer…

APP软件的测试方法和工具

手机APP的使用已经非常普及&#xff0c;使用方便&#xff0c;因此越来越多的企业通过APP对外管理客户及产品&#xff0c;对内管理工作流程。这些APP有的是自研&#xff0c;有的是找专业的APP外包公司开发完成&#xff0c;开发完成后需要做详细的测试&#xff0c;今天和大家分享…

java版企业电子招投标系统源码 招采系统源码 spring boot+mybatis+前后端分离实现电子招投标系统

spring bootmybatis前后端分离实现电子招投标系统 电子招投标系统解决方案 招标面向的对象为供应商库中所有符合招标要求的供应商&#xff0c;当库中的供应商有一定积累的时候&#xff0c;会节省大量引入新供应商的时间。系统自动从供应商库中筛选符合招标要求的供应商&#x…

干货!12个程序员证书​,含金量超高

近来IT行业成为了发展前景好高薪资的大热门&#xff0c;越来越多的人选择参加各种各样的计算机考试&#xff0c;就是为了拿含金量高的证书&#xff0c;提升自己的职场竞争力。 那么程序员有哪些含金量高的证书可以考&#xff1f;下面云学姐将详细介绍一下含金量高的IT证书&…

游戏网站JS加密限制,用python来突破限制,进行逆向解密~

回来了回来了 好久没更新了 不过好像没啥人看文章了 难不成都去看视频学习了吗 今天线的无聊来分享分享如果用python来突破JS加密限制&#xff0c;进行逆向解密&#xff0c;来实现自动登录~ 逆向目标 目标&#xff1a;某 7 网游登录主页&#xff1a;aHR0cHM6Ly93d3cuMzcuY29…

【pytest】执行环境切换的两种解决方案

一、痛点分析 在实际企业的项目中&#xff0c;自动化测试的代码往往需要在不同的环境中进行切换&#xff0c;比如多套测试环境、预上线环境、UAT环境、线上环境等等&#xff0c;并且在DevOps理念中&#xff0c;往往自动化都会与Jenkins进行CI/CD&#xff0c;不论是定时执行策略…

深度解析Linux kernel同步机制(上篇)

在现代操作系统里&#xff0c;同一时间可能有多个内核执行流在执行&#xff0c;因此内核其实像多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问&#xff0c;尤其是在多处理器系统上&#xff0c;更需要一些同步机制来同步不同处理器上的执行单元对共享…

开源之夏 2023 | 欢迎报名openEuler sig-eBPF开发任务

开源之夏是中国科学院软件研究所联合openEuler发起的开源软件供应链点亮计划系列暑期活动&#xff0c;旨在鼓励在校学生积极参与开源软件的开发维护&#xff0c;促进优秀开源软件社区的蓬勃发展。活动联合各大开源社区&#xff0c;针对重要开源软件的开发与维护提供项目&#x…

Windows版Sketch软件也太好用了吧!

目前为止&#xff0c;Sketch 软件仅支持 macOS 系统&#xff0c;没有推出 Windows 版本&#xff0c;而且在短期内也不太可能推出。这是因为 Sketch 软件是使用独有的 OS X 技术和框架开发的&#xff0c;它依赖于许多 OS X 的核心功能&#xff0c;这些功能不容易轻松移植到其他操…

[MYAQL / Mariadb] 数据库学习-管理表记录2:匹配条件

管理表记录-匹配条件 匹配条件基本条件查询逻辑匹配&#xff08;多个条件判断&#xff09; 高级条件范围匹配模糊查询正则表达式&#xff1a; regexp四则运算 操作查询结果&#xff08;对查找到的数据再做处理&#xff09;排序分组&#xff08;一样的显示一次&#xff09;&…

FreeRTOS_系统配置

目录 1. FreeRTOSConfig.h 文件 2. "INCLUDE_" 开始的宏 2.1 INCLUDE_xSemaphoreGetMutexHolder 2.2 INCLUDE_xTaskAbortDelay 2.3 INCLUDE_vTaskDelay 2.4 INCLUDE_vTaskDelayUntil 2.5 INCLUDE_vTaskDelete 2.6 INCLUDE_xTaskGetCurrentTaskHandle 2.7 IN…

数据结构与算法(二)

一、数组 什么是数组&#xff1f; 数组&#xff1a;在内存中用一串连续的区域来存放一些值。数组是相同类型数据元素的有序集合 数组是由相同类型的元素的集合组成的数据结构 连续内存&#xff1a;JS的数组元素可以是任意类型&#xff0c;JS中的内存地址是不连续的 数组的…

工业互联网的新应用:高端装备的故障预测和健康管理

高端装备制造行业作为我国战略性新兴产业的重要组成部分&#xff0c;面临着产品复杂和生命周期长的挑战。为了提高装备的可靠性、可用性和维护效率&#xff0c;工业互联网技术在高端装备的故障预测和健康管理方面发挥了重要作用。 本文将探讨工业互联网在高端装备中故障预测和…

如何应用金字塔模型提高结构化表达能力

看一下结构化表达的定义&#xff1a; 结构化表达&#xff1a;是基于结构化思维&#xff0c;理清事物整理与部分之间关系、换位思考后&#xff0c;进行简洁、清晰和有信服力的表达&#xff0c;是一种让受众听得明白、记得清楚、产生认同的精益沟通方式。 结构化表达的基本原则是…

度娘教我influxdb,先搞一波在补理论

InfluxDb中的数据查询语法where子句 公司用的时序性数据库是influxdb&#xff0c;但是确实接触有点少。 心里话&#xff1a; 就是没接触过&#xff0c;度娘教教我。。。。 我咋回呢&#xff0c;现学吧&#xff0c;都是数据库&#xff0c;天下乌鸦一般黑然后就哟了以下&#xf…