MF(推荐系统的矩阵分解技术)论文笔记

论文概述

推荐系统的矩阵分解技术可以为用户提供更为准确的个性化推荐,对比传统的近邻技术,矩阵分解技术可以纳入更多信息,如隐式反馈时间效应置信度

近邻技术:基于用户或物品之间的相似性进行推荐,当用户之间已有评价计算出两个用户爱好类似,就将a用户的其他物品推荐给b

矩阵分解技术:把原来的大矩阵,近似分解成两个小矩阵的乘积,在实际推荐计算时不再使用大矩阵,而是使用分解得到的两个小矩阵。

论文内容

推荐系统策略

1. 为每一个用户或者项目创建一个档案记录特征,通过这些资料,系统可以将用户和匹配的产品联系起来

2. 协同过滤:依赖于用户过去的行为,分析用户之间的关系和产品之间的关系,按照群体行为去推荐,寻找和a相似的用户群体,将这些群体的爱好推荐给a

邻域方法:一个用户评价了产品A是好,那么他很有可能给A的相似产品B也评价好;当两个用户有很相似的爱好,那么他们之间的评分也可以互相补充

潜在因素模型:通过分析大量的用户评分,可以大概知道影响评分的一些潜在因素,比如你给戏剧电影很高评价,那么系统会认为戏剧这个特征就是一个潜在因素,当有新的戏剧出现就会给你推荐,利用一个二维模型简化说明,我们可以预测Gus可能对Dumb and Dumber的评分较高,而对Braveheart评分一般,不喜欢The Color Purple

横坐标表示用户的性别导向,纵坐标表示电影积极或消极,将用户和项目(电影)按照已有评价分析后放入图中,每个项目i对应一个向量qi,每个用户u对应一个pu,两者的点积越大,说明该用户对此项目偏爱程度更高

当一些用户可能并没有对某些电影做出评价,我们也可以通过该方法估算用户u对项目i的评分r

基本矩阵因式分解模型

将上述二维坐标扩展,将用户和项目映射到维数f的联合潜在因子空间,用户和项目的交互可以建模为空间的内积,捕获了用户和项目之间的交互,公式1表示预测的用户和项目之间的交互

该模型的主要挑战就是系统需要找到每个项目和用户映射的向量qi和pu,这个模型和SVD技术密切相关

公式1 

奇异值分解SVD技术:

将一个大矩阵分解为三个部分,第一个部分告诉我们数据的主要方向,第二个部分告诉我们每个方向的重要性有多大,第三个部分则是另一个角度的数据主要方向。,但是当数据稀疏性很高,会导致过拟合状态

损失函数

早期为了解决稀疏性问题采用填补空缺值,但是往往不准确的估计值会扭曲数据,我们只对已有的评分建模,该系统通过拟合先前观察到的评级来学习模型。

公式2 

公式2为SVD的损失函数,系统会最小化已知评分集合上的正则化平方误差,在加号左边是最小化预测评分与实际评分之间的差异,加号右侧是正则化项(也叫惩罚项)用于控制模型的复杂度;可以防止出现过拟合状态

优化算法

最小化该上述方程有两个方法:随机梯度下降法和交替最小二乘法

随机梯度下降法

随机梯度下降(SGD)就像是在一座大山的地图上寻找最低点,但你不能看到整个地形,只能通过不断随机挑选一些地方来感受坡度,然后沿着坡度最大的方向小步向下走,希望最终能找到那个最低点。

随机梯度下降是一种迭代的优化算法,它在每次迭代中只使用一个或一小批训练样本来更新模型参数。这种方法的优点是在大规模数据集上效率较高,因为不需要在每次迭代时处理整个训练集。

公式3

公式3表示给出训练集(u,i),系统会给出预测值qiTpu,然后用真是的计算值r减去预测值,得到误差预测值

接着我们要优化更新参数q和p,见公式4

公式4

首先,我们有一个误差项 e​,它表示模型对第 𝑖i 个样本的预测和实际值之间的差距。然后,我们有一个学习率 γ,它决定了我们根据这个误差调整模型参数的幅度,就像你决定每次走多远一样。接下来,我们用这个误差和学习率来更新参数qi​ 和 pu​。更新的过程就是让参数朝着减少误差的方向迈出一步,这一步的大小由学习率 γ 和误差 e​ 共同决定。

但是对于数据少或者需要更精确的状态还有一种方法:交替最小二乘法

交替最小二乘法ALS

每次固定一个因子向量(比如qi),改变另一个因子向量(pi),如此反复交替直到收敛,利用ALS系统可以并行化,即可以同时计算多个因子向量,当面对隐式项目集的时候,训练集很难采用梯度下降,此时就可以利用ALS技术来优化算法

增加偏差

有时候有些用户会偏向于打低分,有些用户即使物品不喜欢也偏向于高分,有时候某些项目可能推出优惠劵等于是有高分,也并不代表用户就喜欢,也有可能某个平台就是限制评分等操作,所以我们往往要考虑这些偏差

