导航:首页 > 源码编译 > 啊算法侦探

啊算法侦探

发布时间:2022-09-22 21:11:42

‘壹’ 请问有:啊哈!算法 这本书的pdf完全版吗谢谢!

亲,手机用户部分网址不可见=转到电脑即可,如可见复制网址到浏览器即可下载
资源已光速上传网络云,请尽快查收吧。
若满意请【采纳】呦!有疑问请及时追问。
亲请放心下载,附件下载的财富值只针对其他童鞋,
提问者无需再支付财富值了哟,么么哒!

‘贰’ C+侦探的结局讲得到底是什么啊!

C+侦探的结局:因为慧心的尸体,找到了C+父母的尸体。所以C+最后在黑板上写到:兇手已找到,因为她(慧心)找到了他们(C+父母)。

亚探从大头明妻子得知大头明与人合资股票而欠下巨债。不久其中一名合资人芳竟也烧炭自杀,其家里留下一大笔现金。更令亚探惊讶的是另一名合资人原来就是肥龙,但他记不起自己曾托亚探找慧心,更发狂奔上天台一跃而下只留下一句离奇说话。

C+侦探的剧情简介:

住在曼谷唐人街,父母早年失踪的阿探(郭富城 饰),自幼渴望和好友风泽(廖启智 饰)一起投身警界,却因高度近视未能如愿,不甘心之下,他当起了私家侦探,却只能接一些鸡鸣狗盗的小案子,赚钱不多、口碑奇差,还时常入不敷出,要靠风泽接济。

一天,阿探的朋友肥龙(成奎安 饰)委托他调查一个女人,声称自己正在被她追杀。好奇之下,阿探根据照片查出这个女子叫莫慧心,却在寻找相关知情人士时接连出现怪异事件:跟莫慧心有关的人相继死亡,而阿探总是第一个发现者,简直成了死神的化身。

‘叁’ 《名侦探柯南》连载20多年,动画的时间线为什么才过去1年不到

《名侦探柯南》作为一部96年创作的漫画,如今已过去23个春秋,但其中的时间线似乎才过去半年或者一年左右,完全不符合严谨的推理逻辑,尤其是穿插着主线剧情和TV组原创剧情的动画,常常让新人入坑之后感觉到异常迷茫。柯南的时间线究竟是不是混乱了呢?

真的希望柯南快点完结吧,不然时间线真的越来越离谱了。

‘肆’ 《啊哈!算法》epub下载在线阅读,求百度网盘云资源

《啊哈!算法》(啊哈磊)电子书网盘下载免费在线阅读

链接:https://pan..com/s/1xarObhZx2nYXRl2R5Tc0Ig

提取码:1234

书名:啊哈!算法

作者:啊哈磊

豆瓣评分:7.7

出版社:人民邮电出版社

出版年份:2014-6-1

页数:246

内容简介:

这不过是一本有趣的算法书而已。和别的算法书比较,如果硬要说它有什么特点的话,那就是你能看懂它。

这是一本充满智慧和趣味的算法入门书。没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点,

通过幽默的语言配以可爱的插图来讲解算法。你更像是在阅读一个个轻松的小故事或是在玩一把趣味解谜

游戏,在轻松愉悦中便掌握算法精髓,感受算法之美。

本书中涉及到的数据结构有栈、队列、链表、树、并查集、堆和图等;涉及到的算法有排序、枚举、

深度和广度优先搜索、图的遍历,当然还有图论中不可以缺少的四种最短路径算法、两种最小生成树算法、

割点与割边算法、二分图的最大匹配算法等。

网名啊哈磊。

曾在中科院玩过单片机。武汉大学历史上第一位以本科生身份加入MSRA(微软亚洲研究院)的小伙伴,在机器学习组从事搜索引擎方面的研究。

发表国际会议论文一篇(IEEE)。

全国青少年信息学奥林匹克金牌教练。

超萌超简洁的C语言编译器——“啊哈C编译器”作者。

2013年我的着作,有趣的编程科普书《啊哈C!》出版。

网址:www.ahalei.com

微博:weibo.com/ahalei

非常喜欢小朋友,每天都过得都非常开心。

至于为什么叫“啊哈磊”,因为我觉得这是一个很喜庆的名字。

作者简介:

网名啊哈磊。

曾在中科院玩过单片机。武汉大学历史上第一位以本科生身份加入MSRA(微软亚洲研究院)的小伙伴,在机器学习组从事搜索引擎方面的研究。

发表国际会议论文一篇(IEEE)。

全国青少年信息学奥林匹克金牌教练。

超萌超简洁的C语言编译器——“啊哈C编译器”作者。

2013年我的着作,有趣的编程科普书《啊哈C!》出版。

‘伍’ 《算法神探一部谷歌首席工程师写的CS小说》epub下载在线阅读,求百度网盘云资源

《算法神探》([美] 杰瑞米·库比卡)电子书网盘下载免费在线阅读

资源链接:

链接:https://pan..com/s/1oaZqzlV0NKYYMFrl57iv9w

提取码:e5p4

书名:算法神探

作者:[美] 杰瑞米·库比卡

译者:啊哈磊

