西瓜书第一章习题

1.1 表1.1中若只包含编号为1和4的两个样例,试给出相应的版本空间。

解:对应的样本数据集如下

image

色泽有3(青绿,乌黑,* )种取值,根蒂有3(蜷缩,稍蜷,* )种取值,敲声3(浊响,沉闷,* )种,那么假设规模一共有

3*3*3+1(考虑空集),28种

对应的版本空间为7种

分别为

1.色泽=青绿 根蒂=蜷缩 敲声=浊响

2.色泽=青绿 根蒂=蜷缩 敲声= *

3.色泽=青绿 根蒂=* 敲声= 浊响

4.色泽= * 根蒂= 蜷缩 敲声= 浊响

5.色泽= * 根蒂= * 敲声= 浊响

6.色泽= * 根蒂= 蜷缩 敲声= *

7.色泽= 青绿 根蒂= * 敲声= *

1.2 与使用单个合取式来进行假设表示相比,使用“析合范式”将使得假设空间具有更强的表示能力。

例如:
好瓜←→((色泽=)∧(根蒂=蜷缩)∧(敲声=))∨((色泽=乌黑)∧(根蒂=*)∧(敲声=沉闷))会把“((色泽=青绿)∧(根蒂=蜷缩)∧(敲声=清脆))”以及“((色泽=乌黑)∧(根蒂=硬挺)∧(敲声=沉闷))”都分类为“好瓜”。若使用最多包含k个合取式的析合范式来表达表1.1西瓜分类问题的假设空间,试估算共有多少种可能的假设。

解:西瓜的三个不同属性的特征分别记为(A1,A2),(B1,B2,B3),(C1,C2,C3),这样一共有2x3x3,18种不同的组合,如果将属性泛化考虑 进去,(A1,A2,* ),(B1,B2,B3,* ),(C1,C2,C3,* )那么一共就有3x4x4,48种不同的组合。

48种情况分别包括

基本组合:18种

一个属性泛化假设:2x3+3x3+2x3,21种

两种属性泛化假设:2+3+3,8种

三个属性泛化假设:1种

如果不考虑冗余则一共有 \sum_{i=1}^{48} C_{48}^i = 2^{48} -1
但是书本中提醒了还要考虑冗余情况,情况就没有那么简单了。

首先我们可以很轻松确定k的上界,k的最大取值为18,能表达最小的假设空间为18种基本组合,如果加入第19种的话,那么必然会产生表达冗余。因此k的取值范围为【1,18】

考虑最极端也最简单的情况,当k=1时,相当于在48个种排列组合取一种,必然不会有冗余的考虑即

k=1时,有48种

k=18时,有1种

中间的2~17的取值范围考虑起来会相当复杂,一种朴素的思想就算用计算机暴力迭代,遍历所有的排列组合,然后判断他们是否冗余。但是在计算机表达上也是有一定的转换

一 、首先构造一个18x48的矩阵来表达数据,比如

100000000000000000 表示(青绿,蜷缩,浊响)

111111111111111111 表示 ( * , * ,*)

二、用itertools.combinations方法放回所有的排列组合迭代器

三、将每一种迭代结果相加(析取运算),存放在一个数组中,该数组的作用相当于一个set,不允许出现重复的元素

代码

import itertools 
import time
 
 
#将数存储为数组
def method(value):
    # 将字符串变成数字列表,使其具有数字加法运算
    result = []
    for i in range(len(value)):
        result.append(eval(value[i]))
    return result
 
#用类表示编码,并定义重载的运算符 + 为析取
class WMcode:
    val  = ''
    len  = 0
    def __init__(self, strv):
        self.val = method(strv)
    def __add__(self,other):    #析取运算
        strv = [] 
        for i in range(len(self.val)):
            addr = self.val[i]+other.val[i]
            if addr >= 2:
                addr = 1
            strv.append(str(addr))
        return WMcode(strv)
    
#对48中假设进行编码
nodes = [WMcode('100000000000000000'),WMcode('010000000000000000'),WMcode('001000000000000000'),
         WMcode('000100000000000000'),WMcode('000010000000000000'),WMcode('000001000000000000'),
         WMcode('000000100000000000'),WMcode('000000010000000000'),WMcode('000000001000000000'),
         WMcode('000000000100000000'),WMcode('000000000010000000'),WMcode('000000000001000000'),
         WMcode('000000000000100000'),WMcode('000000000000010000'),WMcode('000000000000001000'),
         WMcode('000000000000000100'),WMcode('000000000000000010'),WMcode('000000000000000001'),
         WMcode('100000000100000000'),WMcode('010000000010000000'),WMcode('001000000001000000'),
         WMcode('000100000000100000'),WMcode('000010000000010000'),WMcode('000001000000001000'),
         WMcode('000000100000000100'),WMcode('000000010000000010'),WMcode('000000001000000001'),
         WMcode('111000000000000000'),WMcode('000111000000000000'),WMcode('000000111000000000'),
         WMcode('000000000111000000'),WMcode('000000000000111000'),WMcode('000000000000000111'),
         WMcode('100100100000000000'),WMcode('010010010000000000'),WMcode('001001001000000000'),
         WMcode('000000000100100100'),WMcode('000000000010010010'),WMcode('000000000001001001'),
         WMcode('111000000111000000'),WMcode('000111000000111000'),WMcode('000000111000000111'),
         WMcode('100100100100100100'),WMcode('010010010010010010'),WMcode('001001001001001001'),
         WMcode('111111111000000000'),WMcode('000000000111111111'),WMcode('111111111111111111')]
