推荐系统(1)--splitting approaches for context-aware recommendation

开篇语:

大一的时候。在实验室老师和师兄的带领下。我開始接触推荐系统。时光匆匆,转眼已是大三,因为大三课甚是少。于是便有了时间将自己所学的东西做下总结。

第一篇博客。献给过去三年里带我飞的老师和师兄们,感谢你们的无私帮助与教导!



协同过滤算法:

在传统的协同过滤算法中,算法是基于如图一的用户评分矩阵对用户进行推荐的。其核心思想大致是利用相似用户或者相似商品的信息对用户进行推荐,拿图一举例。在这里我们要预測小红对《了不起的盖茨比》这部电影的评分是多少(1-5),一个最简单的想法就是从全部用户中找到跟小红的品味相似的人。一眼望过去,小明跟小红的品味最相近(都是小李子的粉丝?都比較喜欢看煽情一点的电影?)。所以我们能够预測小红对《了不起的盖兹比》这部电影的评分应该是比較高的,所以在做电影推荐的时候,我们能够把《了不起的盖茨比》这部电影推荐给小红。这样的利用相似用户的信息进行推荐的算法叫做user-based(基于用户的)协同过滤算法,这样的而相相应的。就有item-based(基于商品的)协同过滤算法,基于商品协同过滤算法思想大致是。那些跟用户喜欢的商品相似的商品,在某种程度上说用户也应该喜欢,放在这里的话。小红喜欢《泰坦尼克号》这部电影,因为《泰坦尼克号》跟《了不起的盖茨比》比較相似,那么小红也理所当然地喜欢《了不起的盖茨比》这部电影。有关协同过滤算法,这篇博客进行了具体的介绍。


图一)


为了引出下文,这里插个没啥剧情没啥品味的小故事:
A公司利用协同过滤算法,为其下的每一个用户生成个性化的推荐之后,公司的营业额一天比一天高,而随着数据越来越丰富,A公司除了拥实用户对商品的评分这些数据外。还拥有各种上下文信息(如小红是在什么时候看的这场电影,是跟什么人一起看的,看完之后心情怎样等等),老板希望把这些上下文的信息都给利用上。但上面已经讲到。传统的协同过滤算法不过基于用户对商品的评分对用户进行推荐的,那么。有没有什么办法让A公司在不换掉这套算法的前提下。把这些上下文信息给利用上呢?

Splitting:

splitting的分类:
splitting方法分为item-splitting。user-splitting,UI-splitting三种。

splitting的基本思想:
对于某个事物X。假设它随着环境(上下文)的改变。X也发生非常大的变化,则应该觉得X在不同的环境(上下文)中是属于不同的事物,因此我们应该把它们切割开来。当成不同的事物对待。

splitting的做法:
这里以item-splitting来举例说明,item-splitting嘛,翻译成中文就是“项目-切割”。字面意思就是对一个项目(商品)进行切割,将其切割成几份,既然要切割。我们要拿什么来切割?怎么切割?切割成几份?

切割???~~~

言归正传,先来看第一个和第二个问题。拿什么来切割,怎么切割?看回前面的小故事,我们会非常自然而然地想到。这时候我们会用到上下文的信息来对item进行切割。在这里,我们看图二和图三中的两个矩阵:
图二


图三

图三是用户对泰坦尼克号的评分,而图二是用户在看这部电影时的一些上下文信息,item-splitting方法的思想是利用某个上下文条件对项目尝试进行切割,尝试切割成两个向量后,如果这两个向量有显著地不同。则应该把原来这个项目进行切割,如果上面的上下文条件中。“是否跟恋人”这个上下文条件能够让泰坦尼克号这个列向量在切割之后有显著地不同,则应该将其划分为两个向量,如图四:


图四


在图四中,根据“是否跟恋人”这个上下文条件对《泰坦尼克号》这个列向量进行切割后,形成了两个不同的向量(跟恋人,不跟恋人),在item-splitting方法中。相应的事实上是两个不同的电影。

在这里,引入一个新的问题,怎样推断一个向量在切割成两个向量之后。这两个向量有显著的不同,即怎样评判泰坦尼克号(跟恋人)和泰坦尼克号(不跟恋人)这两个列向量有显著的不同?

论文[1]中具体地解说了splitting的整个过程。在这里摘取当中一个评判两个向量是否有显著不同的公式:

图五


该公式是两个样本的t检验。在p值满足阈值(一般是p<=0.05满足)的情况下,t值越大,这两个向量越不同,当中,Ui是该电影的平均分,Si为该电影的评分方差。ni为该电影有多少个非零值,下标C和非C表示不同的上下文(跟恋人和不跟恋人)。

item-splitting的算法伪代码(摘自论文[1])如图六所看到的:
图六


将图一的矩阵在运行item-splitting后。如果除了《了不起的盖茨比》外,其它两部电影都被splitting了,则将会变成如图七的矩阵:
图七

