机器学习算法--协同过滤算法

0. 关键词

  • 推荐算法
  • 长尾理论
  • UserCF
  • ItemCF

在这里插入图片描述

1. 推荐算法

    互联网的飞速发展使我们进入了信息过载的时代,搜索引擎可以帮助我们查找内容,但只能解决明确的需求。为了让用户从海量信息中高效地获得自己所需的信息,推荐系统应运而生。
    推荐系统可以通过分析用户的历史记录来了解用户的喜好,从而主动为用户推荐其感兴趣的信息,满足用户的个性化推荐需求。推荐系统是自动联系用户和物品的一种工具,和搜索引擎相比,推荐系统通过研究用户的兴趣偏好,进行个性化计算。推荐系统可发现用户的兴趣点,帮助用户从海量信息中去发掘自己潜在的需求。

2. 长尾理论

    推荐系统可以创造全新的商业和经济模式,帮助实现长尾商品的销售。“长尾” 用来描述以亚马逊为代表的电子商务网站的商业和经济模式,电子商务网站销售种类繁多,虽然绝大多数商品都不热门,但这些不热门的商品总数量极其庞大,所累计的总销售额将是一个可观的数字。
    热门推荐是常用的推荐方式,广泛应用于各类网站中,如热门排行榜。但热门推荐的主要缺陷在于推荐的范围有限,所推荐的内容在一定时期内也相对固定。无法实现长尾商品的推荐。因此,可以通过发掘长尾商品并推荐给感兴趣的用户来提高销售额。这需要通过个性化推荐来实现

3. 协同过滤

协同过滤是应用最早和最为成功的推荐方法之一,利用与目标用户相似的用户已有的商品评价信息,来预测目标用户对特定商品的喜好程度
分为
基于用户的协同过滤(UserCF)
基于物品的协同过滤(ItemCF)

4. 基于用户的协同过滤

    UserCF算法符合人们对于“趣味相投”的认知,即兴趣相似的用户往往有相同的物品喜好:当目标用户需要个性化推荐时,可以先找到和目标用户有相似兴趣的用户群体,然后将这个用户群体喜欢的、而目标用户没有听说过的物品推荐给目标用户。
UserCF算法的实现主要包括两个步骤:
第一步:找到和目标用户兴趣相似的用户集合
第二步:找到该集合中的用户所喜欢的、且目标用户没有听说过的物品推荐给目标用户
在这里插入图片描述

下面,我们来讨论一下,这需要如何进行实现?
根据算法的大纲来看,肯定是需要找到相似用户,如何判断用户之间的相似程度呢?

相似度算法判断用户相似度

目前较多使用的相似度算法有:泊松相关系数、余弦相似度、调整余弦相似度。
余弦相似度N(u)N(u)N(u)表示用户 u 感兴趣的物品集合,N(v)N(v)N(v)表示用户 v 感兴趣的物品的集合,那么用户 u, v的相似度权重 ωuv\omega_{uv}ωuv
在这里插入图片描述
    给出了算法,我们如何快速求出公式中的参数呢?(不难得知,这里最难计算的是分子,也就是区间的交,这是优化重点)
    倘若服务器需要存储 所有用户之间的相似度的话,对时间的复杂度要求是极高的!倘若我们 先对 u 遍历,再对 v 遍历,然后再遍历 u 感兴趣的商品,是否在 v 感兴趣的商品中,那这基本就是爆炸了,所以说,正解的优化算法是:

    首先,倘若用户 a 需要商品 X,那么就将它放在商品 X 的集合里面,经过对所有用户预处理之后,每个商品都对应一个集合,集合内部两两成对即可。
如下图所示:(物品到用户的倒排表)
在这里插入图片描述

量化用户对物品的兴趣程度

从上面的分析中,可知用户直接的相似度ωu,v\omega_{u,v}ωu,v,下面,我们进一步计算出用户对物品的兴趣程度:
p(u,i)p(u,i)p(u,i)表示用户 u(user) 对物品 i (item)的兴趣程度,S(u,k)S(u,k)S(u,k)是和用户 u 兴趣最为接近的用户的集合(对ωu,x\omega_{u,x}ωu,x排序,取前 k 个 x)
在这里插入图片描述
    其中,S(u, K)是和用户u兴趣最接近的 K 个用户的集合,N(i)是喜欢物品 iii 的用户集合(含义变了),ωuv\omega_{uv}ωuv是用户u和用户v的相似度,rvir_{vi}rvi是隐反馈信息,代表用户vvv对物品i的感兴趣程度,为简化计算可令rvir_{vi}rvi=1(为了追求更高准确率是不应该都为一个数值的,比如说看客户对商品的评价等等)。
    对所有物品计算p(u,i)后,可以对p(u,i)进行降序处理,取前N个物品作为推荐结果展示给用户u(称为Top-N推荐)。