豆瓣评分:6.5

出版社:电子工业出版社

出版年份:2017-2

页数:252

内容简介:

《算法神探:一部谷歌首席工程师写的CS小说》围绕程序设计典型算法,精心编织了一个扣人心弦又趣味横生的侦探缉凶故事。小说主人公运用高超的搜索技巧和精深的算法知识,最终识破阴谋、缉拿元兇。其间,用二分搜索搜查走私船、用搜索树跟踪间谍、用深度优先搜索逃离监狱、用优先队列开锁及用最佳优先搜索追寻线索等跌宕起伏又富含算法精要的情节,让读者在愉悦的沉浸式体验中快速提升境界,加深对程序世界的理解。《算法神探:一部谷歌首席工程师写的CS小说》适合开发人员、编程爱好者和相关专业学生阅读,也是少儿计算机科学启蒙的绝佳读物。

作者简介:

Jeremy Kubica 在 Google 任职首席工程师,着力于机器学习和算法方向。他拥有康奈尔大学的计算机科学本科学位和卡耐基梅隆大学的机器人专业博士学位。在研究生期间,他设计了一个算法,可以探测对地球有威胁的小行星(当然,还尚未能阻止那些小行星)。Kubica 同时也是着名博客Computational Fairy Tales的作者。

关于技术审校者

Heidi Newton 拥有新西兰坎特伯雷大学计算机科学专业的学士学位,以及新西兰惠灵顿维多利亚大学计算机科学专业的硕士学位。她目前就职于坎特伯雷大学计算机专业的代码复仇者研究小组,并在业余时间进行相关辅导和咨询工作。她目前致力于改善关于计算机科学和编程的教学资源。

译者介绍

啊哈磊:原名纪磊,毕业于武汉大学。曾在微软亚洲研究院研发“爬虫”,全国青少年信息学奥林匹克金牌教练。着有《啊哈C语言!逻辑的挑战》和《啊哈!算法》系列编程科普丛书,并被引进至港澳台。

李嘉浩:曾获全国青少年信息学奥林匹克竞赛金牌,国家集训队最小选手。现就读于美国麻省理工学院计算机科学及音乐双专业。喜欢行走在科学与艺术的交接点。

‘陆’ 喜欢数学但没有天赋能不能做研究

看你对“研究”两字的要求了,一般来说,研究任何东西都需要甚少那么一点以上的喜欢+勤奋+天赋,喜欢一样东西才能长久;而勤奋则是必不可少的,否则不要想什么“成果”;而只想获得普通的或优秀的成果,没有天赋(或者天赋不明显)的例子也很多,但是与真正的天才比仍存在显着的距离,就像普通的科学家与爱因斯坦比较一样。所以得看你想把数学研究成什么样,或出什么成果。是想成为高斯一样的数学家,还是普通的研究员或院士。如果是前者非天赋者不可为,如果是后者完全可以试试,祝君好运!

‘柒’ 名侦探柯南动画总共多少集

共973集(海外版1030集)。

主要讲述高中生侦探工藤新一和青梅竹马的同学毛利兰一同去游乐园玩的时候,目击了黑衣男子的可疑交易现场。

只顾偷看交易的工藤新一,却忽略了从背后接近的另一名同伙。他被那名男子灌下了毒药,当他醒来时,身体居然缩小了!

如果让那些家伙知道工藤新一还活着的话,不仅性命难保,还会危及身边的人。在阿笠博士的建议下他决定隐瞒身份。

在被小兰问及名字时,化名江户川柯南,为了搜集那些家伙的情报,寄住在父亲以侦探为业的小兰家中。

谜团重重的黑衣组织他所了解的,就只有他们是以酒的名称作为代号的。为了揭露那些家伙的真面目,小小侦探江户川柯南的活跃开始了!

(7)啊算法侦探扩展阅读

主要角色简介:

1、江户川柯南

外表看似小孩,其真实身份是高中生侦探——工藤新一。

和青梅竹马的同学毛利兰一起去游乐园玩,目击到黑衣男子的可疑交易现场,被灌下开发中的药物,变成了小学生的身体。那天以后,为了隐藏真实身份,化名江户川柯南,在青梅竹马的毛利兰家寄住的同时,日复一日解决了许多案件。一切都是为了恢复自己的身体。

2、工藤新一

崇拜夏洛克·福尔摩斯的高中生侦探。5月4日出生,17岁。帝丹高中2年级B班。还是高中1年级学生的时候,在去往洛杉矶的飞机上解决了杀人案,在那里和目暮警官等人相识。此后,作为高中生侦探活跃起来。特长是足球,头脑清醒出众。

3、毛利兰

新一的青梅竹马,帝丹高中2年级B班,空手道部女主将,都大会中有头号实力的文武双全的女生。一直喜欢着新一,在他突然消失后等待着他的归来。有时柯南的名推理会与新一的身影重叠,她开始像母亲一般温柔地照顾着柯南和少年侦探团。此外,和铃木园子是青梅竹马的挚友,从以前开始便无话不谈。

‘捌’ 通常编程人员所说的算法指什么,如何理解啊

