【学术】试试这个!研究人员设计出了更好的推荐算法

改进的推荐算法在评级数据“稀疏”的情况下尤其有效。

亚马逊和Netflix等网站的推荐系统使用了一种名为“协同过滤”的技术。为了确定一个给定的客户可能喜欢什么产品,他们寻找更多的客户,他们已经为类似范围的产品分配了类似的评级,并从那里进行推断。

这种方法的成功在很大程度上取决于相似性的概念。大多数推荐系统使用一种叫做余弦相似度的方法,这种方法在实践中似乎很有效。去年,在神经信息处理系统会议上,麻省理工学院的研究人员用了一个新的理论框架来证明为什么余弦相似性会产生如此好的效果。

本周,在神经信息处理系统会议上,他们报告说, 他们已经使用他们的框架来构建一个新的推荐算法,应该比现在使用的推荐算法更好,特别是当评级数据“稀疏”时——也就是说, 在审查的产品和不同的客户分配的评级之间。

该算法的基本策略很简单:当试图预测顾客对某一产品的评价时,不仅要使用相似品味的人的评分,而且要使用与这些人相似的人的评分等等。

这个想法很直观,但在实践中,一切都取决于具体的相似性度量。

“如果我们真的很慷慨,每个人都会看起来很像彼此,”电子工程和计算机科学教授Devavrat ShahDevavrat Shah说。 “另一方面,如果我们真的很严格,我们就能有效地观察到最近的邻居。”或者换句话说,当你从一个朋友的喜好转移到朋友的朋友时,这个过程中引入了什么噪音,是否有一个正确的方法来量化这种噪音,这样我们就能平衡我们所引入的噪音所带来的信号。因为我们的模型,我们确切地知道什么是正确的。

所有的角度

事实证明,正确的做法是再次使用余弦相似度。从本质上讲,余弦相似度表示客户的偏好在一个非常高维的空间中的一条线,并将相似度定义为两条线之间的角度。

例如,假设在笛卡尔平面上有两个点,即高中代数所熟悉的二维坐标系。如果将点连接到原点(坐标为(0,0)的点),则可以定义一个角度,并可以从点坐标本身计算余弦。

如果一个电影流媒体服务在其数据库中有5000个标题,那么任何给定的用户分配的评分都定义了一个5000维空间中的一个点。余弦相似度衡量该空间中任何两组评分之间的角度。

然而,当数据“稀疏”的时候,用户对余弦相似度的评价几乎没有意义。在这种情况下,汇集许多用户的数据变得必要。

研究人员的分析是理论上的,但这是他们的算法在实践中如何运作的一个例子。对于任何一个给定的客户,它都会选择一个小的集合——比方说,5个客户,他们拥有最大的余弦相似度,并且平均得分。然后,对于每一个客户,它将选择5个类似的客户,平均他们的评级,并将平均值折叠为累积平均值。它将继续以这种方式展开,建立一套越来越完整的评级,直到它有足够的数据来对利率产品的评级做出合理的估计。

填空

对于Shah和两位微软同事,Christian Borgs和Jennifer Chayes——设计这样的算法并不是最困难的。最大的挑战是证明它能很好地工作,这就是论文的重点。

想象一个巨大的二维网格,它将所有的电影流媒体服务的用户都映射到所有的标题上,每个单元中的一个数字对应一个给定用户评分的电影。大多数用户只看了几部电影,所以大部分的网格都是空的。推荐引擎的目标是尽可能准确地填充空网格单元。

Shah说,通常情况下,机器学习系统会学习两件事:数据集预测有用的特征,以及计算这些特征预测的数学函数。为了预测电影的口味,有用的功能可能包括电影的类型,它的票房表现,获得的奥斯卡提名的数量,领导者的历史票房成功记录,分销商,或者任何其他的东西。

每个电影流媒体服务的客户都有其自身的价值功能:如果适合动作流派并且预算很大,则可能更倾向于对电影进行更高的评价;另一个可能会给一部获得众多奥斯卡提名的电影给予很高的评价,并有一个小型的艺术发行商。

玩赔率

在新的分析方案中,研究人员的确假设每个用户的价值功能都保持不变:用户分配给流派和分销商的相对权重不会改变。研究人员还假设,每个用户的功能都在同一套电影功能上运行。

事实证明,这提供了足够的一致性,可以得出关于一个用户的评分可能预测另一个评分的可能性的统计推断。

“当我们对一部电影进行采样时,我们实际上并不知道它的功能是什么,所以如果我们想准确预测这个功能,我们将无法做到,”Lee说。“但如果我们只是想估算用户功能之间差异,我们则可以计算出这个差异。”

使用他们的分析框架,研究人员发现,在数据“稀疏”的情况下——描述大多数在线零售商的情况,他们的“邻居”算法应该比任何已知的算法产生更准确的预测。

然而,在这种理论算法分析和工作计算机系统之间的转换,往往需要一些创新的工程,因此研究人员的下一步是尝试将他们的算法应用到真实的数据中 。

卡内基梅隆大学(Carnegie Mellon University)的亨氏公共政策和信息系统学院的助理教授乔治•陈(George Chen)表示:“他们展示的算法简单、直观、优雅。”“如果其他人还没有尝试过类似的算法,我会感到惊讶,尽管Devavrat和Christina在论文中提到。但据我所知,这种处理稀疏采样机制算法的理论性是可以得到保证的,这在许多情况下是最实际的。”

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2017-12-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊EurekaRibbonClientConfiguration

spring-cloud-netflix-eureka-client-2.0.0.RELEASE-sources.jar!/org/springframewor...

1181
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

20510
来自专栏Pulsar-V

C#下各种获取时间的姿势

直接贴代码吧 DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21...

3246
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system1.c

/*---------------------------------------------------- SYSMETS1.C -- System M...

24010
来自专栏码匠的流水账

聊聊spring cloud的LoadBalancerAutoConfiguration

本文主要研究一下spring cloud的LoadBalancerAutoConfiguration

1082
来自专栏C/C++基础

C#获取系统当前时间

ystem.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=Sy...

1153
来自专栏张善友的专栏

Using sqlite with .NET

The other day I found that there is a .NET wrapper for sqlite. sqlite is a very ...

2318
来自专栏DT乱“码”

连接数据库操作

package com.chendongj.dbUtil; import java.sql.Connection; import java.sql.Drive...

2029
来自专栏成长道路

JDBC动态SQL语句连接orcale数据库的工具类

import java.sql.Connection; import java.sql.DriverManager; import java.sql.P...

2520
来自专栏积累沉淀

Hive2.0.0操作HBase 1.2.1报错解决

首先看错  org.apache.hive.service.cli.HiveSQLException: Failed to open new session: ...

2379

扫码关注云+社区