推荐系统--基于用户的协同过滤算法
1. 概述
和搜索引擎一样,推荐系统是为了帮助人们更快速的获得对自己有用的信息。
和搜索引擎不同,推荐系统是人们被动的获取,由系统根据用户行为或其他的信息推荐给用户的,儿搜索引擎是用户主动输入关键字获取的。
从某种意义上说,搜索引擎和推荐系统是互相补充的。
而推荐算法的本质是通过一定的方式将用户和物品联系起来,从而有效的给用户推荐本身感兴趣或需要但是没有发现的物品。
个性化推荐系统的应用场景:电子商务(据说Amazon 35%的销售额来自推荐系统)、电影和视频网站、个性化音乐网络电台、社交网络、个性化阅读、基于位置的服务、个性化邮件、个性化广告(上下文广告、搜索广告、个性化展示广告)。
一个推荐系统的评判标准:用户满意度、预测准确度、覆盖率、多样性、新颖性、惊喜度、信任度、实时性、健壮性、商业目标。
2. 主要推荐系统算法
基于邻域的方法、隐语义模型、基于图的随机游走算法。在这些方法中,最著名、在业界得到最广泛应用的算法是基于邻域的方法。
基于邻域的方法主要包括:基于用户的协同过滤算法(给用户推荐和他兴趣相似的其他用户喜欢的物品)和基于物品的协同过滤算法(给用户推荐和该用户喜欢的物品属性类似的其他物品)
下面主要说明一下第一种算法
基于用户的协同过滤算法
该算法的主要步骤:1、找到与该用户兴趣相似的用户集;2、找到这个集合中的用户喜欢的但是没有听说过的物品推荐给目标用户。
第一步:计算用户的兴趣相似度
可以通过以下公式计算:
其中u,v表示两个用户,N(u)表示用户u曾经有过正反馈的物品集合;N(v)表示用户v曾经有过正反馈的物品集合。
算法的Python实现如下:
def User_Similarity(train):W=dict()for u in train.keys():for v in train.keys():if u == v: continue; W[u][v] = len(train[u],train[v])W[u][v] /= math.sqrt(len(train[u]) * len(train[v]) * 1.0)
可以发现该代码的时间复杂度是O(n*n),并且大多数用户的兴趣相似度可能位0,即|N(u)∩N(v)| = 0,所以该代码还是可以优化的。
我们可以先计算出|N(u)∩N(v)| ≠ 0的用户对(u,v)然后除以余弦相似度。这里可以使用倒排,将数据排列成物品到用户的倒排表,物品后链接的是与对该物品感兴趣的用户链表,然后循环统计每个物品用户链表的用户相似度即可。
算法的Python代码如下:
#!/usr/bin/env python
# coding=utf-8
def UserSimilarity(train):#建立倒排表item_users = dict()for u,items in train.items():for i in item.keys():if i not in item_users:items_users[i] = set()item_users[i].add(u)#item_users即为物品到用户的倒排表#计算用户之间的相关度C = dict()#任意用户之间的相关度N = dict()#用户正反馈物品的数目for i ,users in item_users:for u in users:N[u] += 1for v in users:if u == v:continue:C[u][v] += 1#最后计算结果矩阵W = dict()for u ,related_users in C.items():for v,cuv in related_users:W[u][v] = cuv / math.sqrt(N[u]* N[v]*1.0)
return W
物品-用户倒排表
第二步:推荐和他相似的K个用户喜欢的物品
其中:p(u,i)用户u对物品i的兴趣度;
S(u,K)包含和用户u兴趣最相近的K的用户;
Wuv用户u和用户v的兴趣相似度;
Rvi用户v对物品i的兴趣度;
算法的Python代码实现:
def Recommend(user,train,W):rank = dict()interacted_items = train[user]for v , wuv in sort(W[u].items,key = itemgetter(1),reverse = True)[0:k]:for i ,rvi in train[v].items:if i in interacted_items:continuerank[i] += wuv * rvireturn rank
转载于:https://my.oschina.net/xinger/blog/265689
推荐系统--基于用户的协同过滤算法相关推荐
- 【推荐系统】基于用户的协同过滤算法
基于用户的协同过滤算法 基础算法 在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的.而用户A没有听说过的物品推荐给A.这种方法称为基于 ...
- 如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤、内容、聚类、关联规则推荐算法实现WebNewsRSMEx
如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤.内容.聚类.关联规则推荐算法实现WebNewsRSMEx 一 ...
- mysql数据推荐算法_Java+Mysql实现简单在线电影、音乐、图书推荐系统 基于用户的协同过滤推荐算法实现 源代码下载...
# Java+Mysql实现简单在线电影.音乐.图书等推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,tomca ...
- 【推荐系统】{1} —— 基于用户的协同过滤算法
协同过滤(英语:Collaborative Filtering,简称CF),简单来说是利用某兴趣相投.拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人透过合作的机制给予信息相当程度的回应(如评分) ...
- 推荐系统实践----基于用户的协同过滤算法(python代码实现书中案例)
本文参考项亮的<推荐系统实践>中基于用户的协同过滤算法内容.因其中代码实现部分只有片段,又因本人初学,对python还不是很精通,难免头大.故自己实现了其中的代码,将整个过程走了一遍. 1 ...
- 推荐系统实践(一)----基于用户的协同过滤算法(UserCF)
随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代.在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情,这 ...
- UserCF,基于用户的协同过滤算法
转载自 UserCF,基于用户的协同过滤算法 UserCF:User Collaboration Filter,基于用户的协同过滤 算法核心思想:在一个在线推荐系统中,当用户A需要个性化推荐 ...
- 基于用户的协同过滤算法
最近写搜索引擎文章写多了,来一篇之前写的老文,给那些对推荐算法感兴趣想入门的人吧,最近也在做推荐广告系统,又翻出来看了看. 什么是推荐算法 推荐算法最早在1992年就提出来了,但是火起来实际上是最近这 ...
- 基于用户的协同过滤算法详解
0. 前言 基于领域的推荐算法是推荐系统中最基本的算法,此类算法不仅在学术界得到了深入研究,而且在工业界也得到了广泛地应用.基于领域的推荐算法主要分为两大类:一类是基于用户的协同过滤算法(User B ...
最新文章
- Hadoop 部署实例
- java 根据当前时间获得一周日期
- 什么是抽象类?抽象类的作用_揭秘!Java 泛型背后到底是什么?
- 通俗易懂理解Attention机制
- 学习笔记:强化学习之A3C代码详解
- Android同步时出错,Android Studio中的Gradle给出错误项目同步失败
- 我在腾讯看点的导师 Steven
- Android在recycleview中进行全选和取消全选
- 社招,文章很细节,大家看下我有多细
- 命令行的迅雷,这样用会更香
- P1217 [USACO1.5]回文质数 Prime Palindromes
- vue实现中英文网站配置
- 物联平台纷争,能否拯救智能硬件?
- mysql格式化日期和时间
- mac批量修改文件名、后缀名
- 洛谷千题复习计划(一)(Codeforces + AtCoder)
- 基于python的游戏设计与实现-基于python的飞机大战小游戏毕业论文设计和代码
- 网页文档输出、对话框
- php怎么加轮播,phpcms如何实现轮播
- 东南大学破格保研挂科_有关保研,跪求解答