算法就是在编程的时候一个问题有上百种解决方法,自己通过逻辑推理选出最简洁的方法。

算法是个很大的概念,也是最重要的概念,算法的好与坏在编程时往往能够产生特别大的差别。
同一个问题,有些程序一秒钟就算出来了,有些程序一分钟也算不出来。等到最后整合到一个大程序中就是几十分钟的差别了,所以每年都有acm大赛,专门对比不同学生的算法。有些考试甚至都不考你写标准计算机语言的能力,直接就考你用什么算法。

‘玖’ 推荐算法简介

写在最前面:本文内容主要来自于书籍《推荐系统实践》和《推荐系统与深度学习》。

推荐系统是目前互联网世界最常见的智能产品形式。从电子商务、音乐视频网站,到作为互联网经济支柱的在线广告和新颖的在线应用推荐,到处都有推荐系统的身影。推荐算法是推荐系统的核心,其本质是通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式。

推荐系统的主要功能是以个性化的方式帮助用户从极大的搜索空间中快速找到感兴趣的对象。因此,目前所用的推荐系统多为个性化推荐系统。个性化推荐的成功应用需要两个条件:

在推荐系统的众多算法中,基于协同的推荐和基于内容的推荐在实践中得到了最广泛的应用。本文也将从这两种算法开始,结合时间、地点上下文环境以及社交环境,对常见的推荐算法做一个简单的介绍。

基于内容的算法的本质是对物品内容进行分析,从中提取特征,然后基于用户对何种特征感兴趣来推荐含有用户感兴趣特征的物品。因此,基于内容的推荐算法有两个最基本的要求:

下面我们以一个简单的电影推荐来介绍基于内容的推荐算法。

现在有两个用户A、B和他们看过的电影以及打分情况如下:

其中问好(?)表示用户未看过。用户A对《银河护卫队 》《变形金刚》《星际迷航》三部科幻电影都有评分,平均分为 4 .7 分 ( (5+4+5 ) / 3=4.7 );对《三生三世》《美人鱼》《北京遇上西雅图》三部爱情电影评分平均分为 2.3 分 ( ( 3十2+2 ) /3=2.3 )。现在需要给A推荐电影,很明显A更倾向于科幻电影,因此推荐系统会给A推荐独立日。而对于用户B,通过简单的计算我们可以知道更喜欢爱情电影,因此给其推荐《三生三世》。当然,在实际推荐系统中,预测打分比这更加复杂些,但是其原理是一样的。

现在,我们可以将基于内容的推荐归纳为以下四个步骤:

通过上面四步就能快速构建一个简单的推荐系统。基于内容的推荐系统通常简单有效,可解释性好,没有物品冷启动问题。但他也有两个明显的缺点:

最后,顺便提一下特征提取方法:对于某些特征较为明确的物品,一般可以直接对其打标签,如电影类别。而对于文本类别的特征,则主要是其主题情感等,则些可以通过tf-idf或LDA等方法得到。

基于协同的算法在很多地方也叫基于邻域的算法,主要可分为两种:基于用户的协同算法和基于物品的协同算法。

啤酒和尿布的故事在数据挖掘领域十分有名,该故事讲述了美国沃尔玛超市统计发现啤酒和尿布一起被购买的次数非常多,因此将啤酒和尿布摆在了一起,最后啤酒和尿布的销量双双增加了。这便是一个典型的物品协同过滤的例子。

基于物品的协同过滤指基于物品的行为相似度(如啤酒尿布被同时购买)来进行物品推荐。该算法认为,物品A和物品B具有很大相似度是因为喜欢物品A的用户大都也喜欢物品B。

基于物品的协同过滤算法主要分为两步:

基于物品的协同过滤算法中计算物品相似度的方法有以下几种:
(1)基于共同喜欢物品的用户列表计算。

此外,John S. Breese再其论文中还提及了IUF(Inverse User Frequence,逆用户活跃度)的参数,其认为活跃用户对物品相似度的贡献应该小于不活跃的用户,应该增加IUF参数来修正物品相似度的公式:

上面的公式只是对活跃用户做了一种软性的惩罚, 但对于很多过于活跃的用户, 比如某位买了当当网80%图书的用户, 为了避免相似度矩阵过于稠密, 我们在实际计算中一般直接忽略他的兴趣列表, 而不将其纳入到相似度计算的数据集中。

(2)基于余弦相似度计算。

(3)热门物品的惩罚。
从上面(1)的相似度计算公式中,我们可以发现当物品 i 被更多人购买时,分子中的 N(i) ∩ N(j) 和分母中的 N(i) 都会增长。对于热门物品,分子 N(i) ∩ N(j) 的增长速度往往高于 N(i),这就会使得物品 i 和很多其他的物品相似度都偏高,这就是 ItemCF 中的物品热门问题。推荐结果过于热门,会使得个性化感知下降。以歌曲相似度为例,大部分用户都会收藏《小苹果》这些热门歌曲,从而导致《小苹果》出现在很多的相似歌曲中。为了解决这个问题,我们对于物品 i 进行惩罚,例如下式, 当α∈(0, 0.5) 时,N(i) 越小,惩罚得越厉害,从而使热门物品相关性分数下降( 博主注:这部分未充分理解 ):

