爱吧机器人网 » 技术 > 机器学习 > 正文

传统编程遇上机器学习会擦出怎样的火花

在这篇文章中,我们将开发一个使用树状数据结构和协同过滤的自动完成组件来为用户选择最佳的图书标题提供建议。值得注意的是,算法、数据结构和机器学习都在朝着最终的解决方案一起工作,完整的代码和工作应用程序与结果一起提供。
 
问题公式化
 
我们想要从高层次角度来构建一个自动完成的字段,所以当我们键入一些字符时,它建议从这些图书的标题开始。
 
从GUI的角度来看,需要的是一个TextField或者ComboBox,它显示了一些像findTitlesThatStartWith(chars [] ch)这样的服务提供的选项列表。幸运的是,在Swing(也是JavaScript或jQuery)中已经有了现有的GUI组件。对于这篇文章,构建GUI自动完成组件并不是关注的焦点,尽管构建它们可能是一个很大的挑战。
 
另一方面,实现findTitlesThatStartWith(chars [] ch)则更具吸引力,因为它提供了一个机会,可以从数据的角度优化向客户提供的内容。从特定字符开始可能会有一个长列表,所以我们只能返回有限数量的标题,这个短名单中包含的内容尽可能多地从用户的角度来理解。
 
这有一些选项:
 
按照一些标准(字母顺序)对列表进行排序,然后只返回前10位(或任何有意义的数字)
 
计算用户获得标题的次数,只显示前10个最高的标题
 
显示最受用户欢迎的10大标题
 
根据当前的用户偏好显示最感兴趣的前10名
 
一旦我们在高层次上表明什么样的服务将返回,就是时候研究如何在相当大的标题集合中搜索标题。
 
同样,这也有各种各样的选择:
 
我们搜索所有的列表/数组和每个标题,我们看看ut是否从这些字符开始:

\
 
如果N代表列表的大小,k是单词的长度,我们需要θ(N * k)时间来搜索。插入新标题需要一定的时间(θ(1)),虽然有添加新电影,但情况相当少。
 
由于这是一个搜索问题,HashTable可能是一个选项,因为它的访问和插入速度非常快(θ(1))。不幸的是,HashTables只能查找整个单词匹配,而不是匹配前缀(即以......开始的标题)。
 
