推荐系统相关算法(2):k-nearest neighbor
1. kNN
1.1 基本的kNN模型
kNN(k-nearest neighbor)的思想简单来说就是,要评价一个未知的东西U,只需找k个与U相似的已知的东西,并通过k个已知的,对U进行评价。假如要预测风炎君对一部电影M的评分,根据kNN的思想,我们可以先找出k个与风炎君相似的,并且对M进行过评分的用户,然后再用这k个用户的评分预测风炎君对M的评分。又或者先找出k个与M相似的,并且风炎君评价过的电影,然后再用这k部电影的评分预测风炎君对M的评分。在这个例子中,找相似用户的方法叫做user-based kNN,找相似物品的方法叫做item-based kNN。这两种方法的思想和实现都大同小异,因此下文只讨论item-based kNN,并且将其简称为kNN。
根据kNN的思想,我们可以将kNN分为以下三个步骤(假设预测用户u对物品i的评分):
(1)计算相似度
推荐系统中常用的相似度有:Pearson correlation,Cosine,Squared Distance,其中Pearson correlation的运用最为普遍,因此本文只介绍Pearson correlation。
Pearson correlation的取值范围为[-1,1],当值为-1时,表示两组变量负相关,为0时则表示两组变量不相关,为1时表示两组变量正相关,其计算公式如下:
(2)选择邻居
在用户u评过分的所有电影中,找出k个与电影m相似度最高的电影,并用N(u, m)表示这k个电影的集合。
(3)计算预测值
有了k个相似的电影后,就可以用以下公式预测评分:
1.2 数据稀疏性与kNN的改进
现在待处理的推荐系统规模越来越大,用户和商品数目动辄百千万计,两个用户之间选择的重叠非常少。如果用用户和商品之间已有的选择关系占所有可能存在的选择关系的比例来衡量系统的稀疏性,那么平时研究最多的MovieLens数据集的稀疏度是4.5%,Netflix是1.2%,Bibsonomy是0.35%,Delicious是0.046%。
从Pearson correlation的计算公式上看,如果某两个电影的交集大小比其它电影的交集要小得多,那么这两个电影的相似度的可靠性就比较低。由上面描述的数据稀疏性可知,在推荐系统中出现某些交集的较小的情况将会十分平常。而这会大大加强相似度的不可靠性。为了预测结果的可靠性,有必要减轻这种不可靠性,因此我们要根据交集的大小对相似度进行一次压缩(shrinkage):
1.3 全局作用与kNN的改进
用户对电影评分有各种趋势,例如:有的用户是严格的评分者,因而倾向于给较低的分数;有的用户是宽松的评分者,因而倾向于给较高的分数;有的电影的表现即使一般也倾向于获得较高的分数。在推荐系统中,将这些趋势称为全局作用(global effect,简称GE)。
常用的GE有16种,这里只列出本文用到的3种:
No. |
Global Effect |
Meaning |
0 |
Overall mean |
全部评分的平均值 |
1 |
Movie × 1 |
电影的被评分倾向 |
2 |
User × 1 |
用户的评分倾向 |
3 |
User × Time(user)1/2 |
用户第一次评分后到现在相距了多少时间 |
表格的第一列表示各个 GE 被考虑的顺序;第二列表示 GE 的名称;第三列表示GE的意义。其中第二列命名的意义为:在“×”之前的部分代表该 GE 是基于用户或基于电影的,在“×”之后的部分代表 xu,m(下文会提到)的取值形式。
GE的目标是为该GE估计一个特定的参数(第0号GE除外,因为全部评分的平均值能直接计算得到)。在估计参数时,一次只考虑一个GE,并且使用前面已得到的所有GE的预测残差(residual)作为本次估计的真实评分。估计第t+1个GE时的真实评分由以下公式得到:
在估计GE的特定参数时,也一样要考虑到前面提到的数据稀疏性问题,即该参数也要进行压缩,进行压缩后的参数估计公式如下:
其中表示这是第t个参数,并且是基于用户的,表示用户u评过分的所有电影的集合,表示第u个用户和第m部电影相关的解释变量(explanatory variable),且在计算第1,2号GE时为1,在计算第3号GE时为
kNN基本模型并没有将GE考虑在内,为了使预测结果更加精确,有必要将GE加到kNN的预测公式中,改进后的预测公式如下:
2. 实验
实验数据使用MovieLens 100k的数据。这份数据由1000个用户对1700部电影的100000个评分组成,其稀疏性为5.88%。评价指标使用RMSE(root mean squared error):
各算法在该数据集的表现如下所示,其中表中的数值指RMSE。
k=10 |
k=15 |
k=20 |
|
基本kNN模型 |
1.076 |
1.071 |
1.068 |
压缩相似度的kNN |
1.011 |
1.016 |
1.020 |
带GE的kNN |
0.987 |
0.988 |
0.989 |
压缩相似度并且带GE的kNN |
0.946 |
0.951 |
0.955 |
从上表可知,当k=10时,压缩相似度的改进效果为6%,GE的改进效果为8.2%,两者叠加的改进效果为12.1%。这说明:(1)数据的稀疏性对越粗糙的模型,影响越大。(2)GE的影响较大,原因是kNN的预测结果是相似度与用户评分的加权平均值。当用户评分包含与相似度无关的因素(即GE)越多时,最终结果越不可靠。
代码由于较多就不直接贴上,想要的可以在从以下地址下载(Python实现)
http://ishare.iask.sina.com.cn/f/34170290.html
推荐系统相关算法(2):k-nearest neighbor相关推荐
- 机器学习之深入理解K最近邻分类算法(K Nearest Neighbor)
[机器学习]<机器学习实战>读书笔记及代码:第2章 - k-近邻算法 1.初识 K最近邻分类算法(K Nearest Neighbor)是著名的模式识别统计学方法,在机器学习分类算法中占有 ...
- kNN算法(k近邻算法,k Nearest Neighbor)
主要内容: 1.认识kNN算法 2.kNN算法原理 3.应用举例 4.kNN改进方法 1.认识knn算法 "看一个人怎么样,看他身边的朋友什么样就知道了",kNN算法即寻找最近的K ...
- K Nearest Neighbor 算法
K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...
- K NEAREST NEIGHBOR 算法(knn)
K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...
- k Nearest Neighbor Algorithm
k Nearest Neighbor Algorithm k Nearest Neighbor(kNN) algorithm算法和k-Means算法一样,都是简单理解,但是实际效果出人意料的算法之一. ...
- svd文章分类 c语言,推荐系统相关算法:SVD
假如要预测Zero君对一部电影M的评分,而手上只有Zero君对若干部电影的评分和风炎君对若干部电影的评分(包含M的评分).那么能预测出Zero君对M的评分吗?答案显然是能.最简单的方法就是直接将预测分 ...
- 推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐,业界广告推荐技术最新进展
搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排).系统架构.常见问题.算法项目实战总结.技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排 ...
- 文献记录(part81)--Clustering-based k -nearest neighbor classification for large-scale data with ...
学习笔记,仅供参考,有错必纠 文章目录 Clustering-based k -nearest neighbor classification for large-scale data with ne ...
- 机器学习——K近邻算法(KNN)(K Nearest Neighbor)
参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...
最新文章
- java File类笔记
- 人工智能免费公开课一网打尽!14个类别、230门课程,GitHub标星6000+
- 函数参数 不定参数,和 默认参数
- sitemesh的使用
- 全球与中国Z型斗式提升机市场运营战略分析及未来趋势创新建议报告2022-2027年版
- java 转xml 变成两根下划线_XStream实现xml和java对象之间的互相转换(包括对属性,别名,下划线_的处理),同理JSON也可以...
- C#字符串常见操作总结详解
- 教你如何成为解决问题的高手
- 图像语义分割_图像语义分割(9)-DeepLabV3: 再次思考用于图像语义分割的空洞卷积...
- 为了重启计算机除了加电启动外,零度电脑知识网
- 斗鱼弹幕服务器第三方接入协议v1.6.2,GitHub - yyc-dev/douyu-sdk: DouYu-SDK,一个基于斗鱼弹幕API封装的SDK...
- BP算法推导-softmax层+交叉熵(logloss)
- 算法笔记:使用A*算法解决八数码问题
- openpose handpose 人体关键点识别 关键点检测
- 【应用安全】什么是身份和访问管理 (IAM)?
- 2017第四届“云鼎奖”申报火热进行中
- myEclipse10安装以及破解
- 物理竞赛应该怎么准备?3个步骤教你敲响名牌大学门!
- FL Studio20.8完整版注册密钥下载有哪些新功能?
- 学习ZARA模式要从老板观念转变开始
热门文章
- 使用Vistual Studio N年,推荐2个异常捕获的技巧
- Bumblebee微服务网关之负载策略
- .NET Core 微信小程序支付——(统一下单)
- .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入
- [机器翻译]参与 Microsoft 开放源代码软件项目的方式
- .NET平台微服务项目汇集
- .NET Standard@Xamarin.Forms
- .NET跨平台实践:再谈用C#开发Linux守护进程 — 完整篇
- 老司机实战Windows Server Docker:3 单节点Windows Docker服务器简单运维(上)
- 深入理解Async/Await