具体的步骤

1.收集用户信息

    收集可以代表用户兴趣的信息。一般的网站系统使用评分的方式或是给予评价,这种方式被称为“主动评分”。另外一种是“被动评分”,是根据用户的行为模式由系统代替用户完成评价,不需要用户直接打分或输入评价数据。电子商务网站在被动评分的数据获取上有其优势,用户购买的商品记录是相当有用的数据。

2.最近邻搜索(Nearest neighbor search, NNS)
    以用户为基础(User-based)的协同过滤的出发点是与用户兴趣爱好相同的另一组用户,就是计算两个用户的相似度。例如:查找n个和A有相似兴趣用户,把他们对M的评分作为A对M的评分预测。一般会根据数据的不同选择不同的算法,较多使用的相似度算法有Pearson Correlation Coefficient、Cosine-based Similarity、Adjusted Cosine Similarity。

3.产生推荐结果
    有了最近邻集合,就可以对目标用户的兴趣进行预测,产生推荐结果。依据推荐目的的不同进行不同形式的推荐,较常见的推荐结果有Top-N 推荐和关系推荐。Top-N 推荐是针对个体用户产生,对每个人产生不一样的结果,例如:通过对A用户的最近邻用户进行统计,选择出现频率高且在A用户的评分项目中不存在的,作为推荐结果。关系推荐是对最近邻用户的记录进行关系规则(association rules)挖掘。

UserCF小结

  • userCF首先是根据相似度算法,求出每个用户之间的相识度衡量标准(ωu,v\omega_{u,v}ωu,v),得出的结果回用于求 与用户 u 相似的 前 k 个人
  • 得到 ωu,v\omega_{u,v}ωu,v 数组之后,我们需要进一步计算 用户 u 对于 物品 i (item) 的兴趣程度pu,ip_{u,i}pu,i,这个是通过 与用户 u 相似的前 k 个用户 v(基于用户) ωu,v∗rv,i\omega_{u,v}*r_{v, i}ωu,vrv,i求和得到。
  • 然后对pu,ip_{u,i}pu,i进行排序,得到个性化推荐的商品。

5. 基于物品的协同过滤

    基于物品的协同过滤算法(简称ItemCF算法)是目前业界应用最多的算法。ItemCF算法是给目标用户推荐那些和他们之前喜欢的物品相似的物品。ItemCF算法主要通过分析用户的行为记录来计算物品之间的相似度。该算法基于的假设是:物品A和物品B具有很大的相似度是因为喜欢物品A的用户大多也喜欢物品B。例如,该算法会因为你购买过《数据挖掘导论》而给你推荐《机器学习实战》

在这里插入图片描述

ItemCF算法与UserCF算法类似,计算也分为两步:
第一步:计算物品之间的相似度;
第二步:根据物品的相似度和用户的历史行为,给用户生成推荐列表。

下面,我们来讨论一下,这需要如何进行实现

判断物品之间的相似度

ItemCF算法通过建立用户到物品倒排表(每个用户喜欢的物品的列表)来计算物品相似度
在这里插入图片描述

用户对物品的兴趣程度

ItemCF计算的是物品相似度,再使用如下公式来度量用户u
对物品j的兴趣程度Puj(与UserCF类似)
在这里插入图片描述
说人话就是,用户 u 对一个物品 j 个喜爱与否,通过判断 和 j 相似的 前 k 个物品,用户喜欢的程度,进行 加权求和(物品之间多相似和用户对物品有多喜爱)

具体的算法步骤

1.收集用户信息
     同以用户为基础(User-based)的协同过滤。

2.针对项目的最近邻搜索
    先计算已评价项目和待预测项目的相似度,并以相似度作为权重,加权各已评价项目的分数,得到待预测项目的预测值。例如:要对项目 A 和项目 B 进行相似性计算,要先找出同时对 A 和 B 打过分的组合,对这些组合进行相似度计算,常用的算法同以用户为基础(User-based)的协同过滤。

3.产生推荐结果
    以项目为基础的协同过滤不用考虑用户间的差别,所以精度比较差。但是却不需要用户的历史数据,或是进行用户识别。对于项目来讲,它们之间的相似性要稳定很多,因此可以离线完成工作量最大的相似性计算步骤,从而降低了在线计算量,提高推荐效率,尤其是在用户多于项目的情形下尤为显著