公式5

总体平均评分用µ表示;参数bu和bi分别表示用户u和第i项与平均值的观测偏差,公式5表示用户和项目的交互偏差(用户对项目的偏好估计可能会产生的误差)

现在,假设µ对所有电影的平均评分是3.7星。此外,《泰坦尼克号》比一部普通电影要好,所以它的评分往往比平均电影高出0.5颗星。另一方面,乔是一个关键的用户,他的评分往往比平均水平低0.3颗星。因此,乔对《泰坦尼克号》的评级估计为3.9颗星(3.7 + 0.5 - 0.3)。

公式6

公式6在原有的用户和项目的交互算法上加入了偏差,现在右边四个值分别表示全局平均值、项目偏差、用户偏差和用户项目交互,从而使得结果更准确

公式7

 公式7在原来的损失函数上做了一些改变,添加了偏差项,对其建模非常重要

其他输入源

通常,一个系统必须处理冷启动问题,其中许多用户提供很少的评级,使它很难对他们的品味得出一般性的结论。缓解这个问题的一种方法是合并关于用户的其他信息来源。推荐系统可以使用隐式反馈来深入了解用户的偏好。

公式8
  • N(u)表示用户u的隐式偏好项目集
  • A(u)表示用户u对应的属性集(性别、年龄、家庭等)
  • xi表示用户的隐式爱好集内每个项目的对应向量,这个累加和反映了用户 u 对项目集中所有项目的因素向量的综合偏好

为了使得这个累加和更有意义,通常会进行规范化处理。规范化可以帮助我们调整不同用户之间项目集大小的差异,以及防止偏好向量的长度变得过大,导致模型不稳定。一个常见的规范化方法是减去一个比例因子,例如项目集大小的0.5倍

时间动态

在公式6的基础上,给项目偏差、用户偏差、用户偏好向量都加上了时间的概念,因为物品本身不像人,基本特征是不会变化,可以视为静态

公式9

  • 第一个时间效应解决了这样一个事实,即一件物品的受欢迎程度可能会随着时间的推移而改变。例如,电影可能会被外部事件引发,比如演员在新电影中的出现。因此,这些模型将项目偏差b视为时间的函数。
  • 第二个时间效应允许用户随着时间的推移而改变他们的基线评级。例如,一个倾向于给平均电影“4星”的用户现在可能会给这样的电影评级“3星”。这可能反映了几个因素,包括用户评分量表的自然漂移,用户相对于其他最近的评分,以及家庭成员的身份会随着时间的推移而改变。因此,在这些模型中,参数bu是一个时间的函数。
  • 第三个时间效应使得用户会随着时间的推移而改变他们的偏好。例如,一个心理惊悚片类型的粉丝可能会在一年后成为犯罪剧的粉丝。类似地,人类也是在改变了他们对某些演员和导演的看法。该模型通过将用户因素(向量pu)作为时间的函数来解释这种效应。

不同置信度的输入

矩阵分解模型可以很容易地接受不同的置信水平,这让它给不太有意义的观察更少的权重。如果对观察 r 的信心表示为 c ,那么模型将可以增强成本函数

公式10

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

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

相关文章

ChatGPT4.0知识问答、DALL-E生成AI图片、Code Copilot辅助编程,打开新世界的大门

目录 1、DALL-E 文字转图片 在线AI修改2、Write For Me3、Code Copilot 目前最强的AI编程大模型4、Diagrams: Show Me5、Instant Website [Multipage] 网站合成神器6、AskYourPDF Research Assistant 无限PDF7、Diagrams & Data: Research, Analyze, Visualize 精读Excel …

【注解和反射】获取类运行时结构