此外,Kary pis在研究中发现如果将ItemCF的相似度矩阵按最大值归一化, 可以提高推荐的准确率。 其研究表明, 如果已经得到了物品相似度矩阵w, 那么可以用如下公式得到归一化之后的相似度矩阵w':

归一化的好处不仅仅在于增加推荐的准确度,它还可以提高推荐的覆盖率和多样性。一般来说,物品总是属于很多不同的类,每一类中的物品联系比较紧密。假设物品分为两类——A和B, A类物品之间的相似度为0.5, B类物品之间的相似度为0.6, 而A类物品和B类物品之间的相似度是0.2。 在这种情况下, 如果一个用户喜欢了5个A类物品和5个B类物品, 用ItemCF给他进行推荐, 推荐的就都是B类物品, 因为B类物品之间的相似度大。 但如果归一化之后, A类物品之间的相似度变成了1, B类物品之间的相似度也是1, 那么这种情况下, 用户如果喜欢5个A类物品和5个B类物品, 那么他的推荐列表中A类物品和B类物品的数目也应该是大致相等的。 从这个例子可以看出, 相似度的归一化可以提高推荐的多样性。

那么,对于两个不同的类,什么样的类其类内物品之间的相似度高,什么样的类其类内物品相似度低呢?一般来说,热门的类其类内物品相似度一般比较大。如果不进行归一化,就会推荐比较热门的类里面的物品,而这些物品也是比较热门的。因此,推荐的覆盖率就比较低。相反,如果进行相似度的归一化,则可以提高推荐系统的覆盖率。

最后,利用物品相似度矩阵和用户打过分的物品记录就可以对一个用户进行推荐评分:

基于用户的协同算法与基于物品的协同算法原理类似,只不过基于物品的协同是用户U购买了A物品,会计算经常有哪些物品与A一起购买(也即相似度),然后推荐给用户U这些与A相似的物品。而基于用户的协同则是先计算用户的相似性(通过计算这些用户购买过的相同的物品),然后将这些相似用户购买过的物品推荐给用户U。

基于用户的协同过滤算法主要包括两个步骤:

步骤(1)的关键是计算用户的兴趣相似度,主要是利用用户的行为相似度计算用户相似度。给定用户 u 和 v,N(u) 表示用户u曾经有过正反馈(譬如购买)的物品集合,N(v) 表示用户 v 曾经有过正反馈的物品集合。那么我们可以通过如下的 Jaccard 公式简单的计算 u 和 v 的相似度:

或通过余弦相似度:

得到用户之间的相似度之后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品。如下的公式度量了UserCF算法中用户 u 对物品 i 的感兴趣程度:

首先回顾一下UserCF算法和ItemCF算法的推荐原理:UserCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品, 而ItemCF给用户推荐那些和他之前喜欢的物品具有类似行为的物品。

(1)从推荐场景考虑
首先从场景来看,如果用户数量远远超过物品数量,如购物网站淘宝,那么可以考虑ItemCF,因为维护一个非常大的用户关系网是不容易的。其次,物品数据一般较为稳定,因此物品相似度矩阵不必频繁更新,维护代价较小。

UserCF的推荐结果着重于反应和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反应了用户所在小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反应了用户自己的个性传承。因此UserCF更适合新闻、微博或微内容的推荐,而且新闻内容更新频率非常高,想要维护这样一个非常大而且更新频繁的表无疑是非常难的。

在新闻类网站中,用户的兴趣爱好往往比较粗粒度,很少会有用户说只看某个话题的新闻,而且往往某个话题也不是每天都会有新闻。 个性化新闻推荐更强调新闻热点,热门程度和时效性是个性化新闻推荐的重点,个性化是补充,所以 UserCF 给用户推荐和他有相同兴趣爱好的人关注的新闻,这样在保证了热点和时效性的同时,兼顾了个性化。

(2)从系统多样性(也称覆盖率,指一个推荐系统能否给用户提供多种选择)方面来看,ItemCF的多样性要远远好于UserCF,因为UserCF更倾向于推荐热门物品。而ItemCF具有较好的新颖性,能够发现长尾物品。所以大多数情况下,ItemCF在精度上较小于UserCF,但其在覆盖率和新颖性上面却比UserCF要好很多。

在介绍本节基于矩阵分解的隐语义模型之前,让我们先来回顾一下传统的矩阵分解方法SVD在推荐系统的应用吧。

基于SVD矩阵分解在推荐中的应用可分为如下几步:

SVD在计算前会先把评分矩阵 A 缺失值补全,补全之后稀疏矩阵 A 表示成稠密矩阵,然后将分解成 A' = U∑V T 。但是这种方法有两个缺点:(1)补成稠密矩阵后需要耗费巨大的储存空间,对这样巨大的稠密矩阵进行储存是不现实的;(2)SVD的计算复杂度很高,对这样大的稠密矩阵中进行计算式不现实的。因此,隐语义模型就被发明了出来。

更详细的SVD在推荐系统的应用可参考 奇异值分解SVD简介及其在推荐系统中的简单应用 。