6. UserCF和ItemCF算法的对比

UserCF算法和ItemCF算法的思想、计算过程都相似两者最主要的区别:

  • UserCF算法推荐的是那些和目标用户有共同兴趣爱好的其他用户所喜欢的物品
    ItemCF算法推荐的是那些和目标用户之前喜欢的物品类似的其他物品
  • UserCF算法更偏向社会化,适合应用于新闻推荐、微博话题推荐等应用场景,其推荐结果在新颖性方面有一定的优势。
    ItemCF算法更偏向于个性化。适合应用于电子商务、电影、图书等应用场景

在这里插入图片描述

从上图可以看出,是解决这个问题的两种写法

7. 隐式反馈和显示反馈

参考大佬的博客
隐性反馈行为:不能明确反映用户喜好的行为。

显性反馈行为:用户明确表示对物品喜好的行为。

    显性反馈行为包括用户明确表示对物品喜好的行为,隐性反馈行为指的是那些不能明确反应用户喜好的行为。在许多的现实生活中的很多场景中,我们常常只能接触到隐性的反馈,例如页面游览,点击,购买,喜欢,分享等等。
    基于矩阵分解的协同过滤的标准方法,一般将用户商品矩阵中的元素作为用户对商品的显性偏好。在 MLlib 中所用到的处理这种数据的方法来源于文献: Collaborative Filtering for Implicit Feedback Datasets 。 本质上,这个方法将数据作为二元偏好值和偏好强度的一个结合,而不是对评分矩阵直接进行建模。因此,评价就不是与用户对商品的显性评分,而是与所观察到的用户偏好强度关联起来。然后,这个模型将尝试找到隐语义因子来预估一个用户对一个商品的偏好。

在这里插入图片描述

在这里插入图片描述

参考文献

  1. 燕山大学机器学习讲义
  2. 大佬的博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu下安装chrome浏览器和flash插件

chrome浏览器可在Ubuntu软件中心里搜索并安装 falsh插件首先去官网下载合适的包然后&#xff0c;按照readme安装&#xff0c;执行sudo cp -r usr/* /usr 和sudo cp libflashlayer.so <BrowserPluginsLocation> 注意默认chrome插件目录为/usr/lib/chromium-browser/plugin…

利用JavaScript制作星星金字塔

主要练习&#xff1a; 代码赏析&#xff1a; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&q…

机器学习算法--ALS

本文转载自&#xff1a;endymecy|ALS 一、什么是ALS ALS是交替最小二乘&#xff08;alternating least squares&#xff09;的简称。在机器学习中&#xff0c;ALS特指使用交替最小二乘求解的一个协同推荐算法。它通过观察到的所有用户给商品的打分&#xff0c;来推断每个用户…

04.卷积神经网络 W2.深度卷积网络:实例探究(作业:Keras教程+ResNets残差网络)

文章目录作业1&#xff1a;Keras教程1. 快乐的房子2. 用Keras建模3. 用你的图片测试4. 一些有用的Keras函数作业2&#xff1a;残差网络 Residual Networks1. 深层神经网络的问题2. 建立残差网络2.1 identity恒等模块2.2 卷积模块3. 建立你的第一个残差网络&#xff08;50层&…

为文本框加注释

var gzj $get("keyWords"); //得到dom对象 gzj.parentNode.appendChild(document.createTextNode("注&#xff1a;关键字以逗号隔开")); //给dom对象加后续东西 //手动添加检定周期单位&#xff1a;月function addInspectCycleUnit(){ var cycle…

JS字符串与定时器

js字符串方法 1.字符串的拼接通过 号 var sTr1 "abc"; varsTr2 "123"; var sTr3 sTr1 sTr2 2.字符串的类型转换 str.split("") var sTr 12; parseInt(sTr) parseFloat() 3.字符串分割成数组 var sDate "2017-3-12"; // …

反汇编

ILT Incremental Link Table 这个ILT其实就是一个静态的表&#xff0c;它记录了一些函数的入口然后跳过去&#xff0c;每个跳转jmp占一个字节&#xff0c;然后就是一个四字节的内存地址&#xff0c;所以加起为五个字节&#xff0c;这样就实现了类的机制。 6605*132 代表是调用的…

安装Python第三方库的常用方法和注意事项

安装Python的库 这里&#xff0c;我来介绍一下平时我们安装python库的几种常用方法和一些注意事项。 第一种&#xff0c;使用我们的pip工具 第二种&#xff0c;使用IDE中集成的功能进行一键安装(以Pycharm 为例) 第三种&#xff0c;使用Anaconda进行安装 使用 pip 工具安装第三…

