周志华老师的《机器学习》(西瓜书)一书,没有公布答案,于是我们从网上搜集了各题目的答案,供大家参考。
参考答案 第一章 绪论
1.1.表1.1中若只包含编号为1,4的两个样例,试给出相应的版本空间。
表1.1 西瓜数据集(精简)
编号 | 色泽 | 根蒂 | 敲声 | 好瓜 |
1 | 青绿 | 蜷缩 | 浊响 | 是 |
2 | 乌黑 | 稍蜷 | 沉闷 | 否 |
答:
假设空间指的是问题所有假设组成的空间,我们可以把学习过程看作是在假设空间中搜索的过程,搜索目标是寻找与训练集“匹配”的假设。
假设数据集有 种属性,第 个属性可能的取值有 种,加上该属性的泛化取值 ,所以可能的假设有 。再用空集表示没有正例,假设空间中一共 种假设。现实问题中常面临很大的假设空间,我们可以寻找一个与训练集一致的假设集合,称之为版本空间。版本空间从假设空间剔除了与正例不一致和与反例一致的假设,它可以看成是对正例的最大泛化。版本空间的可以通过搜索假设空间来得到,这样需要遍历完整的假设空间。如果数据集中有正例,则可以先对一个正例进行最大泛化,得到 个假设,然后再对这些假设进行剔除操作,可以适当精简计算量。数据集有3个属性,每个属性2种取值,一共 种假设,分别为
- 1.色泽=青绿 根蒂=蜷缩 敲声=浊响
- 2.色泽=青绿 根蒂=蜷缩 敲声=沉闷
- 3.色泽=青绿 根蒂=稍蜷 敲声=浊响
- 4.色泽=青绿 根蒂=稍蜷 敲声=沉闷
- 5.色泽=乌黑 根蒂=蜷缩 敲声=浊响
- 6.色泽=乌黑 根蒂=蜷缩 敲声=沉闷
- 7.色泽=乌黑 根蒂=稍蜷 敲声=浊响
- 8.色泽=乌黑 根蒂=稍蜷 敲声=沉闷
- 9.色泽=青绿 根蒂=蜷缩 敲声=*
- 10.色泽=青绿 根蒂=稍蜷 敲声=*
- 11.色泽=乌黑 根蒂=蜷缩 敲声=*
- 12.色泽=乌黑 根蒂=稍蜷 敲声=*
- 13.色泽=青绿 根蒂=* 敲声=浊响
- 14.色泽=青绿 根蒂=* 敲声=沉闷
- 15.色泽=乌黑 根蒂=* 敲声=浊响
- 16.色泽=乌黑 根蒂=* 敲声=沉闷
- 17.色泽=* 根蒂=蜷缩 敲声=浊响
- 18.色泽=* 根蒂=蜷缩 敲声=沉闷
- 19.色泽=* 根蒂=稍蜷 敲声=浊响
- 20.色泽=* 根蒂=稍蜷 敲声=沉闷
- 21.色泽=青绿 根蒂=* 敲声=*
- 22.色泽=乌黑 根蒂=* 敲声=*
- 23.色泽=* 根蒂=蜷缩 敲声=*
- 24.色泽=* 根蒂=稍蜷 敲声=*
- 25.色泽=* 根蒂=* 敲声=浊响
- 26.色泽=* 根蒂=* 敲声=沉闷
- 27.色泽=* 根蒂=* 敲声=*
- 28.空集Ø
编号1的数据可以删除(不包含数据 )
编号1的数据可以删除 (包含了数据 )
所以版本空间为: - 1.色泽=青绿 根蒂=蜷缩 敲声=浊响
- 9.色泽=青绿 根蒂=蜷缩 敲声=*
- 13.色泽=青绿 根蒂=* 敲声=浊响
- 17.色泽=* 根蒂=蜷缩 敲声=浊响
- 21.色泽=青绿 根蒂=* 敲声=*
- 23.色泽=* 根蒂=蜷缩 敲声=*
- 25.色泽=* 根蒂=* 敲声=浊响
一般情况下版本空间是正例的泛化,但由于数据集中只有1个正例,所以在版本空间中依然包含了这个样本的假设(假设1)。
1.2.与使用单个合取式来进行假设表示相比,使用“析合范式”将使得假设空间具有更强的表示能力。例如:
会把“(色泽=青绿)^(根蒂=蜷缩)^(敲声=清脆”以及“(色泽=乌黑)^(根蒂=硬挺)^(敲声=沉闷)”都分类为“好瓜”,若使用最多包含k个合取式的析合范式来表达1.1的西瓜分类问题的假设空间,试估算有多少种可能的假设。
答:
表1.1包含4个样例,3种属性,假设空间中有3∗4∗4+1=493∗4∗4+1=49种假设。最多包含k个合取式来表达假设空间,显然k的最大值是49。
不考虑空集的话,剩下48种可能:
全部不泛化 2∗3∗3=182∗3∗3=18种假设
一个属性泛化:2∗3+3∗3+2∗3=212∗3+3∗3+2∗3=21种假设
两个属性泛化:2+3+3=82+3+3=8种假设
三属性泛化:1种假设
用这48种假设的排列组合来组成析合范式,展开序列为(也就是杨辉三角的一排):
1, 48, 1128, 17296,...... 17296, 1128, 48, 1 共49个数, 左边的1代表‘空’,一个都不选,右边的1代表全部选。
如果k=48,就是说最多采用48种合取式来组成析合范式,排除一种都不选的情况,就是2^48 - 1种。(2^48是根据二项式定理得的)
如果0<k<48,那就把展开序列的前k+1(因为展开序列从0开始数)项全部加起来再减1
如果指定了k的个数,那就是展开序列的第k+1(因为展开序列从0开始数)项的数
但是,这个结果得去重才行,因为泛化是对若干种假设的包含(包容),它本身不是某种假设。把泛化的 * 展开后,
就是若干种具体的假设。如果此题采取48,那么把 * 展开后,假设集合中一定有重复,而且一种具体假设还不止重复一次。
此题应该采用18种具体假设来计算, 就是:2^18 - 1
以下python代码没有考虑全部为空的情况(-1),且没有考虑去重。
# -*- coding: utf-8 -*-
def strige(max):#杨辉三角
S = [1]
while max:
N = S[:]
N.append(0)
S = [N[i-1]+N[i] for i in range(len(N))]
max -= 1
return S
def cal_Permutations(total_num =0,select_num= 0,most_num = 0):
re_total_num = 0
re_select_num = 0
re_most_num = 0
if total_num == 0:
raise ValueError,'pls indicate total numbers'
return
if select_num>total_num or most_num>total_num:
raise ValueError,'select_num or most_num can not bigger than total_num'
return
s = strige(total_num)
for x in s:
re_total_num += x
re_select_num = s[select_num]
for y in range(0,most_num+1):
re_most_num += s[y]
return {'input_parameter':{'total_num':total_num,'most_num':most_num,'select_num':select_num},'output_permutations':s,'output_usual_count':{'total_num':re_total_num,'most_num':re_most_num,'select_num':re_select_num}}
result = cal_Permutations(48,40,48)
print (result)
1.3.若数据包含噪声,则假设空间中可能不存在与所有训练样本都一致的假设。在此情形下,试设计一种归纳偏好用于假设选择。
答:
通常认为两个数据的属性越相近,则更倾向于将他们分为同一类。若相同属性出现了两种不同的分类,则认为它属于与他最临近几个数据的属性。也可以考虑同时去掉所有具有相同属性而不同分类的数据,留下的数据就是没误差的数据,但是可能会丢失部分信息。
4.本章1.4节在论述“没有免费的午餐”定理时,默认使用了“分类错误率”作为性能度量来对分类器进行评估。若换用其他性能度量 ,则式(1.1)将改为:
,
试证明没有免费的午餐”定理仍成立。
答:
还是考虑二分类问题,NFL首先要保证真是目标函数
均匀分布,对于有
个样本的二分类问题,显然f共有
种情况。其中一半是与假设一致的,也就
。
此时, ,应该是个常数,隐含的条件就该是(一个比较合理的充分条件)
。如果不满足, NFL 应该就不成立了(或者不那么容易证明)。
5.试述机器学习在互联网搜索的哪些环节起什么作用。
答:
1.最常见的,消息推送,比如某东经常说某些商品我可能会感兴趣,然而并没有。
2.网站相关度排行,通过点击量,网页内容进行综合分析。
3.图片搜索,现在大部分还是通过标签来搜索,不过基于像素的搜索也总会有的吧。