主要内容:

1、什么是基于用户的协同过滤

2、python实现

1、什么是基于用户协同过滤:

协同过滤:Collaborative Filtering,一般用于推荐系统,如京东,亚马逊等电商网站上的“购买该物品的用户还喜欢/购买”之类的栏目都是根据协同过滤推荐出来的。

基于用户的协同过滤:User-based CF,通过不同用户对item(物品)的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐。

这里介绍一种最简单的过滤方法:最近邻,即找到与某用户最相似的用户,将该用户喜欢的物品(而某用户并未评分的物品)推荐给某用户。

缺点:

1、用户少,物品多,并不是每个用户都对每个物品进行过评分,因此存在缺失值;

2、如果相似的用户和被推荐的用户评分的物品都相同,会出现无物品推荐的情况;

细节:

衡量相似性:曼哈顿距离,欧几里得距离等(简单,后续介绍其他相似度的计算方法)

当r=1,为曼哈顿距离;当r=2,为欧几里得距离。

2、Python实现

场景:基于用户对一些书籍的评分,来为某些用户推荐书籍;

数据:如下表

实现:

Python(有关python的语法就不介绍了,直接贴出代码)

#
#  FILTERINGDATA.py
#
#  Code file for the book Programmer's Guide to Data Mining
#  http://guidetodatamining.com
#  Ron Zacharski
#