LeetCode 968. 监控二叉树(DFS)

文章目录1. 题目2. 解题1. 题目 给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 示例 1&#xff1a; 输入&#xff1a;[0,0,null,0,0] 输出&#xff…

Jquery基础知识

jquery是一个功能强大的第三方库,目前被广泛使用, 微软更是将其作为官方库; 内部封装适配多浏览器,运行速率高于原生 1、写得少&#xff0c;做得多 2、运行速度快 jqurey通过选择器获取标签 $(#myId) //选择id为myId的网页元素 $(.myClass) // 选择class为myClass的元素 $(li)…

【笔试or面试】金山西山居2014校招笔试题

1.32位环境下 #include <stdio.h> #include <iostream> #include <cstring> using namespace std;int main() {char t1[] "ab\0cd";char t2[6] "abcd\0";int t3[4] {0, 0, \0};printf("%d\n",sizeof(t1));printf("%d\…

HTML+CSS+JS面试题(附带答案)

一、单项选择(165题) 1.HTML是什么意思&#xff1f; A)高级文本语言 B)超文本标记语言 C)扩展标记语言 D)图形化标记语言 2.浏览器针对于HTML文档起到了什么作用&#xff1f; A)浏览器用于创建HTML文档 B)浏览器用于查看HTML文档 C)浏览器用于修改HTML文档 D)浏览器用于删除HTM…

LeetCode 576. 出界的路径数(动态规划)

文章目录1. 题目2. 解题1. 题目 给定一个 m n 的网格和一个球。 球的起始坐标为 (i,j) &#xff0c;你可以将球移到相邻的单元格内&#xff0c;或者往上、下、左、右四个方向上移动使球穿过网格边界。 但是&#xff0c;你最多可以移动 N 次。 找出可以将球移出边界的路径数量…

视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比

发现了几个视频参数对比的资源&#xff0c;是Wikipedia上的&#xff0c;总结的非常好&#xff1a; 流媒体系统对比&#xff1a; http://en.wikipedia.org/wiki/Comparison_of_streaming_media_systems 封装格式对比&#xff1a; http://en.wikipedia.org/wiki/Comparison_of_co…

HTML试题及答案(总结)

HTML练习题1&#xff08;选择题&#xff09; 一、选择 1.在一个框架的属性面板中&#xff0c;不能设置下面哪一项。&#xff08; &#xff09; A&#xff0e;源文件 ; B&#xff0e;边框颜色 ; C&#xff0e;边框宽度 D&#xff0e;滚动条 2. 下列哪一…

04.卷积神经网络 W3.目标检测

文章目录1. 目标定位2. 特征点检测3. 目标检测4. 滑动窗口的卷积实现5. Bounding Box预测&#xff08;YOLO&#xff09;6. 交并比7. 非极大值抑制8. Anchor Boxes9. YOLO 算法10. 候选区域作业参考&#xff1a; 吴恩达视频课 深度学习笔记 1. 目标定位 定位分类问题&#xff…

P2P中的NAT穿越方案简介

文章链接&#xff1a; http://www.shipin.it/Index/videolist/id/68.html 转载于:https://www.cnblogs.com/lolita/p/3334029.html

Python面试必须要看的15个问题

问题1 到底什么是Python&#xff1f;你可以在回答中与其他技术进行对比&#xff08;也鼓励这样做&#xff09;。 答案 下面是一些关键点&#xff1a; Python是一种解释型语言。这就是说&#xff0c;与C语言和C的衍生语言不同&#xff0c;Python代码在运行之前不需要编译。其他…

LeetCode 988. 从叶结点开始的最小字符串(DFS)

文章目录1. 题目2. 解题1. 题目 给定一颗根结点为 root 的二叉树&#xff0c;树中的每一个结点都有一个从 0 到 25 的值&#xff0c;分别代表字母 a 到 z&#xff1a;值 0 代表 a&#xff0c;值 1 代表 b&#xff0c;依此类推。 找出按字典序最小的字符串&#xff0c;该字符串…

Humble Numbers USCAO chapter 3.1

...目测我自己写坑定超时,就去NOCOW看了下,题解,官方是每个质数与已有的humble想乘取大于最大humble的最小数即是新的最大humble, 然后我就写了个个,开始嫌麻烦用set存,超时的飞起。然后全部改成数组,结果case 6还是超时,想了半天感觉和别人的题解也没啥差别,为什么运行时间差这…