隐语义模型(Latent Factor Model)最早在文本挖掘领域被提出,用于找到文本的隐含语义。相关的算法有LSI,pLSA,LDA和Topic Model。本节将对隐语义模型在Top-N推荐中的应用进行详细介绍,并通过实际的数据评测该模型。

隐语义模型的核心思想是通过隐含特征联系用户兴趣和物品。让我们通过一个例子来理解一下这个模型。

现有两个用户,用户A的兴趣涉及侦探小说、科普图书以及一些计算机技术书,而用户B的兴趣比较集中在数学和机器学习方面。那么如何给A和B推荐图书呢?

我们可以对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。简言之,这个基于兴趣分类的方法大概需要解决3个问题:

对于第一个问题的简单解决方案是找相关专业人员给物品分类。以图书为例,每本书出版时,编辑都会给出一个分类。但是,即使有很系统的分类体系,编辑给出的分类仍然具有以下缺点:(1)编辑的意见不能代表各种用户的意见;(2)编辑很难控制分类的细粒度;(3)编辑很难给一个物品多个分类;(4)编辑很难给一个物品多个分类;(5)编辑很难给出多个维度的分类;(6)编辑很难决定一个物品在某一个类别中的权重。

为了解决上述问题,研究员提出可以从数据出发,自动找到那些分类,然后进行个性化推荐。隐语义模型由于采用基于用户行为统计的自动聚类,较好地解决了上面提出的5个问题。

LFM将矩阵分解成2个而不是3个:

推荐系统中用户和物品的交互数据分为显性反馈和隐性反馈数据。隐式模型中多了一个置信参数,具体涉及到ALS(交替最小二乘法,Alternating Least Squares)中对于隐式反馈模型的处理方式——有的文章称为“加权的正则化矩阵分解”:

一个小细节:在隐性反馈数据集中,只有正样本(正反馈)没有负反馈(负样本),因此如何给用户生成负样本来进行训练是一个重要的问题。Rong Pan在其文章中对此进行了探讨,对比了如下几种方法:

用户行为很容易用二分图表示,因此很多图算法都可以应用到推荐系统中。基于图的模型(graph-based model)是推荐系统中的重要内容。很多研究人员把基于领域的模型也称为基于图的模型,因为可以把基于领域的模型看作基于图的模型的简单形式。

在研究基于图的模型之前,需要将用户行为数据表示成图的形式。本节的数据是由一系列用户物品二元组 (u, i) 组成的,其中 u 表示用户对物品 i 产生过行为。

令 G(V, E) 表示用户物品二分图,其中 V=V U UV I 由用户顶点 V U 和物品节点 V I 组成。对于数据集中每一个二元组 (u, i) ,图中都有一套对应的边 e(v u , v i ),其中 v u ∈V U 是用户对应的顶点,v i ∈V I 是物品i对应的顶点。如下图是一个简单的物品二分图,其中圆形节点代表用户,方形节点代表物品,用户物品的直接连线代表用户对物品产生过行为。比如下图中的用户A对物品a、b、d产生过行为。

度量图中两个顶点之间相关性的方法很多,但一般来说图中顶点的相关性主要取决于下面3个因素:

而相关性高的一对顶点一般具有如下特征:

举个例子,如下图,用户A和物品c、e没有边直连,但A可通过一条长度为3的路径到达c,而Ae之间有两条长度为3的路径。那么A和e的相关性要高于顶点A和c,因而物品e在用户A的推荐列表中应该排在物品c之前,因为Ae之间有两条路径。其中,(A,b,C,e)路径经过的顶点的出度为(3,2,2,2),而 (A,d,D,e) 路径经过了一个出度比较大的顶点D,所以 (A,d,D,e) 对顶点A与e之间相关性的贡献要小于(A,b,C,e)。

基于上面3个主要因素,研究人员设计了很多计算图中顶点相关性的方法,本节将介绍一种基于随机游走的PersonalRank算法。

假设要给用户u进行个性化推荐,可以从用户u对应的节点 v u 开始在用户物品二分图上进行随机游走。游走到任一节点时,首先按照概率α决定是继续游走还是停止这次游走并从 v u 节点重新开始游走。若决定继续游走,则从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。

上述算法可以表示成下面的公式:

虽然通过随机游走可以很好地在理论上解释PersonalRank算法,但是该算法在时间复杂度上有明显的缺点。因为在为每个用户进行推荐时,都需要在整个用户物品二分图上进行迭代,知道所有顶点的PR值都收敛。这一过程的时间复杂度非常高,不仅无法在线进行实时推荐,离线计算也是非常耗时的。

有两种方法可以解决上面PersonalRank时间复杂度高的问题:
(1)减少迭代次数,在收敛之前停止迭代。但是这样会影响最终的精度。

(2)从矩阵论出发,重新涉及算法。另M为用户物品二分图的转移概率矩阵,即:

网络社交是当今社会非常重要甚至可以说是必不可少的社交方式,用户在互联网上的时间有相当大的一部分都用在了社交网络上。

当前国外最着名的社交网站是Facebook和Twitter,国内的代表则是微信/QQ和微博。这些社交网站可以分为两类:

