课后题答案——第一章 绪论

目录

1.1: 

1.2: 

1.3: 

1.4: 

1.5:

参考文献:


1.1: 

解:

由于好瓜的3个属性值与坏瓜都不同。所以能与训练集一致的假设就有很多可能了,从最具体的入手,往上逐层抽象可得,从一般到特殊或是从特殊到一般对整个假设空间进行搜索,删除与正例1不一致的假设,或与反例4一致的假设,最终得到版本空间为:

1.2: 

解:

代码:

import numpy as np
import itertools as it
import time
def get_18(data): #把三维向量变为代表特征组合的18维向量
    a = np.zeros([2,3,3])
    if data[0] == 0:  #对于第一种属性为"*"的情况
        a1 = [1,2]
    else:
        a1 = [data[0]]
    if data[1] == 0:  #对于第二种属性为"*"的情况
        a2 = [1,2,3]
    else:
        a2 = [data[1]]
    if data[2] == 0:  #对于第三种属性为"*"的情况
        a3 = [1,2,3]
    else:
        a3 = [data[2]]
    for m1 in a1:
        for m2 in a2:
            for m3 in a3:
                a[m1-1][m2-1][m3-1] = 1
    a = a.flatten()
    return a           #得到了一个18维向量(0/1二值),代表18种特征组合
def turn_48_to_trible(num):
    # num in [0,47],把一个小于48的数字对应到一个三维数组中
    i = num//16
    j = num%16//4
    k = num%16%4
    return [i,j,k]
def from_48_to_18(num):  #把0-47的某个数唯一对应到某个18维向量
    data = turn_48_to_trible(num)
    a = get_18(data)
    return a
def main(k):
    hypo_list=[]
    for i in it.combinations(range(48),k):
    #开始对48取k的组合数进行穷举,i是一个k元数组,其中每个元素都是0-47中的某个数,代表(A1,A2,*)(B1,B2,B3,*)(C1,C2,C3,*)的一个组合
        subset = 0
        for j in range(k):
            p = i[j]
            subset = subset | hypo48_oct[p]
        hypo_list.append(subset)
        if len(hypo_list) > 5000000:
            hypo_list = list(set(hypo_list))  #set是集合,是对rset数组进行去重!
            #设置500W上限为了防止set操作时数组长度太长导致程序崩掉
    hypo_list = list(set(hypo_list)) #最终set操作一下得到最终结果
    print("正好包含%d个合取式的析合范式能表示 : %d 种假设" % (k, len(hypo_list)))
    return(hypo_list)

hypo48 = []
for i in range(48):
    h = from_48_to_18(i)
    hypo48.append(h)
hypo48_oct = []
for hypo in hypo48:
    hypo_bin = '0b'
    for i in hypo:
        hypo_bin = hypo_bin + str(int(i))
    hypo_oct = eval(hypo_bin)
    hypo48_oct.append(hypo_oct)

start = time.time()
hypo_stack = []
for k in range(18):
    k = k+1
    hypo_list = main(k)
    hypo_stack = hypo_stack + hypo_list
    hypo_stack = list(set(hypo_stack))
    end = time.time()
    print( "最多包含%d个合取式的析合范式能表示 : %d 种假设"%(k,len(hypo_stack)+1))  #加1是因为还有空集这个假设,即不存在好瓜
    print("用时:%.2fs"%(end-start))

题目是最多包含k个,所以我把空集假设,即好瓜不存在也算上了。

运行结果:

正好包含1个合取式的析合范式能表示 : 48 种假设

最多包含1个合取式的析合范式能表示 : 49 种假设

正好包含2个合取式的析合范式能表示 : 879 种假设

最多包含2个合取式的析合范式能表示 : 898 种假设

正好包含3个合取式的析合范式能表示 : 8223 种假设

最多包含3个合取式的析合范式能表示 : 8386 种假设

正好包含4个合取式的析合范式能表示 : 40911 种假设

最多包含4个合取式的析合范式能表示 : 41743 种假设

正好包含5个合取式的析合范式能表示 : 112962 种假设

最多包含5个合取式的析合范式能表示 : 115822 种假设

正好包含6个合取式的析合范式能表示 : 193998 种假设

最多包含6个合取式的析合范式能表示 : 201304 种假设

正好包含7个合取式的析合范式能表示 : 233640 种假设

最多包含7个合取式的析合范式能表示 : 248854 种假设

正好包含8个合取式的析合范式能表示 : 233424 种假设

最多包含8个合取式的析合范式能表示 : 260788 种假设

正好包含9个合取式的析合范式能表示 : 218394 种假设

最多包含9个合取式的析合范式能表示 : 262144 种假设

用时:8899.29s

1.3: 

解:

解答一:

在训练过程中选择满足最多样本的假设。也可以对每个假设,求得其准确率。准确率=(符合假设的条件且为好瓜的样例数量)/(符合假设的条件的样例数量)。选择准确率最高的假设。

另一解答:通常认为两个数据的属性越相近,则更倾向于将他们分为同一类。若相同属性出现了两种不同的分类,则认为它属于与他最临近几个数据的属性。也可以考虑同时去掉所有具有相同属性而不同分类的数据,留下的数据就是没误差的数据,但是可能会丢失部分信息。

解答二:

归纳偏好是在无法断定哪一个假设更好的情况下使用的。既然问题是存在噪声,那么如果能知道噪声的分布(例如高斯噪声),就可以将这些性能相同的假设对应的误差减去由噪声引起的部分,此时再使用奥卡姆剃刀原则或者多释原则来进行假设选择就好了。更常见的做法是引入正则化(regularization)项,在建立模型时避免拟合噪声。

1.4: 

解:

1.5:

解:

1.在向搜索引擎提交信息的阶段,能够从提交文本中进行信息提取,进行语义分析。
2.在搜索引擎进行信息匹配的阶段,能够提高问题与各个信息的匹配程度。
3.在向用户展示搜索结果的阶段,能够根据用户对结果感兴趣的程度进行排序。 

参考文献:

《机器学习》(西瓜书)课后习题答案 第一章-绪论 - 知乎 (zhihu.com)

机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课后答案(较完整)机器学习部分课
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值