利用上下文信息得到如图七的矩阵后。能够在该矩阵上套用传统的协同过滤算法。



最后看一下上面说到的切割成几份的问题,在上述过程中,对于每一个item,我们都是划分成2份,即是这个上下文的和不是这个上下文的,那么。我们能够将其划分成很多其它份吗?比方对于图二中的天气这一个上下文维度,对每一个项目划分成4份,即晴,下雨,阴天。下雪这四个。能够是能够,但论文[1]有提到这样划分不仅会带来时间成本的添加。也会导致评分矩阵过度稀疏,也会造成过拟合的问题。

splitting方法的优缺点及思考:

首先说下长处,splitting方法能够把有价值的上下文信息融入到传统的协同过滤算法中。从而提升推荐的效果。
再来说下缺点,从上面的伪代码来分析。我们能够知道,在上下文的维度非常高。且每一个维度有非常多值的情况下,整个splitting过程是十分耗时的,并且splitting耗费的这些时间不一定能非常大幅度的提升推荐的效果,注意我上面说splitting的长处的时候, 有特别地说明“有价值的上下文信息”,可是。什么上下文信息是有价值的呢?这又与业务背景有关,有人专门对上下文的选取做过研究。发现并非全部的上下文信息都能提升推荐的效果的。有时候引入不恰当的上下文,反而会减少推荐的效果,因此,对于splitting过程中要用什么上下文才干提升推荐效果。这也须要我们对业务背景有一定的了解。

在这里推荐一个github上的有关上下文推荐系统相当不错的项目:

https://github.com/irecsys/CARSKit

參考学习资料:

[1]L. Baltrunas and F. Ricci. Experimental evaluation of context-dependent collaborative filtering using item splitting.2013.
[2]Yong Zheng,Robin Burke,Bamshad Mobasher.Splitting Approaches for Context-Aware Recommendation: An Empirical Study.2014








转载于:https://www.cnblogs.com/yutingliuyl/p/7204925.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 百度云文字识别 proxy_python使用百度文字识别功能方法详解

介绍python使用百度智能去的文字识别功能&#xff0c;可以识别截图中的文&#xff0c;登陆路验证码等等。&#xff0c; 登陆百度智能云&#xff0c;选择产品服务。选择“人工智能”---文字识别。点击创建应用。 如图下面有关于“文字识别”的各类信息&#xff0c;如通用文字识别…

Android性能优化典范(转)

本文转自&#xff1a;http://hukai.me/android-performance-patterns/ 2015新年伊始&#xff0c;Google发布了关于Android性能优化典范的专题&#xff0c;一共16个短视频&#xff0c;每个3-5分钟&#xff0c;帮助开发者创建更快更优秀的Android App。课程专题不仅仅介绍了Andr…

Xamarin效果第二十一篇之GIS中可扩展浮动操作按钮

在前面文章中简单玩了玩GIS的基本操作、Mark相关、AR、测距和加载三维白模,今天再次对操作栏又一次修改了,直接放到了右下角可伸缩效果;啥也不说了都在效果里:添加支持圆角 ContentView:Xamarin.Forms.PancakeView再来Xamarin 社区工具包:Xamarin.CommunityToolkit再来看看最终…

【新版发布】ComponentOne 新增 .NET 6 和 Blazor 平台控件支持

ComponentOne Enterprise是葡萄城推出的一款内置 300 多种开发控件的 .NET控件集&#xff0c;可满足 WinForm、WPF、Blazor、ASP.NET MVC 等平台下的系统开发需求&#xff0c;提供表格数据管理、数据可视化、报表和文档等功能&#xff0c;被开发人员誉为“.NET开发的‘瑞士军刀…

Ruby如何成长成高性能系统构架

为什么80%的码农都做不了架构师&#xff1f;>>> 结束了一份Ruby为主的工作,想把个方面总结一下,这篇是关于系统性能方面的.以下数据都是简单回忆的数据,加之企业保密数据的需要,和精确数有些出入,仅供参考. 说起Ruby的性能,无论从官方到社区,都公认是劣于其它的框架…

ArcGIS 10.2数字化线状要素时自动拼接成一条线

&#xff08;1&#xff09;在已有线的基础上自动连接成一条线 数字化时&#xff0c;经常会碰到这种情况&#xff0c;不小心双击了&#xff0c;或者画到一半饿了&#xff0c;双击完成去吃饭了&#xff0c;回来继续画&#xff0c;该怎样去做呢&#xff1f; 一开始一直和捕捉和经典…

设置tableView的分割线从最左端开始

苹果原生的tableView的cell分割线默认是没有从最左端开始&#xff0c;有时候这样不免影响美观&#xff0c;有时也会有这样的需求&#xff0c;设置tableView的分割线从最左端开始&#xff1a; 不多说了&#xff0c;直接上代码吧&#xff1a; //分割线从顶端开始 --------适配iO…