需要指出的是,任何一个社交网站都不是单纯的社交图谱或兴趣图谱。如QQ上有些兴趣爱好群可以认识不同的陌生人,而微博中的好友也可以是现实中认识的。

社交网络定义了用户之间的联系,因此可以用图定义社交网络。我们用图 G(V,E,w) 定义一个社交网络,其中V是顶点集合,每个顶点代表一个用户,E是边集合,如果用户va和vb有社交网络关系,那么就有一条边 e(v a , v b ) 连接这两个用户,而 w(v a , v b )定义了边的权重。一般来说,有三种不同的社交网络数据:

和一般购物网站中的用户活跃度分布和物品流行度分布类似,社交网络中用户的入度(in degree,表示有多少人关注)和出度(out degree,表示关注多少人)的分布也是满足长尾分布的。即大部分人关注的人都很少,被关注很多的人也很少。

给定一个社交网络和一份用户行为数据集。其中社交网络定义了用户之间的好友关系,而用户行为数据集定义了不同用户的历史行为和兴趣数据。那么最简单的算法就是给用户推荐好友喜欢的物品集合。即用户u对物品i的兴趣 p ui 可以通过如下公式计算。

用户u和用户v的熟悉程度描述了用户u和用户在现实社会中的熟悉程度。一般来说,用户更加相信自己熟悉的好友的推荐,因此我们需要考虑用户之间的熟悉度。下面介绍3中衡量用户熟悉程度的方法。

(1)对于用户u和用户v,可以使用共同好友比例来计算他们的相似度:

上式中 out(u) 可以理解为用户u关注的用户合集,因此 out(u) ∩ out(v) 定义了用户u、v共同关注的用户集合。

(2)使用被关注的用户数量来计算用户之间的相似度,只要将公式中的 out(u) 修改为 in(u):

in(u) 是指关注用户u的集合。在无向社交网络中,in(u)和out(u)是相同的,而在微博这种有向社交网络中,这两个集合的含义就不痛了。一般来说,本方法适合用来计算微博大V之间的相似度,因为大v往往被关注的人数比较多;而方法(1)适用于计算普通用户之间的相似度,因为普通用户往往关注行为比较丰富。

(3)除此之外,还可以定义第三种有向的相似度:这个相似度的含义是用户u关注的用户中,有多大比例也关注了用户v:

这个相似度有一个缺点,就是在该相似度下所有人都和大v有很大的相似度,这是因为公式中的分母并没有考虑 in(v) 的大小,所以可以把 in(v) 加入到上面公式的分母,来降低大v与其他用户的相似度:

上面介绍了3种计算用户之间相似度(或称熟悉度)的计算方法。除了熟悉程度,还需要考虑用户之间的兴趣相似度。我们和父母很熟悉,但很多时候我们和父母的兴趣确不相似,因此也不会喜欢他们喜欢的物品。因此,在度量用户相似度时,还需要考虑兴趣相似度,而兴趣相似度可以通过和UserCF类似的方法度量,即如果两个用户喜欢的物品集合重合度很高,两个用户的兴趣相似度很高。

最后,我们可以通过加权的形式将两种权重合并起来,便得到了各个好有用户的权重了。

有了权重,我们便可以针对用户u挑选k个最相似的用户,把他们购买过的物品中,u未购买过的物品推荐给用户u即可。打分公式如下:

其中 w' 是合并后的权重,score是用户v对物品的打分。

node2vec的整体思路分为两个步骤:第一个步骤是随机游走(random walk),即通过一定规则随机抽取一些点的序列;第二个步骤是将点的序列输入至word2vec模型从而得到每个点的embedding向量。

随机游走在前面基于图的模型中已经介绍过,其主要分为两步:(1)选择起始节点;(2)选择下一节点。起始节点选择有两种方法:按一定规则抽取一定量的节点或者以图中所有节点作为起始节点。一般来说会选择后一种方法以保证所有节点都会被选取到。

在选择下一节点方法上,最简单的是按边的权重来选择,但在实际应用中需要通过广度优先还是深度优先的方法来控制游走范围。一般来说,深度优先发现能力更强,广度优先更能使社区内(较相似)的节点出现在一个路径里。

斯坦福大学Jure Leskovec教授给出了一种可以控制广度优先或者深度优先的方法。

以上图为例,假设第一步是从t随机游走到v,这时候我们要确定下一步的邻接节点。本例中,作者定义了p和q两个参数变量来调节游走,首先计算其邻居节点与上一节点t的距离d,根据下面的公式得到α:

一般从每个节点开始游走5~10次,步长则根据点的数量N游走根号N步。如此便可通过random walk生成点的序列样本。

得到序列之后,便可以通过word2vec的方式训练得到各个用户的特征向量,通过余弦相似度便可以计算各个用户的相似度了。有了相似度,便可以使用基于用户的推荐算法了。

推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,因此大量的用户行为数据就成为推荐系统的重要组成部分和先决条件。如何在没有大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统,就是冷启动问题。

冷启动问题主要分为三类:

针对用户冷启动,下面给出一些简要的方案:
(1)有效利用账户信息。利用用户注册时提供的年龄、性别等数据做粗粒度的个性化;
(2)利用用户的社交网络账号登录(需要用户授权),导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的物品;
(3)要求用户在登录时对一些物品进行反馈,手机用户对这些物品的兴趣信息,然后给用推荐那些和这些物品相似的物品;
(4)提供非个性化推荐。非个性化推荐的最简单例子就是热门排行榜,我们可以给用户推荐热门排行榜,然后等到用户数据收集到一定的时候,在切换为个性化推荐。

对于物品冷启动,可以利用新加入物品的内容信息,将它们推荐给喜欢过和他们相似的物品的用户。

对于系统冷启动,可以引入专家知识,通过一定高效的方式快速建立起物品的相关度表。

在上面介绍了一些推荐系统的基础算法知识,这些算法大都是比较经典且现在还在使用的。但是需要注意的是,在实践中,任何一种推荐算法都不是单独使用的,而是将多种推荐算法结合起来,也就是混合推荐系统,但是在这里并不准备介绍,感兴趣的可以查阅《推荐系统》或《推荐系统与深度学习》等书籍。此外,在推荐中非常重要的点击率模型以及基于矩阵的一些排序算法在这里并没有提及,感兴趣的也可自行学习。

虽然现在用的很多算法都是基于深度学习的,但是这些经典算法能够让我们对推荐系统的发展有一个比较好的理解,同时,更重要的一点——“推陈出新”,只有掌握了这些经典的算法,才能提出或理解现在的一些更好地算法。

‘拾’ 一文读懂MCMC算法(马尔科夫链蒙特卡洛)

理解本文需要一些贝叶斯基础,小白可移步 https://www.jianshu.com/p/c942f8783b97

为了理解MCMC,我们依然是从一个具体的事例出发:假设当我们来到了一个小人国,我们感兴趣的是小人国的国民的 身高分布情况 ,即有多少人高1米,有多少人高0.5米,又有多少人像我们正常人一样高。一种解决这个问题的暴力方法是找遍这个小人国的所有人,然后都测量身高,但显然,这是一个愚公移山式的方法,在很多情况下都是不可能的。

所以,由于精力有限,我们只找到了10个小人国的人民,这十个人的高度分别是:
1.14,1.02,1.08,0.96,0.79,0.94,1.00,0.93,1.13,1.02

聪明的我们的直觉是,这大概符合一个 正态分布 ,然后我们碰到了一个开挂了的长老,他说:“没错,就是正态分布,而且标准差sd=0.1,现在让我看看你们这些愚蠢的人类能不能知道这个正态分布的平均值μ是多少!”。

一对分别名为马尔科夫和蒙特卡洛的名侦探组合就此登场,他们说:“首先,我们先随便猜一个平均值μ,比如μ(1) = 0.8好了。”

*我这里用μ(n)表示第n个提出的μ值,所以μ(1)是提出的第一个μ值,μ(2)是第二个提出的μ值。

接着他们要做的事,是要确定另一个值μ(2),通常我们要谨慎一点去选择一个和之前提出来的值μ(1)差别不大的值,比如μ(2) = 0.7。

接着的问题就是,我们需要判断:究竟是μ(1) 更符合实际情况,还是μ(2) 更符合实际情况呢?但要如何作出这个判断呢,这里就要用到前面的贝叶斯公式了。

判断哪个值更好,实际上是在问,基于目前观察到的数据,得到这个参数μ的可能性哪个更大? 即:
已知D = {1.14,1.02,1.08,0.96,0.79,0.94,1.00,0.93,1.13,1.02}
p(μ(2)|D) 大于还是小于还是等于 p(μ(1)|D) ?

这不就是在问谁的后验概率更大嘛?

为了解决这件事,一种思路是我们要把p(μ(2)|D) 和 p(μ(1)|D) 都用前面的贝叶斯公式解出来。但你很快就会发现在这种情况下证据概率p(D)会很难算。

但如果我们转念一想,我们要做的是比较p(μ(2)|D) 和p(μ(1)|D) ,那么 我们其实只要求p(μ(2)|D) / p(μ(1)|D) 就可以了,如果这个比值大于1,则说明μ2的后验概率更大,更符合实际情况

而实际上,
p(μ(2)|D) / p(μ(1)|D)
= (p(μ(2))p(D|μ(2)) / p(D)) / (p(μ(1))p(D|μ(1)) / p(D))
= p(μ(2))p(D|μ(2)) / p(μ(1))p(D|μ(1))

可以看到,由于分子和分母上的P(D)被相互抵消了,剩下来需要知道的值就只剩下μ(1)和μ(2)的 先验概率 ,以及分别在μ=μ(1)和μ=μ(2)时得到数据D的 似然概率 了。

现在,我们面临的问题要比之前简化了一些。但实际上我们还需要处理似然概率的计算和先验概率的问题。

先说说似然概率p(D|μ(2)) 和p(D|μ(1)),此时的似然概率是完全可以算出来的。因为我们已经假设了数据D符合的是正态分布模型了,且已知sd=0.1(前面大师说的),所以当我们假设μ=μ(1)时,就确定了一个平均值为μ(1)和标准差为0.1的正态分布,也就确定了这个正态分布的概率密度函数f(x),接着基于我们的数据D计算x = 1.14,1.02,1.08...等值的概率密度,再将这些值相乘,便得到了似然概率*。

