概率图模型

本文介绍了一种基于随机游走算法的个性化推荐方法。该方法首先构建用户和物品之间的二分图,然后通过随机游走计算用户对不同物品的偏好概率。文中详细解释了随机游走的过程,并给出了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法思想:

1.将用户对物品的反馈记录,转换为2分图
2.使用随机游走算法,计算从用户节点u到物品节点i的概率,作为用户对物品的喜好
 
(2分图)例子:
数据集2分图
Aa
Ab
Ba
Bc
Cb
 
(随机游走)分析:
比如从A点出发,每一步,有$\alpha$的概率继续往下走,$1-\alpha$的概率返回A
如果将所在位置的概率表示为向量,则初始向量为 $r_0=(1,0,0,0,0,0) $对应(A,B,C,a,b,c),
经过第一步后,$r=(1-\alpha,0,0,0.5,0.5,0)$
根据,构建矩阵
 
可以知道:,经过迭代后最终收敛,
求得到
 
代码:
def PersonalRank(G, alpha, root):
    rank = {x:0 for x in G.keys()}
    rank[root]=1
    
    for i in range(20):
        tmp = {x:0 for x in G.keys()}
        for node,rk in rank.items():
            paths=G[node]
            for path in paths:
                tmp[path] += alpha*rk/len(paths)
            
        tmp[root] += (1-alpha)
        rank = tmp
    
    return rank

record=[('A','a'),('A','b'),('B','a'),('B','c'),('C','b')]
g = {}
for rec in record:
    if rec[0] not in g:
        g[rec[0]]=set()
    g[rec[0]].add(rec[1])
    
    if rec[1] not in g:
        g[rec[1]]=set()
    g[rec[1]].add(rec[0])
    
print PersonalRank(g,0.9,'A')

 

转载于:https://www.cnblogs.com/porco/p/4421401.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值