继上一篇博客【注解和反射】类加载器-CSDN博客 目录 七、获取类运行时结构 测试 getFields()和getDeclaredFields() getMethods()和getDeclaredMethods() 七、获取类运行时结构 获取类运行时结构通常指的是在Java等面向对象编程语言中,使用反射(Ref…

迁移学习基础知识

简介 使用迁移学习的优势: 1、能够快速的训练出一个理想的结果 2、当数据集较小时也能训练出理想的效果。 注意:在使用别人预训练的参数模型时,要注意别人的预处理方式。 原理: 对于浅层的网络结构,他们学习到的…

[Swift]单元测试

编写单元测试是确保你的代码质量和功能正确性的重要步骤 一、编写单元测试的详细流程 1. 创建一个新的Xcode项目 如果你尚未创建一个项目,首先你需要在Xcode中创建一个新的iOS项目: 打开Xcode,选择“File” > “New” > “Project”…

重生之我是Nginx服务专家

nginx服务访问页面白色 问题描述 访问一个域名服务返回页面空白,非响应404。报错如下图。 排查问题 域名解析正常,网络通讯正常,绕过解析地址访问源站IP地址端口访问正常,nginx无异常报错。 在打开文件时,发现无法…

R可视化:ggplot2绘制双y轴图

介绍 ggplot2绘制双y轴图加载R包 knitr::opts_chunk$set(message = FALSE, warning = FALSE) library(tidyverse) library(readxl)# rm(list = ls()) options(stringsAsFactors = F) options(future.globals.maxSize = 10000 * 1024^2)Importing data 下载Underdetection of c…

IDEA实现Springboot项目自动热部署

每当我们在修改代码时,往往需要重新启动项目,这样不仅浪费时间而且很麻烦,我们可以通过IDEA的热部署来提高效率 1、首先点file >> settings >> Build Excution >> Compire,选择Build project auto matically 2.…

CMakeLists.txt中如何添加编译选项?

1. 引子 编译器有多种可供选择,如g、c、clang等,如下以c作为示例。 2. 使用CMAKE_CXX_FLAGS添加编译选项 在Makefile中可能用类似如下的指令来添加编译选项: /usr/bin/c -Wall -Wextra -Wno-sign-compare -Wno-unused-variable -Wno-unuse…

flutter笔记-主要控件及布局

文章目录 1. 富文本实例2. Image2.1 本地图片2.2 网络图片 笔记3. 布局4. 滑动相关view4.1 GridView类似九宫格view4.2 ListView 关于widget的生命周期的相关知识这里就不做介绍,和很多语言类似; 1. 富文本实例 Dart中使用richtext,示例如下…

Vue3+Vite开发的项目进行加密打包

本文主要介绍Vue3+Vite开发的项目如何进行加密打包。 目录 一、vite简介二、混淆工具三、使用方法1. 安装插件:2. 配置插件:3. 运行构建:4. 自定义混淆选项:5. 排除文件:下面是Vue 3+Vite开发的项目进行加密打包的方法。 一、vite简介 Vite 是一个由 Evan You 创造的现代…

XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台

XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台 摘要 随着信息技术的迅速发展,快速构建高质量、高可靠性的企业级应用成为了迫切需求。XBoot,作为一个基于Spring Boot 2.x的一站式前后端分离快速开发平台,通过整合微信…

针对icon报错

针对上篇文章生成图标链接中图标报错 C# winfrom应用程序添加图标-CSDN博客 问题:参数“picture”必须是可用作Icon的参数 原因:生成的ico图标类型不匹配 解决方法: 更改导出的ico类型

iOS - 多线程-读写安全

文章目录 iOS - 多线程-读写安全1. 多读单写1.1 场景1.2 实现方案1.2.1 pthread_rwlock:读写锁1.2.1.1 示例 1.2.2 dispatch_barrier_async:异步栅栏调用1.2.2.1 示例 iOS - 多线程-读写安全 假设有一个文件,A线程进行读取操作,B…

数智时代的AI人才粮仓模型解读白皮书(2024版)

来源:极客邦科技 自 2023 年上半年起,ChatGPT 等大模型技术蓬勃发展,AI 技术不断突破边界,展现 出惊人的潜力和发展速度。从早期的逻辑推理、专家系统,到如今的深度学习、神经网络, AI 技术显著缩小了科学…

ASP.NET企业投资价值分析系统

摘 要 本文将影响股票投资价值的宏观因素、行业因素、企业内部等诸多因素予以量化分析,对钢铁板块和汽车板块各上市公司进行综合评估,为广大股民的投资方向和资金安全提供了有力的支持。本文还阐述了企业投资价值分析的必要性,说明了企业投…

分类算法——模型评估(八)

1混淆矩阵 在分类任务下,预测结果与正确标记之间存在四种不同的组合,构成混淆矩阵(适用于多分类) TP True Possitive FN False Negative 2精确率(Precision)与召回率(Recall) 精…

mysql-sql-练习题-2

日期topN 日期最值 topN 任意区间topN 每年温度top2建表排名函数万能公式(条关) 任意区间 各科第1,3,5名排名函数万能公式 日期 本周过生日 -- 本周表示 加减日期 格式化 拼接 select * from student where date_format(s_age,concat(year(curdate()),…

微信小程序开发六(自定义组件)

自定义组件的创建: 如何创建: 右键选择新建component 创建完成之后需要打开app.json,这是全局使用这个组件,想要单独的页面使用,就在当前页面的json文件中定义 "usingComponents": {"my-zj": &quo…

冰箱主控 32位MCU,多通道、高精度的AD采样配合温度传感器,实现冰箱各温室的精确控温;低功耗设计

概览 小华高性价比32位MCU,多通道、高精度的AD采样配合温度传感器,实现冰箱各温室的精确控温;低功耗设计,绿色低碳、节能环保;模块化设计,充分利用丰富的通讯接口,使主控板、显示板和驱动板灵活…

远程连接docker,实现本地发布版本到服务器

最近在学jenkins的时候,发现涉及到了docker的远程发布调用。后续应该还要自己搭建一个docker的本地仓库。 简单描述一下具体是如何实现的: 1、将docker的服务器开启2375端口(注意,这里的开启是将端口直接暴露出去,不用…