java 定时 spring_Spring定时任务实现与配置(一)

朋友的项目中有点问题。他那边是Spring架构的&#xff0c;有一个比较简单的需要定时的任务执行。在了解了他的需求之后&#xff0c;于是提出了比较简单的Springquartz的实现方式。注意本文只是讨论&#xff0c;在已搭建完毕的Spring工程下&#xff0c;完成最简单的定时任务。第…

内核同步机制

内核中用于临界区保护下的互斥机制&#xff0c;它包括自旋锁、原子操作和信号量&#xff0c;三者保证了对临界资源访问的互斥型。 1.1 内核中的互斥机制 1.1.1 自旋锁 自旋锁用在多个CPU系统中。当一个线程在一个CPU上正使用资源&#xff0c;而另一个线程在另一个CPU上正忙等待…

makefile运行_NVDIA TX2入门 系列之三:运行Yolov3

上篇TX2安装完成OpenCV 3.4.0之后&#xff0c;基本软件包已经安装完成&#xff0c;本篇开始安装并运行大名鼎鼎的号称速度最快的目标识别分类算法Yolov3。Yolov3 是啥啊Yolov3是一款基于darknet深度学习框架的目标检测开源项目&#xff0c;目前已经发展到第3版本&#xff0c;即…

C#实现树的双亲表示法

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace 树的实现 {public partial class Form1 : Form{public Form1(){Init…

MySQL存储写入速度慢分析

一、存储结构分析MySQL存储结构图&#xff1a;解析&#xff1a;1、读操作&#xff1a;内存读-->cache缓存读-->磁盘物理读读取到的数据会按上述顺序往回送。2、写操作&#xff1a;内存数据直接写入cache缓存(非常快)-->写入disk由上可知&#xff0c;MySQL之所以读写速…

windows 建立wifi热点

1、以管理员身份运行命令提示符&#xff1a;netsh wlan set hostednetwork modeallow ssidmywifi key123456其中ssid为wifi名称&#xff0c;key为wifi密码。2、设置Internet连接共享&#xff1a;在“网络连接”窗口中&#xff0c;右键单击已连接到Internet的网络连接&#xff0…

【C语言简单说】一:第一个C语言程序

注册CSDN有些年头了&#xff0c;但是从未写过任何任何的东西。 几年前的懵懵懂懂&#xff0c;现在虽然依旧懵懂但是还好&#xff0c;能够听得懂大触们大致再说神马东西了。 这段时间有点怀疑人生&#xff0c;由于本人才疏学浅&#xff0c;所以只好留下一点帮助小白级入门的干货…

腾讯视频VIP会员,周卡特价9元!腾讯官方直充,会员立即生效!

腾讯视频新剧热播&#xff0c;但去广告必须是腾讯视频VIP会员&#xff0c;今天就给大家推荐特价充值腾讯视频VIP会员的平台——幻海优品&#xff0c;官方在线直充&#xff0c;会员秒到&#xff01;腾讯视频VIP会员特价充值周卡&#xff1a;原价12元&#xff0c;特价9元月卡&…

google+stackoverflow_哪些开发问题最让程序员“头秃”?我们分析了Stack Overflow的11000个问题...

作者 | Nick Roberts编译 | AI科技大本营(ID:rgznai100)自 2008 年成立以来&#xff0c;Stack Overflow 一直在拯救所有类型的开发人员。自那时以来&#xff0c;开发人员提出了数百万个关于开发领域的问题。但是&#xff0c;迫使开发者转向 Stack Overflow 的问题都是什么呢&am…

mybatis 返回 插入的主键

2019独角兽企业重金招聘Python工程师标准>>> 一般返回的是 数据库的 自增的 主键&#xff0c;&#xff0c;&#xff0c; 百度了一通&#xff0c;&#xff0c;我 刚开始 以后 可以 通过 插入的方法的&#xff0c;&#xff0c; 返回值 可以获取到 自增的主键&#xff…

Source Generator实战

前言最近刷B站的时候浏览到了老杨的关于Source Generator的简介视频。其实当初.Net 6刚发布时候看到过微软介绍这个东西&#xff0c;但并没有在意。因为粗看觉得这东西限制蛮多的&#xff0c;毕竟C#是强类型语言&#xff0c;有些动态的东西不好操作&#xff0c;而且又有Fody、N…

Linux Swap分区设定

因为准备在linux上面安装Oracle数据库&#xff0c;据说swap分区小于4G容易失败&#xff0c;天啦噜的我连swap分区是啥都不是非常清楚&#xff0c; 大概有个印象吧&#xff0c;但先搞大了再说。 测试证明Ubuntu14默认的swap分区是和初期设定的内存大小一样一样的。 最初因为手速…