推荐算法--时效性(05)

时效性

推荐系统应该考虑时间效应,因为用户的兴趣是有时间变化的。用户一年前喜欢的东西现在不一定感兴趣,相比于推荐过去喜欢的物品,推荐用户近期喜欢的物品更有参考价值。而在新闻更是如此,推荐过去跟用户兴趣一致的新闻已经失去了意义。每个系统时间效应的大小不同,比如时间对电影的作用就没有新闻那么明显。要考虑时效性,必须加入时间参数,比如三元组(用户,物品,时间)代替简单的二元组(用户,物品)。给定时间 T ,一般化的时间衰减公式为:


其中  是物品 i 最近的流行度,是时间衰减参数,对于时效性明显的系统,应该越大。代码实现如下:

  1. def RecentPopularity(records, alpha, T):
  2. ret = dict()
  3. for user, item ,tm in records:
  4. if tm > T:
  5. continue
  6. addToDict(ret , item, 1/(1.0 + alpha * (T - tm)))
  7. return ret

时效性的 ItemCF 算法

前面提到的 ItemCF 算法有两个核心组成,(1)物品相似度矩阵(2)基于用户历史行为做推荐

(1)加入时效性考虑,用户在相隔很短的时间内喜欢的物品的相似度应该高于时间跨度比较大的用户喜欢物品之间的相似度。原来的物品相似度公式为:


在得到时间信息(用户对物品产生行为的时间)后,加入时间衰减函数的公式如下:


衰减项中,其中 是用户u 对物品 i 产生行为的时间。f 函数的意义是,用户对物品 i 和物品 j 产生行为的时间越远,则  越小。可以找到很多数学衰减函数,比如


是时间衰减参数,它的取值在不同的系统中不同。系统用户兴趣变化的越快,应该越大。改进后的 ItemCF 算法的物品相似度矩阵计算代码如下所示:

  1. def ItemSimilarity(train, alpha):
  2. #计算 C[i][j] 矩阵
  3. C = dict()
  4. N = dict()
  5. for u,items in train.items():
  6. for i,tui in items.items(): #原来是没有 tui 的
  7. N[i] += 1
  8. for j, tuj in items.items():
  9. if i == j:continue
  10. C[i][j] += 1 / (1 + alpha * abs(tui - tuj))
  11. #计算 W[i][j]
  12. W = dict()
  13. for i, related_items in C.items():
  14. for j, cij in related_items.items():
  15. W[i][j] = cij / math.sqrt(N[i] * N[j])
  16. return W

除了考虑时间对物品相似度的影响,还要考虑时间信息对推荐预测的影响。一般来说,用户最近的喜好应该和用户兴趣关系更大,需要将时间比较久的过去的喜欢的物品加上时间衰减函数。


其中  是现在的时间, 是用户u 对 物品 i 评价过的时间。 代码修改如下:

  1. def Recommendation(train, user_id, W, K,t0):
  2. rank = dict()
  3. ru = train[user_id]
  4. for i,pi in ru.items():
  5. rui, tui = pi
  6. for j, wji in sorted(W[i].items, key = itemgetter(1), reverse = True)[0:K]:
  7. if j in ru.keys():
  8. continue
  9. rank[j] += rui * wji / (1 + beta * (t0 - tui))
  10. return rank

时效性的 UserCF 算法

类似 ItemCF ,UserCF 也有两个核心。(1)计算用户相似度矩阵(2)基于相似用户兴趣做推荐

(1)加入时效性考虑,如果两个用户在比较近的时间里有共同的喜好,则比在不同时间段用户有相同喜好的参考意义更大。回顾原来的用户相似度公式如下:


其中 N(u) 是用户 u 喜欢的物品集合,N(v) 是用户 v 喜欢的物品集合。加入时间衰减因子修正公式如下:


其中  是用户 u 喜欢物品 i 的时间, 是用户 v 喜欢物品 i 的时间。代码如下:

  1. def UserSimilarity(train):
  2. #建立倒排表,比原来多加入了时间信息
  3. item_users = dict()
  4. for u, items in train.items():
  5. for i, tui in items.items():
  6. if i not in item_users:
  7. item_users[i] = dict()
  8. item_users[i][u] = tui
  9. # 计算 C[u][v]
  10. C = dict()
  11. N = dict()
  12. for i, users in item_users.items():
  13. for u,tui in users.items():
  14. N[u] += 1
  15. for v,tvi in user.items():
  16. if u == v:continue
  17. C[u][v] += 1 / (1 + alpha * abs(tui - tvi))
  18. # 计算 W[u][v]
  19. W = dict()
  20. for u, related_users in C.items():
  21. for v,cuv in related_users.items():
  22. W[u][v] = cuv / math.sqrt(N[u] * N[v])
  23. return W

同样地,处了考虑时间信息对用户相似度矩阵的影响,还应该考虑时间信息对推荐算法的影响。找到相似的用户后,认为推荐相似用户近期感兴趣的物品比推荐过去感兴趣的物品更有意义。原来的 UserCF 算法中用户 u 对物品 i 的兴趣公式如下:


加入时间衰减函数后,改进 UserCF 推荐公式如下:


其中 代表现在的时间, 代表相似的用户 v 喜欢物品 i 的时间。改进后的推荐算法代码如下:

  1. def Recommend(user, t0, train, W):
  2. rank = dict()
  3. interacted_items = train[user] # user的已有物品
  4. for v, wuv in sorted(W[user].items, key = itemgetter(1), reverse = True)[0:K]:
  5. for i, pi in train[v].items:
  6. rvi, tvi = pi
  7. if i in interacted_items:continue
  8. rank[i] += wuv * rvi / (1 + alpha * (t0 - tvi))
  9. return rank

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

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

相关文章

推荐算法--推荐系统架构(06)

外围架构一般来说,每个网站都有一个 UI 系统,UI 系统负责给用户展示网页并和用户交互。网站会通过日志系统将用户在 UI 上的各种各样的行为记录到用户行为日志中。 从上面的结构可以看到,除了推荐系统本身,主要还依赖两个条件--界…

Python(6)-算数运算符

算数运算符1.算数运算符2.优先级1.算数运算符 加 减- 乘* 除/ 取商// 取余数% 幂**(能算n次方: 2**38,一直以为只能算平方) 扩展: 乘法用于字符串:字符串重复指定的次数,要拼接的次数很长时,用乘号很方便…

推荐算法--其他信息(07)

文章目录目录1.利用上下文信息1.1时间上下文1.2地点上下文2.利用网络社交数据2.1 获取网络社交数据途径2.2 社交网络数据2.3 基于社交网络的推荐2.4 推荐算法2.5 给用户推荐好友目录 1.利用上下文信息 1.1时间上下文 用户的兴趣是随着时间变化的,三天打鱼两天晒网…

Python(7)-程序执行的原理

程序执行的原理1.计算机中的三个核心部件2.程序执行的原理3.程序的作用1.计算机中的三个核心部件 CPU:中央处理区,超大规模的集成电路,负责处理数据、计算 内存:临时存储数据,断电数据消失,读取数据快 硬盘…

橙白oj 2017级《算法分析与设计》-练习02

注:A题我以为给新生出的,应该贼简单,是按顺序消灭,卡了十几分钟,成了最后一个ac的题,真是菜的真实。 Problem A: Description 白细胞是人体与疾病斗争的“卫士”。当病菌侵入人体体内时,白细胞…

python(9)-变量、input函数

变量、input函数1.变量的定义(不可变对象)2.变量的类型3.变量的命名规范4. 不同类型的数据计算5.类型转换函数6.input()7.Tips程序是用来处理数据的,而变量是用来存储数据的。 关于函数,是一个提前准备好的代码;可以直接使用,不用…

推荐算法--总结(08)

一、推荐系统结构二、推荐引擎算法(Algorithm)1、协同过滤推荐算法1.1 关系矩阵与矩阵计算1.1.1 用户与用户(U-U矩阵)1.1.2 物品与物品(V-V矩阵)1.1.3 用户与物品(U-V矩阵)1.1.4 奇异…

算法总结-1算法入门

1.0 前言 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 …

FM系列算法解读(FM+FFM+DeepFM)

