20240322-1-协同过滤面试题

协同过滤面试题

1. 协同过滤推荐有哪些类型

  • 基于用户(user-based)的协同过滤

    基于用户(user-based)的协同过滤主要考虑的是用户和用户之间的相似度,只要找出相似用户喜欢的物品,并预测目标用户对对应物品的评分,就可以找到评分最高的若干个物品推荐给用户。

  • 基于项目(item-based)的协同过滤

    基于项目(item-based)的协同过滤和基于用户的协同过滤类似,只不过这时我们转向找到物品和物品之间的相似度,只有找到了目标用户对某些物品的评分,那么我们就可以对相似度高的类似物品进行预测,将评分最高的若干个相似物品推荐给用户

  • 基于模型(model based)的协同过滤

    用机器学习的思想来建模解决,主流的方法可以分为:用关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型来解决。

2. 基于模型的协同过滤

  • 用关联算法做协同过滤

    做频繁集挖掘,找到满足支持度阈值的关联物品的频繁N项集或者序列。将频繁项集或序列里的其他物品按一定的评分准则推荐给用户,这个评分准则可以包括支持度置信度提升度等。 常用的关联推荐算法有AprioriFP TreePrefixSpan

  • 用聚类算法做协同过滤

    • 基于用户聚类,则可以将用户按照一定距离度量方式分成不同的目标人群,将同样目标人群评分高的物品推荐给目标用户

    • 基于物品聚类,则是将用户评分高物品的相似同类物品推荐给用户。常用的聚类推荐算法有K-Means, BIRCH, DBSCAN谱聚类

  • 用分类算法做协同过滤

    设置一份评分阈值,评分高于阈值的就是推荐,评分低于阈值就是不推荐,我们将问题变成了一个二分类问题。虽然分类问题的算法多如牛毛,但是目前使用最广泛的是逻辑回归。因为逻辑回归的解释性比较强,每个物品是否推荐我们都有一个明确的概率放在这,同时可以对数据的特征做工程化,得到调优的目的。常见的分类推荐算法有逻辑回归和朴素贝叶斯,两者的特点是解释性很强。

  • 用回归算法做协同过滤

    评分可以是一个连续的值而不是离散的值,通过回归模型我们可以得到目标用户对某商品的预测打分。常用的回归推荐算法有Ridge回归,回归树和支持向量回归。

  • 用矩阵分解做协同过滤

    用矩阵分解做协同过滤是目前使用也很广泛的一种方法。由于传统的奇异值分解SVD要求矩阵不能有缺失数据,必须是稠密的,而我们的用户物品评分矩阵是一个很典型的稀疏矩阵,直接使用传统的SVD到协同过滤是比较复杂的。

  • 用神经网络做协同过滤

    用神经网络乃至深度学习做协同过滤应该是以后的一个趋势。目前比较主流的用两层神经网络来做推荐算法的是限制玻尔兹曼机(RBM)

  • 用隐语义模型做协同过滤

    隐语义模型主要是基于NLP的,涉及到对用户行为的语义分析来做评分推荐,主要方法有隐性语义分析LSA和隐含狄利克雷分布LDA,

  • 用图模型做协同过滤

    用图模型做协同过滤,则将用户之间的相似度放到了一个图模型里面去考虑,常用的算法是SimRank系列算法和马尔科夫模型算法。

3. 频繁项集的评估标准

  • 支持度:

    • 支持度就是几个关联的数据在数据集中出现的次数占总数据集的比重。或者说几个数据关联出现的概率。
      Support ( X , Y ) = P ( X Y ) = number  ( X Y ) num (AllSamples)  \text {Support} (X, Y)=P(X Y)=\frac{\text { number }(X Y)}{\text { num (AllSamples) }} Support(X,Y)=P(XY)= num (AllSamples)  number (XY)
  • 置信度:

    • 一个数据出现后,另一个数据出现的概率,或者说数据的条件概率。
      Confidence  ( X ⇐ Y ) = P ( X ∣ Y ) = P ( X Y ) P ( Y ) \text {Confidence }(X \Leftarrow Y)=P(X | Y)=\frac{P(X Y)}{ P(Y)} Confidence (XY)=P(XY)=P(Y)P(XY)
  • 提升度 :

    • 提升度表示含有Y的条件下,同时含有X的概率,与X总体发生的概率之比
      Lift  ( X ⇐ Y ) = P ( X ∣ Y ) P ( X ) = Confidence  ( X ⇐ Y ) P ( X ) \text {Lift }(X \Leftarrow Y)=\frac{P(X | Y)}{ P(X)} = \frac{\text { Confidence }(X \Leftarrow Y) }{ P(X)} Lift (XY)=P(X)P(XY)=P(X) Confidence (XY)
  • 注意:

    • 支持度高的数据不一定构成频繁项集,但是支持度太低的数据肯定不构成频繁项集。
    • 提升度体先了 X X X Y Y Y之间的关联关系, 提升度大于1则 X ⇐ Y X\Leftarrow Y XY是有效的强关联规则, 提升度小于等于1则 X ⇐ Y X\Leftarrow Y XY是无效的强关联规则 。一个特殊的情况,如果 X X X Y Y Y独立,则 Lift ⁡ ( X ⇐ Y ) = 1 \operatorname{Lift}(X \Leftarrow Y)=1 Lift(XY)=1,因此 P ( X ∣ Y ) = P ( X ) P(X | Y)=P(X) P(XY)=P(X)

