西瓜书第一章课后题答案(一)

1.1

针对西瓜分类分题进行讲解

属性: 3个属性

色泽:(青绿,乌黑,浅白)

根蒂:(蜷缩,硬挺,稍蜷)

敲声:(浊响,清脆,沉闷)

假设空间: 属性所有可能取值组成的可能的样本

假设空间的个数:4 * 4 * 4+1 = 49个,

求法:这三个值组成一个向量,这个向量的每个属性的可能

取值的集合就是假设空间。每个属性可以取通配符 *,为都符合

的意思,上面的+1是存在 Ø的情况

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 色泽=*,根蒂=稍蜷,敲声=浊响

29 色泽=*,根蒂=稍蜷,敲声=清脆

30 色泽=*,根蒂=稍蜷,敲声=沉闷

31 色泽=青绿,根蒂=蜷缩,敲声=浊响

32 色泽=青绿,根蒂=蜷缩,敲声=清脆

33 色泽=青绿,根蒂=蜷缩,敲声=沉闷

34 色泽=青绿,根蒂=硬挺,敲声=浊响

35 色泽=青绿,根蒂=硬挺,敲声=清脆

36 色泽=青绿,根蒂=硬挺,敲声=沉闷

37 色泽=青绿,根蒂=稍蜷,敲声=浊响

38 色泽=青绿,根蒂=稍蜷,敲声=清脆

39 色泽=青绿,根蒂=稍蜷,敲声=沉闷

40 色泽=乌黑,根蒂=蜷缩,敲声=浊响

41 色泽=乌黑,根蒂=蜷缩,敲声=清脆

42 色泽=乌黑,根蒂=蜷缩,敲声=沉闷

43 色泽=乌黑,根蒂=硬挺,敲声=浊响

44 色泽=乌黑,根蒂=硬挺,敲声=清脆

45 色泽=乌黑,根蒂=硬挺,敲声=沉闷

46 色泽=乌黑,根蒂=稍蜷,敲声=浊响

47 色泽=乌黑,根蒂=稍蜷,敲声=清脆

48 色泽=乌黑,根蒂=稍蜷,敲声=沉闷

49 Ø

训练集: 人为给定的训练数据

注:不同的训练集合会求出不同的版本空间

求版本空间:

对应着给出的已知数据集,将与正样本不一致的、与负样本一致的假设删除。

更据训练集依次删除假设空间里的数据样本:

(1,(色泽=青绿、根蒂=蜷缩、敲声=浊响),好瓜)

可以删除假设空间中的3、5、6、8、9、11-15、17-21、23-30、32-49

(2,(色泽=乌黑、根蒂=蜷缩、敲声=浊响),好瓜)

可以删除剩余假设空间中的2、10、16、31

(3,(色泽=青绿、根蒂=硬挺、敲声=清脆),坏瓜)

可以删除剩余假设空间中的1

(4,(色泽=乌黑、根蒂=稍蜷、敲声=沉闷),坏瓜)

剩余假设空间中无可删除的假设

学习过后剩余的假设为:

4 色泽=*,根蒂=蜷缩,敲声=*

7 色泽=*,根蒂=*,敲声=浊响

22 色泽=*,根蒂=蜷缩,敲声=浊响

这三个就是这个训练集下的版本空间

总结:

1、写出假设空间:先列出所有可能的样本点(即特征向量)

(即每个属性都取到所有的属性值)

2、对应着给出的已知数据集,将与正样本不一致的、与负样本

一致的假设删除。

若表1.1只含编号为1和4的两个样例,则数据集如下

表 1.1 西瓜数据集

编号

色泽

根蒂

敲声

好瓜

1

青绿

蜷缩

浊响

4

乌黑

稍蜷

沉闷

从一般到特殊或是从特殊到一般对整个假设空间进行搜索,删除与正例1不一致的假设,或与反例4一致的假设,最终得到版本空间为:

1.(色泽=青绿)∧(根蒂= ∗ )∧(敲声= ∗ )

2.(色泽= ∗ )∧(根蒂=蜷缩)∧(敲声= ∗ )

3.(色泽= ∗ )∧(根蒂= ∗ )∧(敲声=浊响)

4.(色泽=青绿)∧(根蒂=蜷缩)∧(敲声= ∗ )

5.(色泽=青绿)∧(根蒂= ∗ )∧(敲声=浊响)

6.(色泽= ∗ )∧(根蒂=蜷缩)∧(敲声=浊响)