** 可以这样理解这一似然概率的计算:如果我们此时假定的正态分布与数据实际对应的正态分布越接近,就自然 可能 有越多的数据落在高概率密度函数的区域(即分布的平均值附近),如此,作为概率密度函数的连乘的似然概率自然也会更高。相比之下,如果你现在确定的正态分布的平均值为1500,标准差为1,那么它在x = 1.14的概率密度(概率密度的具体数值不等于概率,但是两者的数学意味是接近的)就会高度趋近于0,将这样一个数作为因子去计算似然概率,似然概率也显然将会比较低。

说完了似然概率,就轮到先验概率p(μ(2))和p(μ(1))的问题了。先验概率要怎么去算呢?答案是不用算!我们自己来定。但是先验概率毫无疑问对MCMC算法是有影响的,就像我们之前从之前贝爷的故事里看到的那样,后验概率是受到先验概率影响的。之所以一枚90%击中率的硬币几乎不能预测一个人是否得病,是因为得这种病本身的先验概率就超级低。 一个你需要记住的简单事实是,我们设定的先验概率越是背离真实的情况,就需要越多的数据去将先验概率修正,让后验概率符合实际的情况。 从这个意义上说, 贝叶斯推理不是无中生有,而是要先对数据背后的结果有一个信念(belief)的基础上,根据所见的数据,不断地修正原本的信念,使之逐渐接近数据背后对应的真实情况 。 (贝叶斯公式本身就带有学习、更新的意味,所以学界现在还有种说法是我们的大脑是贝叶斯式的)

当我们看到数据的时候,通过观察数据,我们最开始会猜想μ=1的概率比较高,因此我们可以假定μ的先验概率是服从平均值为1,sd为0.5的概率分布,有了这样的先验概率分布,我们就可以计算得到当μ=μ1,μ2时分别对应的概率密度了。

搞定了先验概率和似然概率,就可以计算前面的公式p(μ(2))p(D|μ(2)) / p(μ(1))p(D|μ(1))了。当这个比值大于等于1时,我们就接受μ(2),而如果这个比值小于1,我们就以这个比值为概率接受μ(2)。比如比值为0.5时,我们只有50%的概率接受μ(2)。当不接受的时候,我们得重新寻找一个μ(2),再进行同样的后验概率比较。

反复进行这样的步骤之后, 我们可以想象,我们自然会更大程度地访问那些后验概率更高的μ值。我们访问不同的μ值的频率分布,就是关于μ值的后验概率分布(的近似)。 至于这背后具体的数学推导,我们就不谈了。但注意,参数的近似后验分布并不是我们想要拟合的模型“即最开始的问题:小人国的国民的 身高分布情况 ”。还记得我们最开始假设小人国的身高分布情况符合正态分布,且我们已经得知这个正态分布的标准差sd=1,而MCMC最终会告诉我们根据现有的数据,我们推断小人国身高分布的平均值μ,符合某个概率分布(比如平均值为1,sd为5),如果我们觉得合适,我们可以将μ的后验分布的平均值作为μ的最可能值。即,“小人国的国民的 身高分布情况 最有可能符合μ=1,sd=1的概率分布”。

最后总结一下MCMC算法:
(1)确定参数值的先验分布。
(2)先确定第一个访问(或者说采样)的参数的数值,作为当前参数数值
(3)根据当前访问的参数的数值,以一定的方式(比如 Metropolis sampler )提出下一个待考虑访问的参数的数值。
(4)以比值的形式,比较当前参数数值和待考虑访问的参数数值的后验概率,计算后验概率涉及到先验概率和后验概率的概率密度。根据这个比值的大小,接受或拒绝该待考虑采样的参数数值。接受后则将该参数数值视为当前参数数值。
(5)重复(3)和(4),直到符合某种终止条件(比如说访问了10000个参数数值)

最终,将被采样的参数数值的频率分布作为对该参数的后验概率分布的近似。

看完以后,你是不是想说这么复杂的事,是人干的吗!?

废话,这种事当然是计算机来干啊,你还想手算不成?

阅读全文

与啊算法侦探相关的资料

热点内容
杰克豆车机怎么安装app 浏览:30
app查余额怎么有两个金额 浏览:303
小程序仿今日头条源码 浏览:275
框架源码研读 浏览:446
仙侣奇缘3如何架设服务器 浏览:954
单片机RRC指令 浏览:889
默认加密文件密码 浏览:5
怎么用反诈中心app查询电话 浏览:710
linuxvi操作 浏览:298
什么是实木压缩板 浏览:639
加密空投与硬分叉指南 浏览:17
加密wps文档密码忘了怎么办 浏览:687
冲程算法 浏览:990
鸡料与鸡粪的算法 浏览:835
phpif变量为空值 浏览:59
iot编译器异常 浏览:602
代理服务器被禁用怎么上网 浏览:413
隐私加密怎么设置密码 浏览:942
马丁靴补色解压 浏览:567
在设置app上怎么找到个人热点 浏览:754