from math import sqrtusers = {"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0, "Norah Jones": 4.5, "Phoenix": 5.0, "Slightly Stoopid": 1.5, "The Strokes": 2.5, "Vampire Weekend": 2.0},"Bill":{"Blues Traveler": 2.0, "Broken Bells": 3.5, "Deadmau5": 4.0, "Phoenix": 2.0, "Slightly Stoopid": 3.5, "Vampire Weekend": 3.0},"Chan": {"Blues Traveler": 5.0, "Broken Bells": 1.0, "Deadmau5": 1.0, "Norah Jones": 3.0, "Phoenix": 5, "Slightly Stoopid": 1.0},"Dan": {"Blues Traveler": 3.0, "Broken Bells": 4.0, "Deadmau5": 4.5, "Phoenix": 3.0, "Slightly Stoopid": 4.5, "The Strokes": 4.0, "Vampire Weekend": 2.0},"Hailey": {"Broken Bells": 4.0, "Deadmau5": 1.0, "Norah Jones": 4.0, "The Strokes": 4.0, "Vampire Weekend": 1.0},"Jordyn":  {"Broken Bells": 4.5, "Deadmau5": 4.0, "Norah Jones": 5.0, "Phoenix": 5.0, "Slightly Stoopid": 4.5, "The Strokes": 4.0, "Vampire Weekend": 4.0},"Sam": {"Blues Traveler": 5.0, "Broken Bells": 2.0, "Norah Jones": 3.0, "Phoenix": 5.0, "Slightly Stoopid": 4.0, "The Strokes": 5.0},"Veronica": {"Blues Traveler": 3.0, "Norah Jones": 5.0, "Phoenix": 4.0, "Slightly Stoopid": 2.5, "The Strokes": 3.0}}def manhattan(rating1, rating2):"""Computes the Manhattan distance. Both rating1 and rating2 are dictionariesof the form {'The Strokes': 3.0, 'Slightly Stoopid': 2.5}"""distance = 0commonRatings = False for key in rating1:if key in rating2:distance += abs(rating1[key] - rating2[key])commonRatings = Trueif commonRatings:return distanceelse:return -1 #Indicates no ratings in commondef minskowski(rating1,rating2):distance=0commonRatings=Flasefor key in rating1:for key in rating2:distance+=pow(abs(rating1[key]-rating2[key]),r)commonRatings=Trueif commonRatings:return pow(distance,1/r)else:return 0 #indicates no ratings in commondef computeNearestNeighbor(username, users):"""creates a sorted list of users based on their distance to username"""distances = []for user in users:if user != username:distance = manhattan(users[user], users[username])#distance = minskowski(users[user], users[username], 2)
            distances.append((distance, user))# sort based on distance -- closest first
    distances.sort()return distancesdef recommend(username, users):"""Give list of recommendations"""# first find nearest neighbornearest = computeNearestNeighbor(username, users)[0][1]recommendations = []# now find bands neighbor rated that user didn'tneighborRatings = users[nearest]userRatings = users[username]for artist in neighborRatings:if not artist in userRatings:recommendations.append((artist, neighborRatings[artist]))# using the fn sorted for variety - sort is more efficientreturn sorted(recommendations, key=lambda artistTuple: artistTuple[1], reverse = True)# examples - uncomment to runprint( recommend('Hailey', users))
#print( recommend('Chan', users))

3、参考文献:

http://www.guidetodatamining.com/chapter2/

转载于:https://www.cnblogs.com/AndyJee/p/4851137.html

(数据挖掘-入门-1)基于用户的协同过滤之最近邻相关推荐

  1. UserCF,基于用户的协同过滤算法

    转载自   UserCF,基于用户的协同过滤算法 UserCF:User  Collaboration   Filter,基于用户的协同过滤 算法核心思想:在一个在线推荐系统中,当用户A需要个性化推荐 ...

  2. 基于用户的协同过滤算法

    最近写搜索引擎文章写多了,来一篇之前写的老文,给那些对推荐算法感兴趣想入门的人吧,最近也在做推荐广告系统,又翻出来看了看. 什么是推荐算法 推荐算法最早在1992年就提出来了,但是火起来实际上是最近这 ...

  3. 推荐系统实践(一)----基于用户的协同过滤算法(UserCF)

      随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代.在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情,这 ...

  4. [推荐算法]UserCF,基于用户的协同过滤算法

    UserCF:UserCollaborationFilter,基于用户的协同过滤 算法核心思想:在一个在线推荐系统中,当用户A需要个性化推荐时,可以先找到和他有相似兴趣的其它用户,然后把那些用户喜欢的 ...

  5. 基于用户的协同过滤和皮尔逊相关系数

    基于用户的协同过滤和皮尔逊相关系数 2012 年 11 月 05 日 isnowfy algorithm, web frameborder="0" hspace="0&q ...

  6. 推荐系统--基于用户的协同过滤算法

    1.         概述 和搜索引擎一样,推荐系统是为了帮助人们更快速的获得对自己有用的信息. 和搜索引擎不同,推荐系统是人们被动的获取,由系统根据用户行为或其他的信息推荐给用户的,儿搜索引擎是用户 ...

  7. 【知识发现】基于用户的协同过滤推荐算法python实现

    1.协同过滤推荐算法分为两类,分别是基于用户的协同过滤算法(user-based collaboratIve filtering),和基于物品的协同过滤算法(item-based collaborat ...

  8. 协同过滤:基于用户的协同过滤itemCF

    基于用户的协同过滤算法也被称为最近邻协同过滤或KNN (K.Nearest-Neighbor,K最近邻算法).其核心思想就是,首先根据相似度计算出目标用户的邻居集合,然后用邻居用户评分的加权组合来为目 ...

  9. 【推荐系统】基于用户的协同过滤算法

    基于用户的协同过滤算法 基础算法 在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的.而用户A没有听说过的物品推荐给A.这种方法称为基于 ...

最新文章

  1. redux中reducer使用require.context使用技巧
  2. 【数字信号处理】离散时间系统稳定性 ( 稳定性概念 | 稳定性用法 )
  3. iOS GCD中级篇 - dispatch_group的理解及使用
  4. 水题公开赛【比赛公告】
  5. 导致oracle 控制文件坏,异常断电导致ORACLE控制文件等受到破坏的处理
  6. java学习(11):Java数据类型转换
  7. python五子棋人机对战_Python:游戏:五子棋之人机对战
  8. 安卓逆向_19( 二 ) --- APK保护策略【重新签名后安装打开失败 --- 书旗小说.apk、浦发银行.apk的过签名校验【so 文件修改保存】】
  9. 2个Python入门级的实战项目
  10. Linux检测内存泄露的脚本
  11. pythonturtle魔法阵_开启NLP的大魔法阵——一步一步教上手Bert的Fine Tuning
  12. python如何爬取煎蛋图片(js)
  13. mysql core dumped_关于Segmentation fault (core dumped)几个简单问题的整理
  14. rtsp直播流转m3u8
  15. 我的谷歌变成了金色传说!
  16. 总结python中的乱码问题
  17. 指纹识别真安全吗?简单技术处理后橘子皮都能解锁
  18. 在录音等情况下保持屏幕长亮
  19. 2023年4月的12篇AI论文推荐
  20. 在CentOS7中安装思维脑图软件XMind

热门文章

  1. 删除表中所有记录只留下第一条,按照rownum排他,使用rowid删除
  2. 浅析网站建设的基本原则
  3. 以营销型网站为例,网站建设过程中需要注意哪些问题?
  4. 内链优化对于网站有哪些作用?
  5. centos 安装搜狗输入法_Ubuntu 20.04 安装搜狗输入法
  6. 装箱算法 java_贪心算法装箱问题-Java代码
  7. 一个游戏大量合服代表什么_[游戏服务器从入门到关门]4.分区分服、连服、合服...
  8. access字段属性设置下拉列表_可嵌入您系统的.NET 报表控件ActiveReports:带状列表组件...
  9. EvalAI使用——类似kaggle的开源平台,不过没有kernel fork功能,比较蛋疼
  10. Oracle单表备份三种方案