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

算法步骤:

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]

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

user Collaborative Filtering的更多相关文章

  1. Collaborative filtering

        Collaborative filtering, 即协同过滤,是一种新颖的技术.最早于1989年就提出来了,直到21世纪才得到产业性的应用.应用上的代表在国外有Amazon.com,Last. ...

  2. 协同滤波 Collaborative filtering 《推荐系统实践》 第二章

    利用用户行为数据 简介: 用户在网站上最简单存在形式就是日志. 原始日志(raw log)------>会话日志(session log)-->展示日志或点击日志 用户行一般分为两种: 1 ...

  3. mahout算法源码分析之Collaborative Filtering with ALS-WR (四)评价和推荐

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 首先来总结一下 mahout算法源码分析之Collaborative Filtering with AL ...

  4. mahout算法源码分析之Collaborative Filtering with ALS-WR拓展篇

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 额,好吧,心头的一块石头总算是放下了.关于Collaborative Filtering with AL ...

  5. mahout算法源码分析之Collaborative Filtering with ALS-WR 并行思路

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. mahout算法源码分析之Collaborative Filtering with ALS-WR 这个算 ...

  6. 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .

    ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3 基于物品的协同过滤推荐算法--读"Item-Based ...

  7. 【RS】Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering - 基于拉普拉斯分布的稀疏概率矩阵分解协同过滤

    [论文标题]Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering  ...

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

    [论文标题]Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model   (35th-ICM ...

  9. 亚马逊 协同过滤算法 Collaborative filtering

    这节课时郭强的三维课.他讲的是MAYA和max .自己对这个也不怎么的感兴趣.而且这个课感觉属于数字媒体.自己对游戏,动画,这些东西一点都不兴趣,比如大一的时候刚开学的时候,张瑞的数字媒体的导论课.还 ...

  10. collaborative filtering协同过滤

    每次我想看电影的时候,都会去问我的朋友,小健.一般他推荐的电影,我都比较喜欢.显然不是所有人都有小健这样的能力.因为我碰巧和小健有类似的品味. 这个生活中的经验,实际上有着广泛的用途. 当系统需要为某 ...

随机推荐

  1. python学习day7

    目录 一.反射 二.socket 三.socketserver 一.反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分 ...

  2. ASCII、ANSI、GB2312、Unicode、UTF-8之间的关系

    1.ASCII码: ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统.它主要用于 ...

  3. adobe reader安装完成之前被中断,错误代码150210解决方法

    adobe reader安装完成之前被中断,错误代码150210解决方法出现这种情况是因为之前安装过adobe reader但是没有卸载删除干净进而导致重新安装时无法安装.为什么卸载不了大多数是因为3 ...

  4. Android工程师面试准备知识点

    听+7哥说,把下面的全弄懂,面试必过,所以我就试着去把所有题目补充了一下,各位能耐的网友们,如果有吐槽或者补充的尽管给我留言,在这里谢过大家了. 1.   android的多线程如何通信 答:Andr ...

  5. Trie树-脏词过滤应用

    Trie树,又称字符查找树.前缀树,主要用于字符匹配(详见http://en.wikipedia.org/wiki/Trie).适合做关键词查找,比如查找文章中的关键字然后给他们加链接. 当然对脏词的 ...

  6. iOS 三维变换

    1:平移 一个4*4的单位矩阵乘以一个P(x,y,z,1)的行向量,则表示此矩阵向x轴移动了x的单位,向Y轴移动了y个单位,向Z轴移动了z个单位,最后获得移动后的目标矩阵是 [ 1, 0, 0, 0  ...

  7. 固定表格行列(expression)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...

  8. PropertyGrid—默认属性,默认事件,属性默认值

    零.引言 PropertyGrid显示一个对象的属性和事件时,可以设置其默认属性和事件,也就是当你选中对象时,propertyGrid中焦点在哪一个属性或事件上.为对象的属性提供默认值,使Proper ...

  9. Asp.Net Web API 2

    Asp.Net Web API 2第十八课——Working with Entity Relations in OData   前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导 ...

  10. .net程序员转战android第二篇---牛刀小试

    上篇说道如何搭建android的开发环境,这一篇我们将牛刀小试一下, 完成我们第一个android APP应用. 我就从新建项目说起吧. 首先打开Eclipse,选择顶部的File(文件)——new( ...