#           (青绿,蜷缩,浊响) (青绿,稍蜷,浊响) (青绿,硬挺,浊响)
#           (青绿,蜷缩,清脆) (青绿,稍蜷,清脆) (青绿,硬挺,清脆)
#           (青绿,蜷缩,沉闷) (青绿,稍蜷,沉闷) (青绿,硬挺,沉闷)
#           (乌黑,蜷缩,浊响) (乌黑,稍蜷,浊响) (乌黑,硬挺,浊响)
#           (乌黑,蜷缩,清脆) (乌黑,稍蜷,清脆) (乌黑,硬挺,清脆)
#           (乌黑,蜷缩,沉闷) (乌黑,稍蜷,沉闷) (乌黑,硬挺,沉闷)
#           (*,蜷缩,浊响) (*,稍蜷,浊响) (*,硬挺,浊响)
#           (*,蜷缩,清脆) (*,稍蜷,清脆) (*,硬挺,清脆)
#           (*,蜷缩,沉闷) (*,稍蜷,沉闷) (*,硬挺,沉闷)
#           (青绿,*,浊响) (青绿,*,清脆) (青绿,*,沉闷)
#           (乌黑,*,浊响) (乌黑,*,清脆) (乌黑,*,沉闷)
#           (青绿,蜷缩,*) (青绿,稍蜷,*) (青绿,硬挺,*)
#           (乌黑,蜷缩,*) (乌黑,稍蜷,*) (乌黑,硬挺,*)
#           (*,*,浊响) (*,*,清脆) (*,*,沉闷)
#           (*,蜷缩,*) (*,稍蜷,*) (*,硬挺,*)
#           (青绿,*,*) (乌黑,*,*) (*,*,*)

#合取式数量k
for k in [1,2,3,4]:
    #存储最终结果的集合A
    A = []
    time_start=time.time()               #开始计时
    comb = list(itertools.combinations(nodes,k))
    for i in range(len(comb)):
        WMadd = WMcode('000000000000000000')
        for j in range(k):
            WMadd = WMadd + comb[i][j]
        for allval in A:                       #若A中已经存在当前假设,则舍去,因为这是亢余
            if WMadd.val == allval.val:
                break
        else:
            A.append(WMadd)
    time_end=time.time()                 #结束计时
    print("K={},一共有{}组合".format(str(k),str(len(A))))
    print('花费时间',time_end-time_start)

最后由于这是一种规模是指数级的迭代,当k规模大的时候就跑不动了,看图,当k的取值为4的时候就已经需要10多分钟了

image

1.3 若数据包含噪声,则假设空间中有可能不存在与所有训练样本都一致的假设。在此情形下,试设计一种归纳偏好用于假设选择。

解:归纳偏好以我个人的理解就是对于不同的算法而言,a算法的效果比b好,但是a的内存开销和时间开销比b大,如何评价对于同一个问题算法的好坏,就是看重视哪一方面,重视效果(准确率)那么就认为a好,折中考虑效率就认为b好。因此归纳偏好在我理解就是最佳模型的基准。

回到问题,对于此情况,我认为精度高的归纳偏好为假设选择,即和训练样本假设最接近的。

1.4 本章1.4节在论述“没有免费的午餐”定理时,默认使用了“分类错误率”作为性能度量来对分类器进行评估。若换用其他性能度量l,试证明没有免费的午餐”定理仍成立。

解:证明:
在证明定理之前,先构造一个引理:
引理1:在二分类问题下,对任意性能度量指标l,l(h(x)=f(x))+l(h(x)≠f(x))=A,Al(h(x)=f(x))+l(h(x)≠f(x))=A,A为某一常数。
证:对于二分类问题,任意性能度量中的正确分类得分与错误分类得分应该是固定的。即:
l(0,0)=l(1,1),l(0,1)=l(1,0)

因此
l(0,0)+l(0,1)=l(1,1)+l(1,0)


l(0,0)+l(0,1)=l(1,1)+l(1,0)=A

即可得:
l(h(x)=f(x))+l(h(x)≠f(x))=A

证毕.
现在证明定理:

(https://blog.csdn.net/dicker6315/article/details/81265066)

1.5 试述机器学习能在互联网搜索的哪些环节起作用

解:机器学习对搜索引擎可进行的优化

1.搜索引擎直接给出搜索的答案:这里用到神经网络,它可以通过分析大量数据从而完成特定的任务,如从相关网页中获取长句子和段落,然后提出有关问题答案的信息。
2.直接进行图片、视频(等多元数据)的搜索:图片的识别已经是常见的技术了,那直接从视频中提出信息呢?谷歌推出Video Intelligence API,不仅可以从视频中提取特定的信息,还能总结视频的脉络、记录视频中的场景,从而对视频进行准确的分类。
3.更精准的排序(也可成为「精准营销」的部分):如使用神经网络、决策树等为基础的网页排序算法:RankNet, LambdaRank 和LambdaMART。2015年,谷歌推出RankBrain,它可以选择最适合当前搜索类型的结果,相当于为每个搜索都提供个性化的算法组合。
4.对用户行为进行综合分析(如历史搜索数据、点击模式、身份信息等进行结构化信息整合)
5.对垃圾网站的筛选(模式识别)


参考文章:

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

https://blog.csdn.net/qq_26371477/article/details/102292685

https://blog.csdn.net/dicker6315/article/details/81265066

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

代码 :
https://gitee.com/wudinglang/MichineLearning

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容