7.(色泽=青绿)∧(根蒂=蜷缩)∧(敲声=浊响)

import re  # 正则表达式


def get_all_hyp(list_attr):
    """"获取所有假设,其中不考虑空集的情况"""
    set_hyp = set()
    for value_attr0 in list_attr[0]:
        for value_attr1 in list_attr[1]:
            for value_attr2 in list_attr[2]:
                x = value_attr0 + value_attr1 + value_attr2
                set_hyp.add(x)
    set_hyp.add("#")  #代表空集
    return set_hyp


def classify(list_ins):
    """划分正反例"""
    positive_class = []
    negative_class = []
    for instance in list_ins:
        ins = instance[0:3]
        if instance[3] == "Y":
            positive_class.append(ins[0:3])
        else:
            negative_class.append(ins[0:3])
    return positive_class, negative_class


def get_version_space(list_ins, set_hyp):
    """
    如果某假设未能包含所有的正例,剔除
    如果某假设包含任何反例,剔除
    """

    p_class, n_class = classify(list_ins)
    delete_items = set()

    for hypothesis in set_hyp:
        for negative in n_class:
            re_hyp_n = re.match(hypothesis, negative)  # 判断两者是否匹配
            if re_hyp_n is None:
                for positive in p_class:
                    re_hyp_p = re.match(hypothesis, positive)
                    if re_hyp_p is None:
                        delete_items.add(hypothesis)
            else:
                delete_items.add(hypothesis)
    version_space = set_hyp - delete_items
    return version_space


def main():
    #正文案例
    # "A"->青绿  "B"->乌黑
    # "C"->蜷缩, ”D"->硬挺  “E"->稍蜷
    # “F"->浊响   ”G"->清脆  "H" ->沉闷

    list_attr = [["A", "B", "."], ["C", "D","E" ,"."], ["F", "G","H", "."]]
    list_ins = ["ACFY","BCFY", "ADGN","BDHN"]
    all_hypothesis = get_all_hyp(list_attr)
    print("假设空间:", all_hypothesis, len(all_hypothesis))
    version_space = get_version_space(list_ins, all_hypothesis)
    print("版本空间:", version_space, len(version_space))

    #练习题1.1
    list_attr = [["A", "B", "."], ["C", "D", "."], ["E", "F", "."]]
    """该程序的局限:仅支持三个属性,但属性值任意,有机会再完善"""
    list_ins = ["ACEY", "BDFN"]
    all_hypothesis = get_all_hyp(list_attr)
    print("假设空间:",all_hypothesis, len(all_hypothesis))
    version_space = get_version_space(list_ins, all_hypothesis)
    print("版本空间:", version_space, len(version_space))


if __name__ == "__main__":
    main()

执行结果

假设空间: {'.CF', '.EG', 'ADF', 'BDH', 'AEH', 'BCF', 'BC.', '.EH', 'AEG', 'A.G', 'ACH', 'BEG', 'BE.', '.DF', 'AE.', 'BCH', 'AC.', 'BDF', 'BD.', 'ADH', '..H', '.E.', 'A.F', '.C.', '..F', '.DH', '.EF', 'AD.', 'BCG', 'BEF', 'ACF', 'BEH', 'B.F', 'ACG', 'B.H', 'A..', 'ADG', '#', 'B..', 'B.G', '.DG', '...', '.D.', '.CG', 'AEF', '.CH', '..G', 'A.H', 'BDG'} 49

版本空间: {'.C.', '.CF', '..F'} 3

假设空间: {'.CF', 'ADF', '..E', 'BCF', 'BDE', 'BC.', 'ADE', '.DF', 'A.E', 'BDF', 'AC.', 'BD.', 'A.F', '.C.', '..F', 'AD.', 'BCE', 'ACF', 'B.F', 'A..', 'ACE', 'B..', '...', '#', 'B.E', '.D.', '.DE', '.CE'} 28

版本空间: {'A..', '.C.', 'ACE', '..E', 'A.E', 'AC.', '.CE'} 7

相关参考:

https://zhuanlan.zhihu.com/p/355235881

https://blog.csdn.net/weixin_43592261/article/details/106197907?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-106197907-blog-123402713.pc_relevant_recovery_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-106197907-blog-123402713.pc_relevant_recovery_v2&utm_relevant_index=6

https://blog.csdn.net/qq_40273675/article/details/89856447?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-4-89856447-blog-128678234.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-4-89856447-blog-128678234.pc_relevant_aa&utm_relevant_index=5

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值