矩阵分解模型

矩阵分解模型矩阵分解模型做如下假设:1.每个用户可描述为n个属性或特征。比如,第一个特征可以对应某个用户对动作片的喜好程度。2.每个物品可描述为n个属性或特征。比如,接上一点,第一个特征可以用对应某部电影与动作片的接近程度。3.将用户和物品对应的属性相乘后求和,该值可能很接近用户会对该物品的评级。 1.显式矩阵分解当要处理的数据是由用户所提供的自身的偏好数据时,这些数据被称作显式偏好数…

大家好,又见面了,我是你们的朋友全栈君。

矩阵分解模型做如下假设:

1.每个用户可描述为n个属性或特征。比如,第一个特征可以对应某个用户对动作片的喜好程度。

2.每个物品可描述为n个属性或特征。比如,接上一点,第一个特征可以用对应某部电影与动作片的接近程度。

3.将用户和物品对应的属性相乘后求和,该值可能很接近用户会对该物品的评级。

 

1.显式矩阵分解

当要处理的数据是由用户所提供的自身的偏好数据时,这些数据被称作显式偏好数据。这类数据包括如物品评级、赞、喜欢等用户对物品的评价。

这些数据大都可以转换用户为行、物品为列的二维矩阵。矩阵的每一个数据表示为某个用户对特定物品的偏好。大部分情况下用户只会和少数物品接触,所以该矩阵只有少部分数据非零,即该矩阵很稀疏

矩阵分解模型

对这个矩阵分解,找到他的两个低阶矩阵。假设我们的用户和物品数目分别是U和I,那对应的“用户-物品”矩阵的维度为U*I。那对应的两个低阶矩阵分别是用户的U*k矩阵,和物品的I*k矩阵。这两个矩阵也被称为因子矩阵。因子矩阵通常是稠密的。

 

由于对“用户-物品”矩阵直接建模,用这些模型进行预测也相对直接:要计算给定用户对某个物品的预计评级,就从用户因子矩阵和物品因子矩阵分别选取相应的行(用户因子向量)与列(物品因子向量),然后计算两者的点积即可

 

而对于物品之间相似度的计算,可以直接用物品矩阵中的因子向量做相似度计算。

 

因子分解类模型的的利弊:

利:求解容易,表现出色

弊:不好解释,吃资源(因子向量多,训练阶段计算量大)

 

2.隐式矩阵分解

隐式矩阵就是针对隐式反馈数据。在这类数据中,用户对物品的偏好不会直接给出,而是隐含在用户与物品的交互之中。二元数据(比如用户是否观看了某部电影或是否购买了某个商品)和计数数据(比如用户观看某部电影的次数)便是这类数据。

 

处理隐式数据的方法相当多。SparkMllib实现了一个特定的方法。它将输入的评级数据视为两个矩阵:一个二元偏好矩阵P和一个信心权重矩阵C。

矩阵分解模型

隐式模型仍然会创建一个用户因子矩阵和一个物品因子矩阵。但是,模型所求解的是偏好矩阵而非评级矩阵的近似。

 

从根本上说,矩阵分解从评级情况,将用户和物品表示为因子向量。若用户和物品因子之间高度重合,则可表示这是一个好推荐。两种主要的数据类型为显示反馈和隐式反馈,其中前者比如评级(用稀疏矩阵表示),后者比如购物历史、搜索记录、浏览历史和点击数据(用密集矩阵表示)。

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146449.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用虚拟机7.1.3安装完Debian 6后,安装VMware-tools时,不能添加共享文件夹?

    使用虚拟机7.1.3安装完Debian 6后,安装VMware-tools时,不能添加共享文件夹?安装VMware-tools时,需要编译一些东西,在debian6中没有合适的编译环境导致;解决方法:1、安装Build-essential,安装完成后使用gcc-v看看GCC是否安装成功; 2、使用uname-r查看内核版本,然后安装与其版本一致的linux-h

    2022年10月18日
    5
  • 数仓搭建ODS层_中心仓模式

    数仓搭建ODS层_中心仓模式尚硅谷电商数仓ODS层

    2022年10月6日
    4
  • springaop面向切面编程_简述面向切面编程思想

    springaop面向切面编程_简述面向切面编程思想Spring理论基础-面向切面编程

    2022年4月20日
    63
  • visitor设计模式ppt_常用的设计模式

    visitor设计模式ppt_常用的设计模式动机Visitor是访问者的意思。数据结构中保存着元素。一般我们需要对元素进行处理,那么处理元素的代码放在哪里呢?最显然的方法就是放在数据结构的类中,在类中添加处理的方法。但是如果有很多处理,就比较麻烦了,每当增加一种处理,我们就不得不去修改表示数据结构的类。visitor模式就是用来解决这个问题的,visitor模式将数据结构的定义和处理分离开。也就是会新增一个访问者的类,将数据元素的处理交给访问者类,这样以后要新增处理的时候,只需要新增访问者就可以了。模式定义将更新(变更)封装到一个类中(访问

    2022年8月8日
    7
  • 使用C++解决八数码问题

    使用C++解决八数码问题八数码问题问题描述:通过单步移动把下面的矩阵移动成1-8环绕一周的矩阵(即0在中间,1-8顺序排成一圈,1在哪无所谓)217860345283164705 \begin{matrix} 2&8&3\\ 1&6&4\\ 7&0&5\\ \end{matrix}(1)分别用宽度和深度搜索进行;(2)假设启发式的方程为f(n)=d(n)+…

    2022年7月12日
    26
  • vue怎么实现分页_vue实现表格

    vue怎么实现分页_vue实现表格今天有人问我怎么用vue实现分页功能,我开始觉得这不是后端的事吗?怎么我们前端也要干了,而且现在怎么多UI库,比如Element-ui,我觉得这是个很好的前端UI库啊。不过既然有人问了,我就写写吧。这是我的HTML代码<template><ul><!–上一页按钮–><li><buttonclass=”el-icon-arrow-left”@click=”getPageGo(-1)”:disabled=”isAc.

    2022年10月1日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号