4. 使用Aprior算法找出频繁k项集

输入:数据集合 D D D,支持度阈值 α \alpha α

输出:最大的频繁 k k k项集

  • 扫描整个数据集,得到所有出现过的数据,作为候选频繁1项集。 k = 1 k=1 k=1,频繁0项集为空集。

  • 挖掘频繁 k k k项集

    • 扫描数据计算候选频繁 k k k项集的支持度
    • 去除候选频繁 k k k项集中支持度低于阈值的数据集,得到频繁 k k k项集。如果得到的频繁 k k k项集为空,则直接返回频繁 k − 1 k-1 k1项集的集合作为算法结果,算法结束。如果得到的频繁 k k k项集只有一项,则直接返回频繁 k k k项集的集合作为算法结果,算法结束。
    • 基于频繁 k k k项集,连接生成候选频繁 k + 1 k+1 k+1项集。
  • k = k + 1 k=k+1 k=k+1,转入步骤挖掘频繁 k k k项集。

从算法的步骤可以看出,Aprior算法每轮迭代都要扫描数据集,因此在数据集很大,数据种类很多的时候,算法效率很低。

具体实现:

image-20240303171943322

5. 使用Aprior算法找出强关联规则

  • 强关联规则:

    • 如果规则 R R R😒\Rightarrow $满足 :

    s u p p o r t ( X ⇒ Y ) ≥ min ⁡ s u p (1) \tag{1} { support }(X \Rightarrow Y) \geq \min {sup} support(XY)minsup(1)

    c o n f i d e n c e ( X ⇒ Y ) ≥ min ⁡ c o n f (2) \tag{2} confidence (X \Rightarrow Y) \geq \min conf confidence(XY)minconf(2)

    称关联规则 X ⇒ Y X\Rightarrow Y XY为强关联规则,否则称关联规则 X ⇒ Y X\Rightarrow Y XY为弱关联规则。在挖掘关联规则时,产生的关联规则要经过 min ⁡ s u p \min sup minsup min ⁡ c o n f \min conf minconf的衡量筛选出来的强关联规则才能用商家的决策

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

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

相关文章

IP代理池是什么?怎样判断IP池优劣?

许多做跨境电商的朋友们都会使用到IP代理池这个模块,那会有新想加入到跨境电商这个行业的朋友们会有疑问,IP代理池究竟是什么?今天为你解答。 IP代理池是一种集成多个代理IP的系统,其核心功能在于收集并维护大量的可用IP地址&…

大语言模型开发各个阶段的评估方法(未完)

大语言模型开发过程评估 1. 提出问题2. 大语言模型开发过程评估数据评估方法训练数据质量评估评价数据集或者基准的质量评估 模型评估方法评估基座模型评估通用大语言模型评估专用大语言模型 1. 提出问题 场景:我们要设计一个专有领域的大语言模型,设计…

什么是ECC?ECC 和 RSA 之间有何区别?

椭圆曲线密码学 (ECC) 是一种基于椭圆曲线数学的公开密钥加密算法。 它提供了一种执行密钥交换、数字签名和加密等加密操作的安全方式。 ECC 为 1977 年首次发布的 Rivest-Shamir-Adleman (RSA) 加密算法提供了一种替代性方案。 继续阅读,进一步了解椭圆曲线密码学…

CSC博士联培申请时间线

暂时只记得这么多了,有问题会及时修改。 #mermaid-svg-ZMjY9etaS7StCVuw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZMjY9etaS7StCVuw .error-icon{fill:#552222;}#mermaid-svg-ZMjY9etaS7StCVuw .e…

基于UDP的可靠传输协议QUIC协议

基于 UDP 协议实现的可靠传输协议的成熟方案了,那就是 QUIC 协议,已经应用在了 HTTP/3。 QUIC是如何实现可靠传输的 基于 UDP 协议实现的可靠传输协议的成熟方案了,那就是 QUIC 协议,已经应用在了 HTTP/3。 Packet header Packe…

采用大语言模型进行查询重写——Query Rewriting via Large Language Models

文章:Query Rewriting via Large Language Models,https://arxiv.org/abs/2403.09060 摘要 查询重写是在将查询传递给查询优化器之前处理编写不良的查询的最有效技术之一。 手动重写不可扩展,因为它容易出错并且需要深厚的专业知识。 类似地…

常识四堆外内存

常识四堆外内存-腾讯云开发者社区-腾讯云

