《机器学习》西瓜书习题解答 - 假设空间习题1.2
西瓜书习题解答 - 假设空间
📋 题目
1.2 第2题
习题1.2 给定包含两个西瓜样例的西瓜数据集,如表1.4所示,请结合教材1.3节对"假设空间"相关概念的介绍,回答以下问题:
表1.4 西瓜数据集,"好瓜"列为标记
| 编号 | 色泽 | 根蒂 | 好瓜 |
|---|---|---|---|
| 1 | 青绿 | 蜷缩 | 是 |
| 2 | 乌黑 | 硬挺 | 否 |
- 根据表1.4,计算假设空间(hypothesis space)的大小。
- 根据表1.4,给出相应的版本空间(version space)。
🎯 题目分析
考察知识点
这道题主要考察以下内容:
- 假设空间(Hypothesis Space)的概念与计算方法
- 版本空间(Version Space)的定义与构建
- 归纳学习中假设的表示方法
- 假设的泛化能力理解
题目意图
这道题是机器学习入门的基础题目,旨在帮助我们理解:在给定训练数据的情况下,学习算法实际上是在一个"假设空间"中进行搜索。通过一个极简的两样本数据集,让我们直观地体会到:即使数据很少,可能的假设数量也会随着属性数量呈指数级增长。同时,通过构建版本空间,理解什么是"与训练集一致的假设集合",这是后续学习PAC学习理论、归纳偏好等概念的基础。
📚 必备基础知识
在解题之前,我们需要先理解以下概念:
概念1:假设(Hypothesis)
定义: 假设是对学习目标的某种猜测或判断,通常表示为一个从输入空间到输出空间的映射函数。
通俗理解: 在西瓜问题中,一个假设就是一条判断规则,比如"如果色泽是青绿且根蒂是蜷缩,那么是好瓜"。这个规则可以用来预测新西瓜是否是好瓜。
数学表达: [h: X \rightarrow Y],其中[X]是属性空间,[Y]是标记空间。
概念2:假设空间(Hypothesis Space)
定义: 假设空间是所有可能假设构成的集合,记作[H]。它定义了学习算法的搜索范围。
通俗理解: 假设空间就是"所有可能的判断规则的集合"。在西瓜问题中,我们需要考虑所有可能的属性组合来构建判断规则。
计算方法: 对于每个属性,假设可以取该属性的任意一个值、或者不考虑该属性(用通配符*表示)、或者取空集∅(表示该属性无合法取值)。因此,对于有[d]个属性的问题,若第[i]个属性有[V_i]个可能取值,则假设空间大小为:
[|H| = \prod_{i=1}^{d}(V_i + 1) + 1]
其中,[+1]表示可以不选择该属性,最后的[+1]表示"空假设"(所有样本都判为反例)。
概念3:版本空间(Version Space)
定义: 版本空间是假设空间中与训练集一致的所有假设构成的子集。
通俗理解: 版本空间就是"在所有可能的规则中,那些能够正确分类训练数据的规则"。它是假设空间的一个子集,包含了所有"看起来正确"的假设。
数学表达: [VS = {h \in H | h(x_i) = y_i, \forall (x_i, y_i) \in D}],其中[D]是训练集。
💡 解题思路
解决这道题的整体思路是:
- 第一步: 识别数据集中的属性及其可能取值,理解假设的表示方式
- 第二步: 应用假设空间大小的计算公式,考虑每个属性的所有可能情况(包括通配符和空集)
- 第三步: 枚举所有可能的假设,筛选出与训练集一致的假设,构成版本空间
📝 详细解答
步骤一:分析数据集属性
要做什么:
明确数据集中有哪些属性,每个属性有多少个可能的取值。
具体过程:
从表1.4可以看出:
- 属性1:色泽,可能取值为{青绿, 乌黑},共2个取值
- 属性2:根蒂,可能取值为{蜷缩, 硬挺},共2个取值
- 标记:好瓜,取值为{是, 否}
为什么这样做:
只有明确了属性及其取值范围,才能确定假设的表示空间。每个假设本质上是对这些属性取值的一种组合选择。
步骤二:计算假设空间大小
要做什么:
应用公式计算所有可能假设的数量。
具体过程:
对于每个属性,假设可以:
- 选择该属性的某个具体值(色泽有2个值,根蒂有2个值)
- 选择通配符*(表示该属性取任何值都可以)
- 选择空集∅(表示该属性无合法取值,这会导致整个假设为空)
因此,每个属性有[V_i + 1]种选择方式:
- 色泽:2个具体值 + 1个通配符 = 3种选择
- 根蒂:2个具体值 + 1个通配符 = 3种选择
所有属性组合后,再加上"空假设"(表示没有任何样本被判为正例):
[|H| = (2+1) \times (2+1) + 1 = 3 \times 3 + 1 = 10]
为什么这样做:
这个计算方法考虑了归纳学习中假设表示的完整性。通配符*允许假设进行泛化(忽略某些属性),而空假设则表示"所有样本都不是好瓜"这种极端情况。这样的表示方式能够涵盖从最特殊到最一般的所有可能假设。
步骤三:枚举所有假设
要做什么:
列出假设空间中的所有10个假设。
具体过程:
用(色泽, 根蒂)的形式表示假设,*表示通配符:
- (青绿, 蜷缩) - 色泽是青绿且根蒂是蜷缩
- (青绿, 硬挺) - 色泽是青绿且根蒂是硬挺
- (青绿, *) - 色泽是青绿,根蒂任意
- (乌黑, 蜷缩) - 色泽是乌黑且根蒂是蜷缩
- (乌黑, 硬挺) - 色泽是乌黑且根蒂是硬挺
- (乌黑, *) - 色泽是乌黑,根蒂任意
- (*, 蜷缩) - 色泽任意,根蒂是蜷缩
- (*, 硬挺) - 色泽任意,根蒂是硬挺
- (*, *) - 色泽和根蒂都任意(所有样本都是好瓜)
- ∅ - 空假设(所有样本都不是好瓜)
为什么这样做:
完整枚举有助于我们在下一步中筛选版本空间,也能直观理解假设空间的结构。
步骤四:构建版本空间
要做什么:
从假设空间中筛选出与训练集一致的假设。
具体过程:
训练集包含:
- 样本1:(青绿, 蜷缩) → 好瓜
- 样本2:(乌黑, 硬挺) → 坏瓜
检查每个假设:
- (青绿, 蜷缩):预测样本1为正例✓,样本2为反例✓ → 一致
- (青绿, 硬挺):预测样本1为反例✗
- (青绿, *):预测样本1为正例✓,样本2为反例✓ → 一致
- (乌黑, 蜷缩):预测样本1为反例✗
- (乌黑, 硬挺):预测样本1为反例✓,样本2为正例✗
- (乌黑, *):预测样本1为反例✗
- (*, 蜷缩):预测样本1为正例✓,样本2为反例✓ → 一致
- (*, 硬挺):预测样本1为反例✗
- (*, *):预测所有样本为正例,样本2为正例✗
- ∅:预测所有样本为反例,样本1为反例✗
为什么这样做:
版本空间必须与训练数据完全一致,这是归纳学习的基本要求。只有与已知数据一致的假设,才有可能是正确的目标概念。
✅ 最终答案
问题1:假设空间的大小
假设空间的大小为 10。
计算过程:[(2+1) \times (2+1) + 1 = 10]
问题2:版本空间
版本空间包含以下 3个假设:
- (青绿, 蜷缩) - 最特殊假设:只有色泽是青绿且根蒂是蜷缩的是好瓜
- (青绿, *) - 中等泛化:只要色泽是青绿就是好瓜,不管根蒂如何
- (*, 蜷缩) - 中等泛化:只要根蒂是蜷缩就是好瓜,不管色泽如何
🔍 深入理解
直观解释
这个问题揭示了机器学习的一个核心困境:归纳偏好问题。
我们有3个假设都能完美解释训练数据,但它们对未来数据的预测是不同的:
- 假设1最保守:只认为(青绿, 蜷缩)是好瓜
- 假设2认为:所有青绿的西瓜都是好瓜
- 假设3认为:所有蜷缩根蒂的西瓜都是好瓜
如果来了一个新西瓜(青绿, 硬挺),假设1和3会说"不是好瓜",但假设2会说"是好瓜"。这就是为什么我们需要更多的训练数据,或者需要引入归纳偏好(如奥卡姆剃刀原则)来选择假设。
几何/图形理解
可以把假设空间想象成一个搜索空间,其中:
- 最特殊假设:(青绿, 蜷缩),覆盖范围最小
- 最一般假设:(*, *),覆盖所有样本
- 版本空间:介于两者之间,形成一个"边界"
版本空间实际上可以用两个边界来表示:
- S边界(最特殊边界):(青绿, 蜷缩)
- G边界(最一般边界):{(青绿, ), (, 蜷缩)}
这就是著名的**候选消除算法(Candidate Elimination)**的基础。
与其他知识点的联系
- 归纳偏好(第1.4节):当版本空间包含多个假设时,如何选择?这就需要归纳偏好。
- 奥卡姆剃刀原则:倾向于选择最简单的假设,在这里可能是(青绿, 蜷缩)。
- PAC学习理论:研究版本空间的大小与学习所需样本数量的关系。
- VC维:衡量假设空间的复杂度,与样本复杂度直接相关。
💎 关键要点总结
通过这道题,我们学到了:
-
核心概念: 假设空间的大小计算公式为[\prod_{i=1}^{d}(V_i + 1) + 1],其中[V_i]是第[i]个属性的取值数量,[+1]考虑通配符,最后的[+1]是空假设。
-
解题技巧: 构建版本空间时,要逐一检查每个假设是否与所有训练样本一致,既要正确分类正例,也要正确分类反例。
-
常见陷阱:
- 容易忘记加上"空假设",导致假设空间大小少算1
- 容易混淆"假设空间"和"版本空间",前者是所有可能假设,后者只包含与训练集一致的假设
- 在检查假设一致性时,容易只关注正例而忽略反例
-
拓展思考:
- 如果属性数量增加到6个(如教材表1.1),假设空间会有多大?
- 随着训练样本的增加,版本空间会如何变化?
- 版本空间为空意味着什么?
🤔 自我检验
做完这道题后,问问自己:
- ✓ 我能用自己的话解释什么是假设空间和版本空间吗?
- ✓ 我理解为什么计算公式中每个属性要[+1],最后还要再[+1]吗?
- ✓ 我能独立枚举出所有10个假设并解释每个假设的含义吗?
- ✓ 我能解释为什么版本空间中的3个假设都是"正确"的,但它们的泛化能力不同吗?
- ✓ 如果增加一个新样本(青绿, 硬挺)→坏瓜,我能快速判断版本空间会变成什么吗?
📌 相关习题推荐
如果想进一步巩固,可以尝试:
- 第1章 第1题 - 理解机器学习的基本术语,为理解假设空间打基础
- 第1章 第3题 - 关于归纳偏好的题目,探讨如何在版本空间中选择假设
- 教材表1.1的完整数据集 - 尝试计算17个样本、6个属性情况下的假设空间大小(答案是[4 \times 4 \times 4 \times 3 \times 3 \times 3 + 1 = 1729])
💬 学习建议
-
动手实践: 建议自己用Python编写一个简单程序,枚举所有假设并筛选版本空间,这样能加深理解。
-
可视化思维: 尝试画出假设空间的层次结构图,从最特殊到最一般,理解假设之间的泛化关系。
-
循序渐进: 这道题虽然简单,但包含了归纳学习的核心思想。建议在学习后续的决策树、神经网络等算法时,回想这个简单例子,思考它们的假设空间是什么样的。
-
关注边界情况: 思考极端情况(如版本空间为空、版本空间等于假设空间)的含义,这有助于理解学习算法的适用条件。
-
连接理论与实践: 这道题揭示了为什么深度学习需要大量数据——因为神经网络的假设空间极其庞大,需要足够的数据来缩小版本空间。
西瓜书习题解答 - 假设空间(通俗版)
🍉 先看一个生活场景
想象你是一个水果摊老板,你想教你的徒弟如何挑选好瓜。你只给他看了2个西瓜:
- 西瓜1:青绿色,蜷缩的瓜蒂 → 这是好瓜 ✓
- 西瓜2:乌黑色,硬挺的瓜蒂 → 这是坏瓜 ✗
现在问题来了:徒弟可能会总结出哪些规律?这些规律哪些是合理的?
📋 题目到底在问什么?
原题:
- 计算假设空间的大小
- 给出版本空间
翻译成人话:
- 徒弟可能想出多少种不同的"挑瓜规则"?(假设空间)
- 这些规则中,哪些能正确解释你给他看的那2个西瓜?(版本空间)
🎯 第一问:假设空间有多大?
什么是"假设"?
假设就是一条挑瓜规则。比如:
- “青绿色的瓜就是好瓜”
- “蜷缩瓜蒂的瓜就是好瓜”
- “青绿色且蜷缩瓜蒂的瓜才是好瓜”
徒弟可以怎么制定规则?
我们有2个特征可以观察:
- 色泽:可以是"青绿"或"乌黑"
- 根蒂:可以是"蜷缩"或"硬挺"
对于每个特征,徒弟在制定规则时有3种选择:
以"色泽"为例:
- 指定必须是"青绿"
- 指定必须是"乌黑"
- 不管什么颜色都行(用*表示,叫"通配符")
同样,对于"根蒂":
- 指定必须是"蜷缩"
- 指定必须是"硬挺"
- 不管什么样的根蒂都行(用*表示)
开始数数:能组合出多少种规则?
用(色泽, 根蒂)的格式来表示规则:
色泽选"青绿"时:
- (青绿, 蜷缩) - 必须是青绿+蜷缩
- (青绿, 硬挺) - 必须是青绿+硬挺
- (青绿, *) - 只要是青绿就行,根蒂随意
色泽选"乌黑"时:
4. (乌黑, 蜷缩) - 必须是乌黑+蜷缩
5. (乌黑, 硬挺) - 必须是乌黑+硬挺
6. (乌黑, *) - 只要是乌黑就行,根蒂随意
色泽选"*"(随意)时:
7. (, 蜷缩) - 只要根蒂是蜷缩就行,颜色随意
8. (, 硬挺) - 只要根蒂是硬挺就行,颜色随意
9. (*, *) - 什么都不管,所有瓜都是好瓜
还有一个特殊规则:
10. ∅(空集)- 所有瓜都不是好瓜
总共:3×3 + 1 = 10种规则
这就是为什么公式是 (2+1) × (2+1) + 1 = 10
- 2是每个特征的取值数
- +1是加上"不管这个特征"的选项
- 最后的+1是"空规则"
🎯 第二问:版本空间是什么?
什么是版本空间?
版本空间就是:在上面10种规则中,哪些能正确解释你给徒弟看的那2个西瓜?
逐个检验这10条规则
记住我们的训练数据:
- 西瓜1:(青绿, 蜷缩) → 好瓜 ✓
- 西瓜2:(乌黑, 硬挺) → 坏瓜 ✗
规则1:(青绿, 蜷缩)
- 看到西瓜1(青绿, 蜷缩):符合规则,判断为好瓜 ✓ 正确!
- 看到西瓜2(乌黑, 硬挺):不符合规则,判断为坏瓜 ✓ 正确!
- 结论:这条规则可以!✅
规则2:(青绿, 硬挺)
- 看到西瓜1(青绿, 蜷缩):不符合规则,判断为坏瓜 ✗ 错了!(实际是好瓜)
- 结论:这条规则不行 ❌
*规则3:(青绿, )
- 看到西瓜1(青绿, 蜷缩):青绿色,符合规则,判断为好瓜 ✓ 正确!
- 看到西瓜2(乌黑, 硬挺):乌黑色,不符合规则,判断为坏瓜 ✓ 正确!
- 结论:这条规则可以!✅
规则4:(乌黑, 蜷缩)
- 看到西瓜1(青绿, 蜷缩):不符合规则,判断为坏瓜 ✗ 错了!
- 结论:这条规则不行 ❌
规则5:(乌黑, 硬挺)
- 看到西瓜1(青绿, 蜷缩):不符合规则,判断为坏瓜 ✓ 正确!
- 看到西瓜2(乌黑, 硬挺):符合规则,判断为好瓜 ✗ 错了!(实际是坏瓜)
- 结论:这条规则不行 ❌
*规则6:(乌黑, )
- 看到西瓜1(青绿, 蜷缩):不符合规则,判断为坏瓜 ✗ 错了!
- 结论:这条规则不行 ❌
规则7:(*, 蜷缩)
- 看到西瓜1(青绿, 蜷缩):根蒂是蜷缩,符合规则,判断为好瓜 ✓ 正确!
- 看到西瓜2(乌黑, 硬挺):根蒂是硬挺,不符合规则,判断为坏瓜 ✓ 正确!
- 结论:这条规则可以!✅
规则8:(*, 硬挺)
- 看到西瓜1(青绿, 蜷缩):根蒂是蜷缩,不符合规则,判断为坏瓜 ✗ 错了!
- 结论:这条规则不行 ❌
*规则9:(*, )
- 所有瓜都判断为好瓜
- 看到西瓜2:判断为好瓜 ✗ 错了!(实际是坏瓜)
- 结论:这条规则不行 ❌
规则10:∅(空集)
- 所有瓜都判断为坏瓜
- 看到西瓜1:判断为坏瓜 ✗ 错了!(实际是好瓜)
- 结论:这条规则不行 ❌
✅ 最终答案
问题1:假设空间的大小 = 10
问题2:版本空间包含3条规则:
- (青绿, 蜷缩) - “只有青绿色且蜷缩根蒂的才是好瓜”
- *(青绿, ) - “只要是青绿色的就是好瓜,根蒂不重要”
- (*, 蜷缩) - “只要根蒂是蜷缩的就是好瓜,颜色不重要”
🤔 为什么会有3条规则都"正确"?
这就是机器学习的核心问题!
这3条规则对于你给徒弟看的那2个西瓜,都能做出正确判断。但是:
如果来了第3个西瓜:(青绿, 硬挺)
- 规则1说:不是好瓜(因为根蒂不是蜷缩)
- 规则2说:是好瓜(因为是青绿色)
- 规则3说:不是好瓜(因为根蒂不是蜷缩)
你看,它们的预测不一样!这就是为什么我们需要:
- 更多的训练数据:看更多西瓜,才能确定哪条规则真正正确
- 归纳偏好:比如"奥卡姆剃刀"原则,倾向于选择最简单的规则
💡 用一个类比帮你彻底理解
假设空间 = 所有可能的猜测
- 就像猜谜语,所有可能的答案
版本空间 = 符合已知线索的猜测
- 就像猜谜语时,根据已有的提示,缩小了答案范围
例子:
- 谜面:“一个水果,是红色的”
- 假设空间:苹果、草莓、西瓜、香蕉、葡萄…(所有水果)
- 版本空间:苹果、草莓、樱桃…(只有红色的水果)
如果再给一条线索:“很小,一口一个”
- 版本空间进一步缩小:草莓、樱桃、小番茄…
🎓 核心要点
- 假设空间:所有可能的规则(10个)
- 版本空间:能解释训练数据的规则(3个)
- 计算公式:(每个特征的取值数+1) 的连乘,最后再+1
- 关键理解:即使只有2个样本,也可能有多个"看起来正确"的规则
❓ 还有疑问吗?
如果您对以下内容还不清楚,请告诉我:
- 为什么每个特征要+1?(通配符*的作用)
- 为什么最后还要+1?(空集∅的含义)
- 如何判断一条规则是否"正确"?
- 为什么会有多条规则都正确?
- 这个题目和实际机器学习有什么关系?
请告诉我您具体哪里不理解,我可以用更多例子或更简单的方式解释!
更多推荐
所有评论(0)