user Collaborative Filtering

---恢复内容开始---

算法步骤:

1.计算用户相似度

2.对于特定用户,选出k个最相似的用户,将这些用户评价过的前k好的物品推荐给该用户

用户相似度 度量:

其中|N(u)|表示用户u评价过的物品的数量,|N(i)|为物品i的流行度,即物品i被多少用户评价过

这里物品流行度越高,它在相似度的度量上作用越小(两人都买了《新华字典》,并不是因为喜好)

实现:

1.先获取每个物品 对应的 对其进行评价的用户的列表 iu

如:商品A   ---  [用户2,用户3,用户4]

商品B   ---  [用户1,用户5,用户2]

def item_user(self,data):
        iu = dict()
        groups = data.groupby([1])
        for item,group in groups:
            iu[item]=set(group.ix[:,0])

        return iu

2.获取每个用户 对应的 评价过的物品的列表  ui

如:用户2  ---  [商品A,商品B]

def user_item(self,data):
        ui = dict()
        groups = data.groupby([0])
        for item,group in groups:
            ui[item]=set(group.ix[:,1])

        return ui

3.遍历列表iu上的每一个商品,计算相似度

比如对商品A,则用户2和用户3之间,相似度加   1/log(1+3)/sqrt(2*1)

--3是商品A的流行度(3个用户评价过它),2*1表示用户2评价过的商品数乘以用户3评价过的商品数

def similarityMatrix(self):
        matrix=dict()
        N = dict()
        for item,users in self.iu.items():
            add = 1.0/(1+math.log(len(users)))
            for v in users:
                if v not in N:
                    N[v] = 1
                else:
                    N[v] += 1

                for u in users:
                    if v==u:
                        continue
                    if v not in matrix:
                        matrix[v] = dict();

                    if u not in matrix[v]:
                        matrix[v][u] = 0;

                    matrix[v][u]+=add;

        for v in matrix.keys():
            for u in matrix[v].keys():
                matrix[v][u] /= math.sqrt(N[u]*N[v])
            matrix[v] = sorted(matrix[v].items(),lambda x,y:cmp(x[1],y[1]),reverse=True);

        return matrix

4.推荐

def getRecommend(self,user):
        userItem=self.ui[user]
        simiusers=self.simiMatrix[user]
        rank = dict()
        for i in range(len(simiusers)):
            if i>=self.k:
                break
            for item in self.ui[simiusers[i][0]]:
                if item in userItem:
                    continue
                if item not in rank:
                    rank[item]=0
                rank[item]+=simiusers[i][1]*1
        rank = sorted(rank.items(),lambda x,y:cmp(x[1],y[1]),reverse=True)[0:self.k];
        return [ele[0] for ele in rank]

---恢复内容结束---

时间: 2024-10-05 18:34:59

user Collaborative Filtering的相关文章

推荐系统(recommender systems):预测电影评分--构造推荐系统的一种方法:协同过滤(collaborative filtering )

协同过滤(collaborative filtering )能自行学习所要使用的特征 如我们有某一个数据集,我们并不知道特征的值是多少,我们有一些用户对电影的评分,但是我们并不知道每部电影的特征(即每部电影到底有多少浪漫成份,有多少动作成份) 假设我们通过采访用户得到每个用户的喜好,如上图中的Alice喜欢爱情电影,不喜欢动作电影,则我们将θ(1)设为[0,5,0],如此设置θ(2),θ(3),θ(4)的值,这样我们有了每个用户的θ的值以及他们对电影的打分,就可以推断出每部电影的x(特征)的值.

collaborative filtering协同过滤

每次我想看电影的时候,都会去问我的朋友,小健.一般他推荐的电影,我都比较喜欢.显然不是所有人都有小健这样的能力.因为我碰巧和小健有类似的品味. 这个生活中的经验,实际上有着广泛的用途. 当系统需要为某个人做出推荐时,一种机器学习的算法是这样工作的:就是在一大群人中找出一部分与他品味类似的人,把这些人的喜欢的东西排序,然后推荐给他. 自然引出两个问题: 谁是与他相近品味的人: 怎么对这些人喜欢的东西排序: 对于上述两个问题有多种不同的答案,不同的答案意味着不同的算法. --- 问题1的答案有两种:

亚马逊 协同过滤算法 Collaborative filtering

