基于用户的协同过滤算法(UserCF)

基于用户的协同过滤算法:

  1. 找到和目标用户相似的用户集合
  2. 找到这个集合中用户喜欢的但目标用户没有听过的物品
#encoding: utf-8
from Similarity import Person
from Sort import select_sort

file=open(‘user_bookmark‘,‘r‘)
filew=open(‘user_bookRecommend‘,‘w‘)

#加载训练集
trainSet={}
while True:
    line=file.readline().strip()
    if not line: break
    userId,itemId=line.split("::")
    trainSet.setdefault(userId,[])
    trainSet[userId].append(itemId)

# 计算每个用户和其他所有用户的相似度,排序,获得相似度最高的前N个用户,
# 在计算每个用户的相似度*物品的偏好值(这里没有评分就把偏好值设置为1)

for v in trainSet.keys():
    v2u={}
    K={}
    for u in trainSet.keys():
       if u!=v:
          sim=Person(trainSet[v],trainSet[u])
          v2u.setdefault(u,sim)
    keys,values=select_sort(v2u)

    s=v
    for i in range(len(values)-3,len(values)):
       s=s+"::"+keys[i]+" "+str(values[i])
       K.setdefault(keys[i],values[i])

    rank={}
    rki=1
    interacted_items=trainSet[v]
    for k,simk in K.items():
        for i in trainSet[k]:
            if i in interacted_items:
                continue
            rvi=rki*simk
            rank.setdefault(i,rvi)
    s1=v
    _keys,_values=select_sort(rank)
    for i in range(len(rank)-6,len(rank)):
         #s1=s1+_keys[i]+" "+str(_values[i])+"::"
         s1=s1+"::"+_keys[i]
    print s1
    filew.write(s1+‘\n‘)

from math import sqrt

def Person(item_a,item_b):
    if len(item_a)==0 or len(item_b)==0:
        return 0;
    else:
        sum=0
        for i in range(len(item_a)):
            for j in range(len(item_b)):
                if item_a[i]==item_b[j]:
                    sum=sum+1
        if sum==0:
            return 0
        else:
            sim=sum/sqrt(len(item_a)*len(item_b))
            return sim

  

时间: 2024-08-01 10:44:28

基于用户的协同过滤算法(UserCF)的相关文章

Mahout实现基于用户的协同过滤算法

Mahout中对协同过滤算法进行了封装,看一个简单的基于用户的协同过滤算法. 基于用户:通过用户对物品的偏好程度来计算出用户的在喜好上的近邻,从而根据近邻的喜好推测出用户的喜好并推荐. 图片来源 程序中用到的数据都存在MySQL数据库中,计算结果也存在MySQL中的对应用户表中. package com.mahout.helloworlddemo; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.

基于用户的协同过滤算法

基于用户的协同过滤算法-参考<推荐系统实践>一书,作者:项亮 1 import random 2 import math 3 class UserBasedCF: 4 def __init__(self,datafile = None): 5 self.datafile = datafile 6 self.readData() 7 self.splitData(3,47) 8 def readData(self,datafile = None): 9 """ 10

推荐算法之基于用户的协同过滤算法

协同过滤是推荐算法中最基本的算法,主要分为基于用户的协同过滤算法和基于物品的协同过滤算法. 这篇文章主要介绍基于用户的协同过滤算法,简单来说,要给用户u作推荐,那么只要找出那些和u之前的行为类似的用户,即和u比较像的用户,把他们的行为推荐给用户u即可.所以基于用户的系统过滤算法包括两个步骤:1)找到和目标用户兴趣相似的用户集合  2)找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户. 第一步的关键点在于计算用户之间的相似度,相似度一般通过Jaccard公式或者余弦相似度即可求

spark基于用户的协同过滤算法与坑点,提交job

承接上文: http://blog.csdn.net/wangqi880/article/details/52875524 对了,每台机子的防火墙要关闭哈,不然spark集群启动不起来 前一次,已经把spark的分布式集群布置好了,今天写一个简单的案例来运行.会写一些关于spark的推荐的东西,这里主要有4点,1基于用户协同过滤,2基于物品协同过滤,3基于模型的协同过滤,4基于关联规则的推荐(fp_growth),只写核心代码啊. 基于spark用户协同过滤算法的实现 1用户协同过滤算法 1.1

基于用户的协同过滤(UserCF)

原文地址:https://www.cnblogs.com/fanweisheng/p/11269663.html

基于用户和基于物品的协同过滤算法的比较

首先回顾一下,协同过滤算法主要有两种,一种是基于用户的协同过滤算法(UserCF),另一种是基于物品的协同过滤算法(ItemCF). 基于用户的协同过滤算法主要有两步: 1)找到和目标用户兴趣相似的用户集合 2)找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户. 基于物品的协同过滤算法主要有两步: 1)计算物品之间的相似度. 2)根据物品的相似度和用户的历史行为给用户生成推荐列表. 由此可以看出UserCF是推荐用户所在兴趣小组中的热点,更注重社会化,而ItemCF则是根据用

推荐算法之基于用户的协同过滤

基于用户的的协同过滤算法是推荐统统最古老的算法,简称UserCF.该算法的诞生一定程度上标志着推荐系统的诞生.本文将对UserCF算法原理进行讲解,并且基于Movielens数据集给出实现代码供大家交流学习. 基本原理 在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,先找到和他相似兴趣的其他用户,然后把那些用户喜欢的而用户A没有听说过的物品推荐给用户A.这种方法就称为基于用户的协同过滤算法.该算法主要包括两个步骤: 找到和目标用户兴趣相似的用户集合 找到这个集合中用户喜欢的且目标用户没

基于用户的协同过滤推荐算法原理和实现

在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是推荐系统领域最著名的算法. 本文简单介绍基于用户的协同过滤算法思想以及原理,最后基于该算法实现园友的推荐,即根据你关注的人,为你推荐博客园中其他你有可能感兴趣的人. 基本思想 俗话说"物以类聚.人以群分",拿看电影这个例子来说,如果你喜欢<蝙蝠侠>.<碟中谍>.&l

基于用户的协同过滤推荐算法

什么是推荐算法 推荐算法最早在1992年就提出来了,但是火起来实际上是最近这些年的事情,因为互联网的爆发,有了更大的数据量可以供我们使用,推荐算法才有了很大的用武之地. 最开始,所以我们在网上找资料,都是进yahoo,然后分门别类的点进去,找到你想要的东西,这是一个人工过程,到后来,我们用google,直接搜索自 己需要的内容,这些都可以比较精准的找到你想要的东西,但是,如果我自己都不知道自己要找什么肿么办?最典型的例子就是,如果我打开豆瓣找电影,或者我去 买说,我实际上不知道我想要买什么或者看