在计算广告中,CTR是非常重要的一环。对于特征组合来说,业界通用的做法主要有两大类:FM系列和Tree系列。这里我们来介绍一下FM系列。   在传统的线性模型中,每个特征都是独立的,如果需要考虑特征与特征之间的相互作用…

二叉树层序遍历

层序遍历序列为:ABCDEFG 思路:栈是先进后出的数据结构,而队列是先进先出的数据结构。 我们层序遍历,很明显,先遇到的节点先打印,不同于前中后序遍历,我们采用队列结构。 具体执行过程如下&…

深度学习(01)-- 基础学习

文章目录目录1. 深度学习基础1.1 深度学习总览1.2 深度网络训练过程1.2.1 传统神经网络的训练方法为什么不能用在深度神经网络1.2.2 deep learning训练过程1.3 数学知识:2. 九种深度学习模型2.1 受限玻尔兹曼机RBM2.2 自编码器AE(降维)2.3 深…

MachineLearning(1)-激活函数sigmoid、损失函数MSE、CrossEntropyLoss

损失函数1.激活函数2.损失函数2.1均方误差损失函数2.2交叉熵损失函数2.3 NLLLoss()2.4 BCELoss()1.激活函数 全连接网络又叫多层感知器,多层感知器的基本单元神经元是模仿人类神经元兴奋与抑制机制,对其输入进行加权求和,若超过某一阈值则该…

Java的IO总结

非流式文件类--File类 从定义看,File类是Object的直接子类,同时它继承了Comparable接口可以进行数组的排序。 File类的操作包括文件的创建、删除、重命名、得到路径、创建时间等,以下是文件操作常用的函数。 File类是对文件系统中文件以及文…

深度学习(02)-- ANN学习

文章目录目录1.神经网络知识概览1.1深度学习顶会1.2相关比赛1.3神经网络知识概览1.4神经网络编程一般实现过程2.简单神经网络ANN2.1 数据集:2.2 网络结构:2.3 代码实现2.3.1 读取数据,并做处理2.3.2 构建网络结构2.3.3 训练网络目录 1.神经网…

python(11)-if语句,断言assert

分支语句if1.if基本语法2 if语句的嵌套3 比较运算符号4 逻辑运算符:5 整数随机数初应用6 tip7.断言assert1.if基本语法 if语句开发中的应用场景:如果条件成立做一件事情,如果条件不成立做另外一件事情。有了if语句,程序有了分支.…

深度学习(03)-- CNN学习

文章目录目录1.CNN学习2.Keras深度学习框架目录 1.CNN学习 卷积神经网络CNN总结 从神经网络到卷积神经网络(CNN)我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,…

PaperNotes(1)-Modeling the World from Internet Photo Collections

从网络图片集对世界进行建模AbstractIntroduction2 Previous Work2.1特征匹配2.2 稀疏重建2.3 基于图像建模2.4 基于图像的渲染2.5 图像浏览,检索和注释3 Overview概述4 Reconstructing Cameras and Sparse Geometry(相机标定与稀疏重建)4.1K…

深度学习(04)-- 典型CNN结构(LeNet5 ,AlexNet)

LeNet5 LeNet5可以说是最早的卷积神经网络了,它发表于1998年,论文原文Gradient-Based Learning Applied to Doucment Recognition作者是Yann Le Cun等。下面对LeNet5网络架构进行简单的说明,有兴趣的同学可以去参考原文,论文原文…

CNN的几种经典模型

本文主要介绍一下CNN的几种经典模型比较。之前自己也用过AlexNet和GoogleNet,网络上关于各种模型的介绍更是形形色色,自己就想着整理一下,以备自己以后查阅方便 LeNet5 先放一张图,我感觉凡是对深度学习有涉猎的人,对…

PaperNotes(2)-Generative Adversarial Net-代码实现资料

Generative Adversarial Nets-生成对抗网络Abstract1.Introduction2.Related work3.Adversarial nets4.Theoretical Results4.1全局最优 pgpdatap_gp_{data}pg​pdata​4.2算法1的收敛性质5.Experiments6.Advantagesa and disadvantages7.Conclusions and future work8.GAN-代码…