同样,我们可以考虑一个平衡良好的二叉树。因为它给了我们θ(log(N),即所有标题的大小乘以搜索和插入的复杂度。同样,二叉树没有帮助,因为它们找不到前缀匹配而是精准匹配。
 
幸运的是,现有的数据结构已经准备好用于查找前缀匹配。关于这个数据结构的好处是,只要稍作修改,它就会给你提供搜索时间复杂度θ(k),其中k是前缀的长度。是的,有一个小问题:你可能需要更多的存储空间。
 
尝试
 
在本节中,我们将探讨试图如何在标题(单词)列表中搜索前缀匹配。一旦你理解了单词的插入方式,就相当容易理解:

\
接下来让我们看看如何搜索以“te”开头的标题:

\
你可能在想,没有那么快!事实上,复杂度是θ(k + M),其中k是前缀的长度,M是建议列表或最后一个节点匹配下的子树的大小(直接子节点保存在HashTable中,因此需要经常查找字符匹配)。 无论如何,我们需要遍历子树来收集建议的单词/标题 - 如果列出的结果很多,则会显著减慢算法的速度。
 
当然,它比θ(k * N)好,其中k是前缀的长度,N是所有列表的大小。但是,我们能做得更好吗? 那么,我们可以稍微增加节点来存储更多的信息,而不仅仅是字符,如下所示:

\
由于该节点已经具有子树包含的单词列表,所以该修改可以极大地帮助避免在最后一个匹配节点下的所有子树。下面看看现在搜索的结果:

\
最终变更
 
在算法准备好实施之前,还有一个小诀窍要做。标题通常是句子而不是一个单词。如果我们只搜索标题的开头部分,这将不是很有用,例如,很多标题以“这”开头。因此,如果用户搜索以其中一个词开头的标题,很可能会搜索不出来。
 
解决方案很简单!我们只是将每个单词分别插入到树中,并将标题的所有句子保存到节点建议列表中。现在,不再只提供单词建议,而是有一个句子列表。这样,我们可以搜索中间的单词,同时能够提出所有的标题句子。
 
推荐系统
 
我们只有极少数的建议,所以涉及到向用户在提出什么样的建议时,我认为最好的选择是展示与用户兴趣更贴近或更接近的东西。这促成推荐系统的形成。
 
推荐系统根据用户偏好和数据趋势提出建议信息。这些系统的主要优点是可以自动学习,更多地了解用户的喜好。基本上,更多的用户与系统交互的越多(即喜欢或点击特定的书籍或电影),系统将提出更多更好的建议(即更接近用户的兴趣)。
 
数据
 
感谢这个来源提供了足够的数据来构建一个有意义的算法。数据集相当大,约有271.000本书、110万的收视率和279,000用户。
 
应用
 
应用程序可以在没有任何Java知识的情况下下载和执行(尽管Java必须安装在你的计算机上,我们可以通过简单地执行RUN类来运行应用程序,或者如果你不想使用IDE打开它,只需运行mvn exec:java。
 
你可以通过对某些书籍进行评分来试用(请注意,如果书籍未先评分,则不会提出建议),然后在该字段中搜索自动填充建议。随意游玩(50个功能不需要太多时间来训练),并注意算法如何根据你的喜好进行调整。对于50种类型,给出预测评级的建议以及算法的误差(均方误差)将不会超过30秒。你还可以将评级数据的规模增加到1,149,000,但请注意培训过程的速度需要放缓。
 
该应用程序使用Swing作为GUI和Spark MLib构建协作过滤算法。运行后,屏幕显示如下:
 
\


上一篇:机器学习:看懂逻辑回归,实现用户分类
下一篇:Graphcore 研发出AI芯片让机器学习提速百倍
精选推荐
英伟达用联合学习创建医学影像AI 可共享数据和保护隐私
英伟达用联合学习创建医学影像AI 可共享数据和保护隐私

[2019-10-14]  英伟达(Nvidia)和伦敦国王学院(King’s College London)的人工智能研究人员利用联合学习训练了一种用于脑肿瘤分类的神经网络, ...

麻省理工正研究植物机器人 让植物自主控制机器人
麻省理工正研究植物机器人 让植物自主控制机器人

[2018-12-08]  控制论通常指人类用机器人部件增强自己。我们听说过动物机器人或昆虫机器人,但我们很少听说植物机器人对吧?一个机器人其实是对植物有很大益处的,因为一般植物根本无法移动......

揭秘达芬奇手术机器人
揭秘达芬奇手术机器人

[2018-04-19]  达芬奇手术系统是由美国Intuitive Surgical公司制造的机器人手术系统。美国食品和药物管理局(FDA)于2000年通过该标准,旨在利用微创手段 ...

什么是机器人学?机器人学简介
什么是机器人学?机器人学简介

[2017-12-14]  机器人学是工程学与科学的交叉学科,包括机械工程,电气工程,计算机科学等。机器人技术涉及机器人的设计、制造、操作和应用,以及用于控制、感官反馈和信息处理的计算机系统。...

谷歌宣布搜索算法重大升级,用BERT模型理解用户搜索意图
谷歌宣布搜索算法重大升级,用BERT模型理解用户搜索意图

[2019-10-26]  谷歌刚刚宣布,其搜索引擎的核心算法正在进行一项重大升级,这项升级可能会改变10%的搜索结果排序。此项升级应用了自然语言处理技术(BERT ...

亚马逊CEO杰夫·贝佐斯操控巨型有人驾驶机器人(巨型机甲)
亚马逊CEO杰夫·贝佐斯操控巨型有人驾驶机器人(巨型机甲)

[2017-03-21]  近日,亚马逊CEO杰夫·贝佐斯实现了每一个6岁儿童都会有的梦想,他控制了一个巨大的机甲机器人。据国外媒体Verge报道,前天(3月19日),贝 ...

MIT用深度学习处理3D点云数据 应用于无人汽车等领域
MIT用深度学习处理3D点云数据 应用于无人汽车等领域

[2019-10-23]  如果你见过自动驾驶汽车,也许会对车顶上那个一直在旋转的圆柱体感到好奇。这是一个雷达传感器,无人驾驶汽车依靠它在现实世界中进行导航。 ...

智能农业:种地的事儿未来全交给这些机器人吧
智能农业:种地的事儿未来全交给这些机器人吧

[2019-12-07]  SRC公司创始人Sam与温波尔庄园农场经理Callum Weir以及监控机器人Tom总部位于英国的农业科技初创公司SRC(Small Robot Company),正在 ...

本周栏目热点

关于应用机器学习作为搜索问题的入门简介

[2018-01-03]  机器学习的应用可以理解为一个搜索问题,即根据某个项目的已知信息和可获取的资源,找到从输入到输出的最好的映射。在本文你即将看到把应用机器学习当作搜索问题的概念...

[2017-03-02]   随着人工智能的不断发展,许多新的机器学习技术、架构和算法被提出,但这里有三个宏观趋势,将成为机器学习中,游戏规则的改变者。 机 ...

顶级AI会议NIPS压轴2017(附PPT、视频、代码大汇总)

[2017-12-19]  NIPS,全称神经信息处理系统大会(Conference and Workshop on Neural Information Processing Systems),是一个关于机器学习和计算神经科学的国际会议。该会议固定在每年的12月举行...

机器学习之——正则化

[2018-05-18]  最近在刷李航的《统计学习方法》这本书,在很多算法的损失函数里,都出现类似的描述:损失函数最小化原则一般就是用正则化的极大似然估计进 ...

机器学习算法可预测出乳腺癌治疗率(图)

[1970-01-01]    据外媒报道,患有同种疾病的不同病人在接受同一种治疗方案时,其获得的疗效也会存在不同,这就给医生留下了一个难题:他们怎样才能知道 ...