推荐算法之向量之间的距离

本文介绍了推荐算法中的协作型过滤,通过寻找用户间的相似度进行内容推荐。主要讨论了欧几里得距离和皮尔逊相关度两种方法,用于计算用户评分向量的相似性。欧几里得距离关注向量的绝对距离,而皮尔逊相关度考虑评分的相对变化,更适合处理评分尺度不同的情况。
摘要由CSDN通过智能技术生成

介绍

协作型过滤

对一大群人进行搜索,找出与我们品味相同的人。算法对这些人偏爱的其他的内容进行考察,并把它们组合起来形成一个经过排名的推荐列表。

先找到和我们志趣相投的人,那么那些志趣相投的人推荐的东西,肯定是我们喜欢的。

寻找相似的用户

把每个人与所有其他人进行比较,并计算他们的相似度评价值。有两种方法:欧几里得距离和皮尔逊相关度。

欧几里得距离本质是求出两个向量的夹角。皮尔逊相关度是对向量标准化(减去平均值)之后再求它们的夹角。

欧几里得距离

欧几里得距离就是把每个人对电影的评价当作一个多维空间中的向量。两个人的相似程度就是两个向量的距离。

1.    向量的维度就是电影名称

2.    每个维度的值就是对这个电影的评分。

可以通过下面的函数计算两个人的相似度。最后的返回值做了Normalization,保证返回1是完全相似。返回0是完全不相似。

def sim_distance(prefs, p1, p2):
    ''' 
    Returns a distance-based similarity score for person1 and person2.
    '''

    # Get the list of shared_items
    si = {}
    for item in prefs[p1]:
        if item in prefs[p2]:
            si[item] = 1 
    # If they have no ratings in common, return 0
    if len(si) == 0:
        return 0
    # Add up the squares of all the differences
    sum_of_squares = sum([pow(prefs[p1][item] - prefs[p2][item], 2) for item in
                         prefs[p1] if item in prefs[p2]])
return 1 / (1 + sqrt(sum_of_squares))

皮尔逊相关度

如果某个人评分总是比另外的人高,欧几里得距离就不是那么合适了。这个时候可以用皮尔逊相关度来计算两个变量的相关程度。

pearson其实做的事情就是先把两个向量都减去他们的平均值,然后再计算两个向量

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
距离向量算法(Distance Vector Algorithm,简称DVA)是一种用于计算网络中路由表的分布式算法。它是一种基于距离的路由选择算法,常用于计算机网络中的路由器之间的通信。 在C语言中,实现距离向量算法需要考虑以下几个方面: 1. 路由表的表示:可以使用数组或者结构体来表示路由表,其中每个元素包含目标节点、下一跳节点和距离等信息。 2. 初始化路由表:在开始时,需要初始化每个节点的路由表。一般情况下,节点会将自己到达其他节点的距离设置为无穷大,将自己到达自己的距离设置为0,并将下一跳节点设置为空。 3. 距离更新:节点会周期性地向相邻节点发送距离向量信息,并接收相邻节点发送过来的距离向量信息。通过比较接收到的距离向量信息和自身的路由表,节点可以更新自己的路由表。 4. 路由选择:根据路由表中的信息,节点可以选择最短路径来进行数据传输。当网络拓扑发生变化时,节点会根据接收到的距离向量信息更新自己的路由表,以适应新的网络环境。 以下是C语言中实现距离向量算法的一些关键步骤: 1. 定义路由表的数据结构,包含目标节点、下一跳节点和距离等信息。 2. 初始化路由表,将自己到达其他节点的距离设置为无穷大,将自己到达自己的距离设置为0,并将下一跳节点设置为空。 3. 周期性地向相邻节点发送距离向量信息,并接收相邻节点发送过来的距离向量信息。 4. 根据接收到的距离向量信息更新自己的路由表。比较接收到的距离向量信息和自身的路由表,更新距离和下一跳节点等信息。 5. 根据路由表中的信息选择最短路径进行数据传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值