首页 > 其他分享 >【无监督机器学习】9.推荐系统

【无监督机器学习】9.推荐系统

时间:2023-10-21 11:22:22浏览次数:32  
标签:frac sum 电影 用户 学习 监督 机器 推荐 partial

推荐系统

推荐系统的定义

推荐系统是利用用户产生的行为数据,对用户的兴趣进行建模,从而给用户推荐可能感兴趣的物品。

推荐系统的应用

  • 电商网站
  • 新闻网站
  • 流媒体平台

协同过滤

协同过滤是一种基于用户行为的推荐算法,它的基本思想是利用用户的历史行为数据,计算用户之间的相似度,然后根据相似度为用户生成推荐列表。

以电影网站预测为例,有以下数据:

电影名称 用户1 用户2 用户3 用户4 \(x_1\)(爱情) \(x_2\)(动作)
电影1 5 5 0 0 0.9 0
电影2 5 0 1 0
电影3 4 0 0.99 0
电影4 0 0 5 4 0 1
电影5 0 0 5 0 0.9

对于每一个电影可能的类型,我们可以定义一个特征,比如\(x_1\)表示爱情,\(x_2\)表示动作。记为\(x^{(i)}\),其中\(i\)表示电影的编号。

以电影1为例,\(x^{(1)}=(0.9,0)\),表示电影1的类型为爱情。

参数\(W\)和\(b\)的学习

预测用户对电影评分的公式为:

\[\hat{y}^{(i,j)}=W^{(j)}x^{(i)}+b^{(j)} \]

其中,\(W^{(j)}\)表示用户\(j\)的参数,\(b^{(j)}\)表示用户\(j\)的偏置。

评分预测的损失函数为:

\[J(W^{(1)},...,W^{(n_u)},b^{(1)},...,b^{(n_u)})=\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}((W_k^{(j)})^2) \]

其中,\(n_u\)表示用户的数量,\(n\)表示特征的数量,\(r(i,j)\)表示用户\(j\)是否对电影\(i\)评分。

参数\(X\)的学习

电影类型预测是的损失函数为:

\[J(X^{(1)},...,X^{(n_m)})=\frac{1}{2}\sum_{i=1}^{n_m}\sum_{j:r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}((X_k^{(i)})^2) \]

其中,\(n_m\)表示电影的数量,\(n\)表示特征的数量,\(r(i,j)\)表示用户\(j\)是否对电影\(i\)评分。

协同过滤算法

协同过滤的损失函数

将上面两个损失函数合并,得到协同过滤的损失函数:

\[J(X,W,b)=\frac{1}{2}\sum_{(i,j):r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}((X_k^{(i)})^2)+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}((W_k^{(j)})^2) \]

协同过滤的梯度下降

对于参数\(X\),\(W\),\(b\),它们的梯度分别为:

\[\frac{\partial J}{\partial X_k^{(i)}}=\sum_{j:r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)})W_k^{(j)}+\lambda X_k^{(i)}\\ \frac{\partial J}{\partial W_k^{(j)}}=\sum_{i:r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)})X_k^{(i)}+\lambda W_k^{(j)}\\ \frac{\partial J}{\partial b_k^{(j)}}=\sum_{i:r(i,j)=1}((W^{(j)}x^{(i)}+b^{(j)})-y^{(i,j)}) \]

梯度下降的更新公式为:

\[X_k^{(i)}:=X_k^{(i)}-\alpha\frac{\partial J}{\partial X_k^{(i)}}\\ W_k^{(j)}:=W_k^{(j)}-\alpha\frac{\partial J}{\partial W_k^{(j)}}\\ b_k^{(j)}:=b_k^{(j)}-\alpha\frac{\partial J}{\partial b_k^{(j)}} \]

二元标签分类

二元标签分类中,用户对电影的评价只有两种情况,例如:是否点赞、是否收藏等。

分类公式

预测用户二元评价的公式为:

\[\hat{y}^{(i,j)}=\sigma(W^{(j)}x^{(i)}+b^{(j)}) \]

其中,\(\sigma\)表示Sigmoid函数。

损失函数

损失函数为:

\[J(W^{(1)},...,W^{(n_u)},b^{(1)},...,b^{(n_u)})=-\frac{1}{m}\sum_{j=1}^{n_u}\sum_{i=1}^{m}(y^{(i,j)}log(\hat{y}^{(i,j)})+(1-y^{(i,j)})log(1-\hat{y}^{(i,j)}))+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}((W_k^{(j)})^2) \]

均值归一化

对于未评分的新用户,利用原始数据(0-5分)进行预测,会导致预测结果均为0分。

为了解决这个问题,我们可以对原始数据进行均值归一化。

原始数据的计算公式为:

\[Y^{'}=Y-\mu,\mu=\frac{1}{n}\sum_{i=1}^{n}Y_i \]

用户的预测公式为:

\[\hat{y}^{(i,j)}=\sigma(W^{(j)}x^{(i)}+b^{(j)})+\mu_i \]

相似度计算

相似度计算是协同过滤算法的核心,它的目的是计算用户之间的相似度,从而为用户生成推荐列表。

欧式距离

欧式距离是最常用的相似度计算方法,它的计算公式为:

\[d(x,y)=\sqrt{\sum_{i=1}^{n}(x_i-y_i)^2} \]

协同过滤求相似度的缺点

  1. 冷启动问题
    对于新用户,由于没有历史行为数据,无法计算用户之间的相似度。

  2. 无法使用用户的其他信息
    对于用户的其他信息,比如年龄、性别等,无法利用这些信息计算用户之间的相似度。

基于内容的推荐系统

基于内容的推荐系统是一种基于物品的推荐算法,它的基本思想是利用物品的特征,计算物品之间的相似度,然后根据相似度为用户生成推荐列表。

基于内容的推荐系统和协同过滤的区别在于,基于内容的推荐系统是基于物品或用户的特征,而协同过滤是基于用户的评分数据。

基于内容的推荐系统的过程

  1. 特征提取
    对于物品,我们可以定义一些特征,比如电影的类型、电影的导演、电影的演员等。
  2. 特征向量维度压缩
    不同的向量之间进行点积运算,须保持向量的维度一致,通过特征向量压缩,可以减少向量的维度,从而提高运算效率。
    img
  3. 特征相似度计算

深度学习在推荐系统中的应用

维度压缩

为了将特征向量压缩到相同低维度,我们可以使用深度学习实现。
img

相似度计算

深度学习的损失函数为:

\[J=\sum_{i,j:r(i,j)=1}(v_u^{(j)}\cdot v_i^{(i)}-y^{(i,j)})^2+\lambda\sum_{i=1}^{n_m}||v_i^{(i)}||^2+\lambda\sum_{j=1}^{n_u}||v_u^{(j)}||^2 \]

其中,\(v_u^{(j)}\)表示用户\(j\)的特征向量,\(v_i^{(i)}\)表示物品\(i\)的特征向量,\(y^{(i,j)}\)表示用户\(j\)对物品\(i\)的评分。

相似度计算的公式为:

\[d = ||v_u^{(k)}-v_u^{(i)}||^2 \]

预测过程如图所示:
img

大型数据集的处理

系统中可能被推荐的数目往往是非常大的,比如电商网站可能有上百万的商品,流媒体平台可能有上万部电影。

对于这种大型数据集,可以使用检索和排名的方法进行推荐

检索

  • 生成一系列候选物品

    以电影推荐为例,可选的候选方式有:用户看过最接近的电影、用户最喜欢题材中的热门电影,所在地区最热门的电影等。

  • 合并候选物品:去除重复的物品以及用户已经看过的物品

排名

+利用深度学习计算用户对候选物品的评分
+对评分进行排序,得到最终的推荐列表

标签:frac,sum,电影,用户,学习,监督,机器,推荐,partial
From: https://www.cnblogs.com/agitm/p/17778669.html

相关文章

  • java基础漏洞学习----基础命令执行漏洞
    java基础漏洞学习----基础命令执行漏洞基础命令执行常见方法1.ProcessBuilderpackagecom.example.servletdemo;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjavax.servlet.ServletException;importjavax.servl......
  • 学习笔记6
    教材第三章知识点总结Unix/Linux进程管理:多任务处理:多任务处理是指操作系统同时运行多个进程或线程的能力。操作系统通过时间片轮转或优先级调度等算法来实现多任务处理。多任务处理可以提高系统的资源利用率和响应速度。进程的概念理解:进程是程序的执行实例,是操作......
  • React学习笔记14-dangerousSetinnerHtml指令
    1.使用场景dangerouslySetInnerHTML指令能将字符串当做html解析相当于vue中的v-html指令一般我们用来渲染富文本返回的html文本2.使用方法{this.state.tolist.map((item,index)=>{return(<spandangerouslySetInnerHTML={{__html:item}}ke......
  • 基于深度学习的玉米病害识别:探索农业智能化的前沿技术【玉米病害识别实战】
    玉米是世界上最重要的粮食作物之一,然而,玉米病害对其产量和质量造成了严重威胁。传统的病害识别方法通常依赖于人工观察和经验判断,效率低下且易受主观因素影响。近年来,基于深度学习的图像识别技术在农业领域取得了显著进展,为玉米病害的快速、准确识别提供了新的解决方案。本文将介绍......
  • 现代无线移动通信学习
    一、绪论1.1、无线移动通信发展历程  20世纪五六十年代,贝尔实验室蜂窝概念:分出多个小区,每个小区一个基站,相同的频段可以在相距较远的小区间重复使用,小区间干扰处理技术使得相同的频段可以在相邻的小区间重复使用。  第一代移动通信系统是模拟通信系统,形成于20世纪80年代,采......
  • makefile学习记录 :一个工程里有多个makefile 如何make根目录下的makefile 调用子目录
    注:本文个人学习记录目的:一个工程里有多个makefile如何make根目录下的makefile调用子目录下的makefile,编译所有.c文件如图所示目录结构,根目录server:makefile;子目录so:makefile  根目录makefile:GCC=gccAPP=server ALL_C=$(wildcard./*.c)C_OBJ=$(notdir$......
  • java基础漏洞学习----文件操作漏洞
    java基础漏洞学习----文件操作漏洞前置基础知识https://www.cnblogs.com/thebeastofwar/p/17760812.html文件上传漏洞文件上传的方式1.通过文件流index.jsp<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOC......
  • MySQL学习(6)单表访问方法
    什么是访问方法MySQL执行查询语句的方式称为访问方法(accessmethod)。单表的访问方法有哪些const通过主键或唯一二级索引列定位一条记录的方法叫const,这种方法要求主键列或者唯一二级索引列与一个常数进行等值比较时才有效。注意,使用唯一二级索引且搜索条件为ISNULL无效。例......
  • 原码、反码、补码学习
    Java没有无符号数,所以首位都是符号位标志位0表示正数,1表示负数原码是数字的二进制表示,首位为符号位数字的表示用原码,计算用补码(因为计算机只有加法器,减法转换为加法)正数的原码=反码=补码(三码合一)负数反码=原码符号位不变,其余取反负数的补码=反码+10的补码=0000......
  • 思路开发银行流水生成器,仅供学习,可按参数生成数据
    其实小编我自己也比较闲,那么今天就给大家分享一款用易语言开发的银行流水生成器,别说,做的还挺像的~~~~~~~~~~我先把界面给大家奉上来,大家看下 然后核心代码部分我会在这里给大家贴出来,然后软件的话可以去我自己的博客能下载到的!!!============================================......