推荐系统学习之概率算法及其增量算法
来源:互联网 发布:刘嘉玲康康 知乎 编辑:程序博客网 时间:2024/06/05 10:42
0.絮
- 前些阵子了参加了一个天池的推荐比赛,做了一些,想了很多,因此有了下文。顺便了解过一点markdown,发现还挺好的。这次用用看。
- 不久之前在使用链表的时候,遇到一个困难:怎么让有序链表的有序产生应有的提升查询效率的作用。答案:skip_link
1.推荐算法与概率
谈到推荐吧,我知道的也很少,总括的这种就不吹了。第一个和概率有关的推荐算法应该是“关联规则挖掘”,就是置信度、支持度那个,我就不多言了,接下来一个的则是“Page Rank”,这一个方法曾经被广泛的用于搜索引擎的网页排名中,亦是本文将要关注的重点对象。而选择这一个too young too naive的算法出发的原因就是it is simple。
2.环境设定
在PR(PageRank)中,只有一个要素:网页,一种关系:网页与网页之间的Arrow(矢量:既有大小又有方向),而在推荐中涉及两个要素:U 用户和I 物品,一种关系:用户作用(购买、浏览、评价)了物品的Arrow。为了能够尽情的抄袭 PR我们做以下两点假设:
- U和I的地位是等价,我们可以尽情的把它们当做Page来处理。
- 每一个Array(作用)都是双向的 。
完全不了解PR的朋友可以点击脑补一下
2.1.转移矩阵 T
与PR类似,转移矩阵T是这个方法中的关键部分。转移矩阵如下图所示:分为四部分。
- UU矩阵:用户到用户之间的转移矩阵,为0矩阵,m为用户个数。
- UI矩阵 :用户到物品的转移矩阵,用户购买的物品取值为1/NumI(NumI为用户购买物品数量)。
- IU矩阵 :物品到用户的转移矩阵,购买过该物品的用户位置取值1/NumU(NumU为该物品的购买用户数)。
- II矩阵 :商品到商品的转移矩阵,为0矩阵,n为物品个数。
整体是一个(m+n)的方阵,前面m个是用户的部分,后面n个为商品的部分。
2.2得分矩阵 S
与T矩阵类似也分为4个部分:
- UU矩阵:向用户到用户的推荐得分。
- UI矩阵 :向用户推荐物品的得分矩阵。
- IU矩阵 :向物品推荐用户的得分矩阵。
- II矩阵 :向商品推荐商品的得分矩阵。
- 整体是一个(m+n)的方阵,初始得分记做S0,为单位矩阵。
始终满足以下等式:
Sn+1=SnT Sn=S0Tn
不难发现
- 当n为偶数时,Sn中的紫色块为0矩阵,可以解释为同类元素之间的相似性(包括物品相似性和用户相似性)。
- 当n为奇数时,Sn中的非紫色块为0矩阵,可以解释为不同类元素之间的相似性(向用户推荐物品得分以及向物品推荐用户得分)。
3.该方法的简单性质
3.1Sn 可计算
3.2增量 ΔSn 可描述
增量的描述
为了将说明过程简化一些,这里取
我们知道
因此有:
ΔS3=S0(ΔT+T0)3−S0T3 ≈S0(ΔTTT+TΔTT+TTΔT) (当ΔT 较小时,忽略ΔT 的高阶项)
由
增量的计算
当用户购买商品个数由N1增加为N2时,T矩阵会发生两个变化:
- T矩阵对应用户行的N1个非空元素,值由1/N1变为1/N2,变化量为
N2−N1N2N1 。 - T矩阵对应用户行增加N2-N1个非零元素,值为1/N2。
由于上述1的原因所以
4.用户与商品的非等价地位
用户与商品的类同是否合理呢?当我第一次接触推荐系统的时候,这个问题就一直困扰我了。这儿再次提出它,当然还包括我对它的回答。简单的推荐系统中只有一种数据:用户选择了商品,也就是只有一种方向,为了自由的抄袭 PR我们假设了商品选择了用户的这种关系。假如承认商品和用户之间的选择与被选择关系,那么原有的购买关系就必须是不可逆的。那么问题就来了:T矩阵怎么构造才能够让这个推荐过程得以持续?
这个问题在最近才想到了一个回答,而回答的关键是贝叶斯。T矩阵实际是一个概率转移矩阵,其中UU块与II块都为零,UI块记录的是根据历史统计的的用户购买任意商品的概率。”IU块”记录的内容应该为:当商品被购买发生时,是每一个用户购买了该商品的概率。根据贝叶斯公式和 UI块记录的每一个用户购买任意商品的概率可以计算得到IU块的内容。至于放弃从物品的角度来直接统计IU块内容的原因,我也没想通透——也许上面的做法也不是最正确的做法,只是离正确更近一步。
5.小结
基于统计概率的方法,可谓是有坚实的数学基石,本文一直没有讨论它的正确性(在基于邻域的推荐方法中应该属于前列)以及拓展性(时间动态、用户标签商品标签等多数据源引入等),期望感兴趣的朋友可以结合实例一起完善这一块内容。
推荐系统这个话题被讨论的很多,各种乱七八糟的东西也是五花八门,简单可分为两种:
- 正向思维方法:先发现(假设)事物符合某个理论(假设的不好就是谬论)规律从而得到
H 函数,然后根据X的值得到Y=H(X) 的对应输出结果。 - 逆向思维方法:先有很大的训练集合(也就是X和Y),然后不停的修改函数H,得到一个合适的H,然后根据X的值得到
Y=H(X) 的对应输出结果。
这让我想起了一个问题:真理是否存在,真理是否唯一。我相信有最正确(而不是最合适)的算法存在,而同时希望它能被简单的描述。
We read the world wrong and say that it deceives us. 理性参阅
- 推荐系统学习之概率算法及其增量算法
- 推荐系统学习之近邻算法推荐10个电影
- java基础算法学习之概率算法
- 算法学习笔记之概率算法
- 机器学习算法~推荐系统
- 推荐系统之SlopeOne算法
- 推荐系统之算法介绍
- 推荐系统算法之协同过滤算法
- 机器学习----推荐系统之协同过滤算法
- [机器学习]推荐系统之协同过滤算法
- mahout学习之推荐算法
- 【推荐系统算法】推荐引擎算法学习导论
- 【推荐系统算法】推荐引擎算法学习导论
- 概率算法学习
- 算法研究之概率
- 算法之概率思想
- 机器学习->推荐系统->userCF算法
- 机器学习->推荐系统->itemCF算法
- Codeforces Round #340 (Div. 2) C
- android开发人员收藏网站
- 【Android】各个版本发布
- Atom插件go-plus的离线安装
- OC基础之字典,集合,字符串
- 推荐系统学习之概率算法及其增量算法
- CrazyFlie源码学习2-Stabilizer任务
- android适配
- LLVM
- java_67---67,68没有看,pass
- CompletableFuture(二)
- 二维LIS Gym100820G Racing Gems
- P25 (*) Generate a random permutation of the elements of a list.
- [Leetcode] 98. Validate Binary Search Tree @python