• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

二部图解析以及python代码实现

ml admin 4个月前 (03-03) 134次浏览 0个评论 扫描二维码

许多网站都喜欢让用户点击“喜欢/不喜欢”,“顶/反对”,也正是这种很简单的信息也可以利用起来对用户进行推荐!这里介绍一种基于网络结构的推荐系统!

由于推荐系统深深植根于互联网,用户与用户之间,商品与商品之间,用户与商品之间都存在某种联系,把用户和商品都看作节点,他(它)们之间的联系看作是边,那么就很自然地构建出一个网络图,所以很多研究者利用这个网络图进行个性化推荐,取得了不错的效果!

2.二部图

上面就是一个二部图:分为连个部分,圆圈代表的节点为一部分,方块代表的节点为另一部分,二部图的特点:边只存在与不同类之间,同一部分之间的节点之间不存在边连接,正如上图所示,圆圈与圆圈之间没有边,方块与方块之间也没有边,边只存在于圆圈与方块之间.

3.概率传播(probability spreading,ProbS)

本文要实现的基于二部图的推荐系统利用了一种叫做概率传播的机制,这里做一个介绍:

在(a)中,对上面的一部分节点分配初始资源 x, y, z, 在(b)中资源以等概率传播的方式,从上面的节点传递给下面的节点,所谓等概率传播,就是每一节点的资源平均传递给它的每一个与它存在边联系的节点,在(c)中资源又以等概率传播的方式传回到上面的节点,可以看出原来三个节点的资源由 x, y, z 变为 11x/18+y/6+5z/18, x/9+5y/12+5z/18, 5x/18+5y/12+4z/9,这样传播的目的是什么呢?

我们知道在二部图中,同一部分节点之间是没有边连接的,那么同一部分之间节点之间的关系就没法直接找到,通过这种二步传播的方式之后,每一个节点的资源都混合有其他节点的资源,把上面三个节点从左到右分别记为 A, B, C,A 包含了 1/6 来自于 B 节点的资源,还包含了 5/18 来自于 C 节点的资源,很显然对于 A 节点而言, C 节点要比 B 节点重要一些,所以就利用传播后的这些系数来表示同一部分节点之间的关系权重,我们用 x’, y’, z’来表示第二次传播后的资源,则有:

上面的数值矩阵就是节点之间的关系权重矩阵,例如 A 节点对 B 节点之间的关系权重为 1/6,注意这是一个非对称的:B 节点对 A 节点的关系权重为 1/9,怎么理解呢?可以理解为你把一个妹子看作是女神,但是这个妹子心中的 Mr Right 很可能是另外一个人,这种关系是不对等的. 也正是隐藏的这种不对等关系,正好有利于个性化推荐.

3.利用 ProbS 产生推荐

还是对未评价过的商品进行预测评分,把评分较高的若干商品推荐给目标用户:

还是以上面的二部图为例,把上面的 3 个节点看作是商品节点,从左到右分别记作 A, B, C,下面的 4 个节点看作是用户,从左到右分别记作 U1, U2, U3, U4, 存在边连接的用户和商品,表示对应的用户喜欢该商品。那么这个二部图用邻接矩阵可以表示为:

ABC
U1100
U2111
U3011
U4101

 

现在我们想预测 U3 对 A 商品的喜欢程度会如何,已知 U3 喜欢商品 B 和 C,写出上面推导出的关系权重矩阵:

由此可以知道 A 商品与 B, C 商品的关系权重分别为 1/6, 5/18,那么预测喜欢程度:

1*1/6 + 1*5/18 = 4/9,

如果有更多未知喜欢程度的商品,都是以这种方式:根据用户已经喜欢的商品与未知喜欢程度商品之间的关系权重来预测这个用户对要预测商品的喜欢程度的评分,根据评分高低,优先向用户推荐高分商品!


下面给出 python 实现的二部图 ipynb 演示代码

;


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明二部图解析以及 python 代码实现
喜欢 (0)
admin
关于作者:

您必须 登录 才能发表评论!