这节课时郭强的三维课.他讲的是MAYA和max .自己对这个也不怎么的感兴趣.而且这个课感觉属于数字媒体.自己对游戏,动画,这些东西一点都不兴趣,比如大一的时候刚开学的时候,张瑞的数字媒体的导论课.还有就是秀霞的动画课,自己记录一下自己的思想我在网上看见了这样一个说法,说的是跟着本科生导师做项目.就比如一个人说的,先找一个APP运行一遍,然后再这个基础上修改,各种的粘贴代码.是继续的做这个项目,还是学一点计算机的基础知识了.开始写算法,亚马逊的协同过滤算法 第一:初次印象,进入一个网站的时候,可

【转载】协同过滤(Collaborative Filtering)

Collaborative Filtering 协同过滤的主要目标:由于网络信息量的增多,用户往往被淹没在信息的海洋里,很难很轻易的找到自己感兴趣的topic.协同过滤就是为了把用户最可能感兴趣的信息推送给用户(Recommer system). 协同过滤的方法: model-base,user-base,item-base,content-base. user-based:搜集用户profile.对于一个active user,找到跟其比较接近(或者相似)的几个neighbour.使用这些ne

[论文阅读&翻译]Item-to-Item Collaborative Filtering

Amazon.com Recommendations Item-to-Item Collaborative Filtering 个人感受: 这篇论文首先介绍了历史上的三种算法:传统协同过滤.聚类.基于搜索的算法.第一种方法在计算效率.少量数据上表现欠佳:第二种方法准确率欠佳:第三种方法比较"简单",因此提出了大量计算在线下的物品-物品的相似记录进行推荐. 揣测一下作者的思路,计算量大是因为数据量大,但是其中有价值的就是其中购买的物品,而且对于购买的物品来说,我们推荐的也是根据购买的物品

Item-to-Item Collaborative Filtering

Amazon.com Recommendations Item-to-Item Collaborative Filtering 个人感受: 这篇论文首先介绍了历史上的三种算法:传统协同过滤.聚类.基于搜索的算法.第一种方法在计算效率.少量数据上表现欠佳:第二种方法准确率欠佳:第三种方法比较"简单",因此提出了大量计算在线下的物品-物品的相似记录进行推荐. 揣测一下作者的思路,计算量大是因为数据量大,但是其中有价值的就是其中购买的物品,而且对于购买的物品来说,我们推荐的也是根据购买的物品

【RS】Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model - 当因式分解遇上邻域:多层面协同过滤模型

[论文标题]Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model   (35th-ICML,PMLR) [论文作者]Yehuda Koren [论文链接]Paper (9-pages // Double column) [摘要] 推荐系统为用户提供个性化的产品或服务建议.这些系统通常依赖于协同过滤(CF),通过分析过去的事务来建立用户和产品之间的关联.比较成功的CF方法有两种,一种是直

协同过滤 Collaborative Filtering

协同过滤 collaborative filtering 人以类聚,物以群分 相似度 1. Jaccard 相似度 定义为两个集合的交并比: Jaccard 距离,定义为 1 - J(A, B),衡量两个集合的区分度: 为什么 Jaccard 不适合协同过滤?—— 只考虑用户有没有看过,没考虑评分大小 2. 余弦相似度 根据两个向量夹角的余弦值来衡量相似度: 为什么余弦相似度不适合协同过滤?—— 不同用户各自评分总和不一样,导致评分占总比不一样,可能计算出和事实相反的结果. 3. Pearson

Collaborative Filtering

for i=1:6040 Ai=ratings(ratings(:,1)==i,:); for j=1:5 Labnum(i,j)=length(Ai(Ai(:,3)==j)); end num(i)=length(Ai(:,1)); end num=[[1:6040]',num'];numsort=sortrows(num,-2); Xratings1101_1500=[]; for i=1:1501 Xratings1101_1500=[Xratings1101_1500;ratingsNe

推荐系统介绍:(协同过滤)—Intro to Recommender Systems: Collaborative Filtering

本文试验前期准备: MovieLens  ml-100k数据集 Jupyter notebook themoviedb.org API key     添加python引用 import numpy as np import pandas as pd 进入MovieLens  ml-100k数据存放目录 cd F:\Master\MachineLearning\kNN\ml-100k 读取数据:u.data每行数据分为userid,itemid,rating,时间戳四部分 names = ['u