(数据挖掘-入门-1)基于用户的协同过滤之最近邻
主要内容:
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)基于用户的协同过滤之最近邻相关推荐
- UserCF,基于用户的协同过滤算法
转载自 UserCF,基于用户的协同过滤算法 UserCF:User Collaboration Filter,基于用户的协同过滤 算法核心思想:在一个在线推荐系统中,当用户A需要个性化推荐 ...
- 基于用户的协同过滤算法
最近写搜索引擎文章写多了,来一篇之前写的老文,给那些对推荐算法感兴趣想入门的人吧,最近也在做推荐广告系统,又翻出来看了看. 什么是推荐算法 推荐算法最早在1992年就提出来了,但是火起来实际上是最近这 ...
- 推荐系统实践(一)----基于用户的协同过滤算法(UserCF)
随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代.在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情,这 ...
- [推荐算法]UserCF,基于用户的协同过滤算法
UserCF:UserCollaborationFilter,基于用户的协同过滤 算法核心思想:在一个在线推荐系统中,当用户A需要个性化推荐时,可以先找到和他有相似兴趣的其它用户,然后把那些用户喜欢的 ...
- 基于用户的协同过滤和皮尔逊相关系数
基于用户的协同过滤和皮尔逊相关系数 2012 年 11 月 05 日 isnowfy algorithm, web frameborder="0" hspace="0&q ...
- 推荐系统--基于用户的协同过滤算法
1. 概述 和搜索引擎一样,推荐系统是为了帮助人们更快速的获得对自己有用的信息. 和搜索引擎不同,推荐系统是人们被动的获取,由系统根据用户行为或其他的信息推荐给用户的,儿搜索引擎是用户 ...
- 【知识发现】基于用户的协同过滤推荐算法python实现
1.协同过滤推荐算法分为两类,分别是基于用户的协同过滤算法(user-based collaboratIve filtering),和基于物品的协同过滤算法(item-based collaborat ...
- 协同过滤:基于用户的协同过滤itemCF
基于用户的协同过滤算法也被称为最近邻协同过滤或KNN (K.Nearest-Neighbor,K最近邻算法).其核心思想就是,首先根据相似度计算出目标用户的邻居集合,然后用邻居用户评分的加权组合来为目 ...
- 【推荐系统】基于用户的协同过滤算法
基于用户的协同过滤算法 基础算法 在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的.而用户A没有听说过的物品推荐给A.这种方法称为基于 ...
最新文章
- redux中reducer使用require.context使用技巧
- 【数字信号处理】离散时间系统稳定性 ( 稳定性概念 | 稳定性用法 )
- iOS GCD中级篇 - dispatch_group的理解及使用
- 水题公开赛【比赛公告】
- 导致oracle 控制文件坏,异常断电导致ORACLE控制文件等受到破坏的处理
- java学习(11):Java数据类型转换
- python五子棋人机对战_Python:游戏:五子棋之人机对战
- 安卓逆向_19( 二 ) --- APK保护策略【重新签名后安装打开失败 --- 书旗小说.apk、浦发银行.apk的过签名校验【so 文件修改保存】】
- 2个Python入门级的实战项目
- Linux检测内存泄露的脚本
- pythonturtle魔法阵_开启NLP的大魔法阵——一步一步教上手Bert的Fine Tuning
- python如何爬取煎蛋图片(js)
- mysql core dumped_关于Segmentation fault (core dumped)几个简单问题的整理
- rtsp直播流转m3u8
- 我的谷歌变成了金色传说!
- 总结python中的乱码问题
- 指纹识别真安全吗?简单技术处理后橘子皮都能解锁
- 在录音等情况下保持屏幕长亮
- 2023年4月的12篇AI论文推荐
- 在CentOS7中安装思维脑图软件XMind
热门文章
- 删除表中所有记录只留下第一条,按照rownum排他,使用rowid删除
- 浅析网站建设的基本原则
- 以营销型网站为例,网站建设过程中需要注意哪些问题?
- 内链优化对于网站有哪些作用?
- centos 安装搜狗输入法_Ubuntu 20.04 安装搜狗输入法
- 装箱算法 java_贪心算法装箱问题-Java代码
- 一个游戏大量合服代表什么_[游戏服务器从入门到关门]4.分区分服、连服、合服...
- access字段属性设置下拉列表_可嵌入您系统的.NET 报表控件ActiveReports:带状列表组件...
- EvalAI使用——类似kaggle的开源平台,不过没有kernel fork功能,比较蛋疼
- Oracle单表备份三种方案