跳跳!

题源 贪心~ 题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去。 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 i 块的石头高度为hi​,地面的高度是 h0​0。你估计着,从第…

Monaco Editor系列(二)Hello World 初体验

前言:上一篇文章我主要分享了从 Monaco Editor 入口文件以及官方提供的示例项目入手,对一部分源码进行剖析,以及分享了初始化阶段代码的大致执行步骤,这一篇了来讲一下我们要用 Monaco Editor 的时候该怎么用。其中会涉及到一些 A…

ubuntu20.04 运行 lio-sam 流程记录

ubuntu20.04 运行 lio-sam 一、安装和编译1.1、安装 ROS11.2、安装 gtsam1.3、安装依赖1.4、下载源码1.5、修改文件1.6、编译和运行 二、官方数据集的运行2.1、casual_walk_2.bag2.2、outdoor.bag、west.bag2.3、park.bag 三、一些比较好的参考链接 记录流程,方便自…

选数(dfs,isprime)

题目&#xff1a;P1036 [NOIP2002 普及组] 选数 - 洛谷 | 计算机科学教育新生态 (luogu.com​​​​​​.cn) #include<bits/stdc.h> using namespace std; int n,k; int a[22]; long long ans; bool isprime(int n){for(int i2;i<sqrt(n);i){if(n%i0) return false;…

dm8 开启归档模式

dm8 开启归档模式 1 命令行 [dmdbatest1 dm8]$ disql sysdba/Dameng123localhost:5237服务器[localhost:5237]:处于普通打开状态 登录使用时间 : 3.198(ms) disql V8 SQL> select name,status$,arch_mode from v$database;行号 NAME STATUS$ ARCH_MODE ----------…

【嵌入式开发 Linux 常用命令系列 7.4 -- awk 处理文件名,去除后缀只保留文件名】

请阅读【嵌入式开发学习必备专栏 】 文章目录 awk 处理文件名&#xff0c;去除后缀只保留文件名 awk 处理文件名&#xff0c;去除后缀只保留文件名 在 shell 中&#xff0c; 可以使用 awk 来处理文件名&#xff0c;去除其后缀。下面是一个示例命令&#xff0c;它会将带有后缀的…

qtcreator配置msvc编译器 visual studio配置qt开发 以及使用对比

qtcreator配置msvc编译器开发 qtcreator在线安装&#xff08;qt5.12之后&#xff09;时候&#xff0c;默认选择的是mingw&#xff08;gcc编译器的windows版本&#xff09;的qt库以及migw编译器&#xff0c;我们可以额外勾选msvc&#xff08;visual studio的编译器&#xff0c;…

IPv4子网判断

有时候&#xff0c;服务后端需要对客户端的所属组进行判断&#xff0c;以决定何种访问策略权限。而客户端IP所在子网是一种很简单易实现的分组方法。 虽然现在早已经进入IPv6时代&#xff0c;不过IPv4在局域网仍广泛使用&#xff0c;它的定义规则相对简单&#xff0c;本文介绍的…

Python中输出显示台的设置

效果: 前言 这种文字显示的方式很适合新手来学习,毕竟新手还学不到pygame做游戏的, Python入门我们一般都学的是输入输出的游戏,但是如果加上一些文字和背景的改善可能会更好. 如何改变字体颜色 字体颜色(跟他的变量名是一样的): #改变字体颜色 RED \033[91m GREEN \033…

前端开发语言概览

前端开发语言概览 在当今数字化时代&#xff0c;前端开发已成为构建网站和应用程序不可或缺的一部分。前端开发主要关注用户界面的设计和交互效果&#xff0c;为用户提供良好的用户体验。而要实现这一目标&#xff0c;前端开发者需要掌握多种编程语言和技术。本文将详细介绍一些…

EasyExcel 模板导出excel、合并单元格及单元格样式设置。 Freemarker导出word 合并单元格

xls文件&#xff1a; 后端代码&#xff1a; InputStream filePath this.getClass().getClassLoader().getResourceAsStream(templateFile);// 根据模板文件生成目标文件ExcelWriter excelWriter EasyExcel.write(orgInfo.getFilename()).excelType(ExcelTypeEnum.XLS).withTe…

c#仿ppt案例

画曲线 namespace ppt2024 {public partial class Form1 : Form{public Form1(){InitializeComponent();}//存放所有点的位置信息List<Point> lstPosition new List<Point>();//控制开始画的时机bool isDrawing false;//鼠标点击开始画private void Form1_MouseD…

【C语言基础】:自定义类型(一)--> 结构体

文章目录 一、内置类型与自定义类型1.1 内置类型&#xff08;基本数据类型&#xff09;1.2 自定义类型 二、结构体2.1 结构体的声明2.2 结构体变量的创建和初始化2.3 结构体的特殊声明2.4 结构体的自引用 三、结构体内存对齐3.1 对齐规则3.2 为什么存在内存对齐3.3 修改默认对齐…