ng机器学习视频笔记(十三)

——推荐系统基础理论

(转载请附上本文链接——linhxx)

一、概述

推荐系统(recommender system),作为机器学习的应用之一,在各大app中都有应用。这里以用户评价电影、电影推荐为例,讲述推荐系统。

最简单的理解方式,即假设有两类电影,一类是爱情片,一类是动作片,爱情片3部,动作片2部,共有四个用户参与打分,分值在0~5分。

但是用户并没有对所有的电影打分,如下图所示,问号表示用户未打分的电影。另外,为了方便讲述,本文用nu代表用户数量,nm代表电影数量,r(i,j)=1表示用户j给电影i评价,y(i,j)表示用户j给电影i的打分(当r(i,j)=1时这里的值才有效)。

前三部是爱情片,用户Alice给前两部爱情片都5分,根据直接判断,其打5分的概率很高。

下面首先就要解决用机器学习来预测打分的问题,进而讨论电影的相关性问题。

二、基于内容的推荐系统

1、简要描述

还是上面的几个人和几个电影,现假设已知每部电影的爱情属性和动作属性,分别用x1和x2表示每部电影的这两个特征值,加上x0=1,则该场景变为线性回归场景。即需要预测出用户对每种类型电影的喜好程度矩阵θ,进而在已知某种用户未打分的电影的特征x的情况下,用θTx预测用户可能给该电影打分的分值。

下图假设已求出用户的θ=[0 5 0]T,第一个数0对应x0没有实际意义,第二个数5表示用户对爱情片的喜欢程度,第三个数0表示用户对动作片的喜好程度。则可以预测出,该用户对第三部电影的打分,可能4.95。如下图所示:

2、计算单个用户的θ

列出类型线性回归的代价函数,但是在推荐系统中,有一些和线性回归的代价函数不太一样的地方:

1)求和的时候,只计算用户已经打过分的电影,忽略未打分的电影。未打分的无法参与计算。

2)不需要除以用户已打过分的电影的数目。这里是常量,忽略对结果影响不大。

3、计算所有用户的θ

每个用户去计算,要列很多公式,比较繁琐,这里可以把公式合并,一次性求出所有的用户对应的θ,即在代价函数的地方,累加上所有用户,同时正则化项也需要累加。

接着,就用梯度下降算法,进行计算。

这部分内容和线性回归完全一致,区别只有代价函数的列式不太一样,梯度下降部分完全一致。

这里基于内容的推荐,可以认为给定样本的特征x,求θ的过程。

三、基于用户评论的预测

现在考虑到,由于现实中并不一定会给每个电影都有特征标签,并且特征的数量可能非常多,但是考虑到已经有很多用户已经打分,现在反求每个电影的特征。

这里可以理解为给定用户对不同特征的喜好程度θ,求样本的特征的过程。如下图所示:

实际求解过程也很简单,只要把x当作变量,θ当作已知值,反过来列代价函数,进而再用梯度下降求出x即可。

四、协同过滤算法

上面的两个问题,有点像鸡生蛋还是蛋生鸡的问题,可以看出x和θ,只要知道一个内容,就可以求出另一个内容。进而,可以用求出的内容,反过来再优化原来的内容。相当于可以形成一个θ->x->θ->x……的链。

这里,首先由用户对电影评分,因此可以认为多个用户对电影的评分,致使计算出电影的特征,而特征又反过来进一步优化对用户评分的预测。

对于公式上,考虑将两个公式整合成一个,再分别对θ和x求偏导数,进行梯度下降,则可以得到θ和x。

这样的计算方式,则成为协同过滤算法(collaborative filtering algorithm)。

公式如下:

五、向量化实现

现在回到一开始的问题,怎么判断两个电影是否类型相似,进而给用户推荐相似类型的电影。

前提条件还是之前的,知道部分用户对电影的打分,未知电影的类型,如下图所示:

此时,可以用到向量化实现技术(vectorization implementation),简单来说,即用上面的协同过滤计算出x和θ后,将x和θ都表示成矩阵,并且用xθT得到预测矩阵,可以预测出每个用户对每种电影的打分,以及预测出电影的特征,矩阵如下图所示:

这个称为低秩矩阵分解(low rank matrix factorization)。

此时,要判断两个电影是否相似,则很简单,只要计算电影i和电影j对应的特征矩阵的距离||x(i)-x(j)||,当这个值越小,则表示这两部电影越相似。

六、均值归一化

1、现有问题

现考虑一个问题,当来了一个新用户,他没有对任何电影打分。此时如果用协同过滤算法,由于其没有任何的打分,则代价函数中,会只剩下θ平方和正则化项,另外两项都会为0。

因此,当需要对θ进行代价函数最小化求解,会得到θ=0时代价函数最小(显然的事情),结果就是会预测出用户对所有电影的评分都是0分。这个有违常理。

2、解决问题

为了解决问题,引入均值归一化(mean normalization),步骤如下:

1)设矩阵Y表示所有用户对所有电影的打分,为打分的电影用?表示。

2)在已打分的电影中,计算每个电影的分数均值。计算方式即打分的总数除以打分的总人数。设 这个矩阵为μ。

3)令Y=Y-μ,得到一个新的矩阵,其中?部分仍为?。

4)用这个新的Y去进行协同过滤算法,求出x和θ。

5)此时对于某个用户,可以预测结果是(θ(j))Tx(i)(i),要加上对应的μ,是因为一开始扣除了μ。

根据上述的计算,得出的新用户的预测结果,会是均值。这个可以简单的推出,因为结果是(θ(j))Tx(i)(i),而显然(θ(j))Tx(i)=0(因为这个用户之前没有任何预测,θ=0),故只会剩下μ值。

这样,对于每一个新用户,在还没进行评价之前,会预测其对每个电影的评价是均值,这也就表示给新用户推荐电影时,会按均值,把均值较高的电影推荐给用户,这个比较符合常理。

七、总结

这里的推荐系统,可以算是一个引子,只介绍了推荐系统的一些基础思想,对于真正完整的推荐系统,还有需要内容等待探索。后续我也会继续这方面的学习。

——written by linhxx

更多最新文章,欢迎关注微信公众号“决胜机器学习”,或扫描右边二维码。

转载于:https://www.cnblogs.com/linhxx/p/8412836.html

ng机器学习视频笔记(十四) ——推荐系统基础理论相关推荐

  1. ng机器学习视频笔记(十三) ——异常检测与高斯密度估计

    ng机器学习视频笔记(十三) --异常检测与高斯密度估计 (转载请附上本文链接--linhxx) 一.概述 异常检测(anomaly detection),主要用于检查对于某些场景下,是否存在异常内容 ...

  2. ng机器学习视频笔记(三) ——线性回归的多变量、特征缩放、标准方程法

    ng机器学习视频笔记(三) --线性回归的多变量.特征缩放.标准方程法 (转载请附上本文链接--linhxx) 一.多变量 当有n个特征值,m个变量时,h(x)= θ0+θ1x1+θ2x2-+θnxn ...

  3. ng机器学习视频笔记(二) ——梯度下降算法解释以及求解θ

    ng机器学习视频笔记(二) --梯度下降算法解释以及求解θ (转载请附上本文链接--linhxx)   一.解释梯度算法 梯度算法公式以及简化的代价函数图,如上图所示. 1)偏导数 由上图可知,在a点 ...

  4. 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进

    吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...

  5. 机器学习入门笔记(四):朴素贝叶斯分类

    文章目录 一.朴素贝叶斯法 1.1 实现原理 1.2 后验概率最大化 二.朴素贝叶斯法的参数估计 2.1 极大似然估计 2.2 学习与分类算法 2.3 朴素贝叶斯分类器例题 2.4 贝叶斯估计 推荐文 ...

  6. 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9712321 作者:七十一雾央 新浪微博:http:// ...

  7. 哈工大机器学习复习笔记(四)

    本篇文章是在参考西瓜书.PPT课件.网络上相关博客等资料的基础上整理出的机器学习复习笔记,希望能给大家的机器学习复习提供帮助.这篇笔记只是复习的一个参考,大家一定要结合书本.PPT来进行复习,有些公式 ...

  8. Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理

    Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...

  9. 强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现

    强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现 TD3算法简介 TD3是Twin Delayed Deep Deterministic policy gradie ...

最新文章

  1. 部分人说 Java 的性能已经达到甚至超过 C++,是真的吗?
  2. mysql 控制台全是_Mysql控制台命令大全
  3. DCMTK:DSRNumericMeasurementValue类的测试程序
  4. C# Winform 未能加载文件或程序集System.Data.SQLite或它的某一个依赖项。试图加载格式不正确的程序...
  5. host 端口_如何让多端口网站用一个nginx进行反向代理实际场景分析
  6. linq to sql查询中返回linq自动建立的实体类型)
  7. 新手如何从零开始入门前端开发,分享我的学习方法!
  8. 企业职工能实行弹性退休吗?
  9. 首个教育部印发的人工智能行动计划出炉:规划三步走,大学有三任务
  10. 更改JENKINS主目录
  11. Atitit java wav 压缩 mp3功能总结 目录 1.1. Lame mp3编码器 1 1.2. 使用时发现错误,不支持Unsupported number of channels: 4
  12. 阿里巴巴JAVA开发手册最新版pdf
  13. 10种常用数据分析方法
  14. 【Centos】【Linux】如何杀掉进程——【进程杀手】2020-12-01
  15. html网页如何添加google广告,三步将谷歌广告代码添加到WordPress网站侧边栏 | 老豆国外联盟营销教程指南...
  16. 13. 如何打破白天开会、晚上加班的节奏
  17. R语言 第2章 数据对象与数据读写(2)
  18. 作为数据分析师,这6款数据分析热门工具,你不能错过~
  19. Debian旧版本下载
  20. 纳尼?华为首席架构师只用434页笔记,就将网络协议给拿下了

热门文章

  1. 二叉树的层序遍历—leetcode102
  2. 鸿蒙系统执行效率,华为鸿蒙手机优势:兼容所有安卓软件、比安卓运行速度快60%...
  3. 禁止 VMware Fusion 自动调整 Windows 分辨率
  4. centos7 下安装mysql5.7
  5. Visual Studio 2017 、2019安装Windows SDK失败的解决办法(改盘符引起)
  6. mysql中查询触发器的语句
  7. Leetcode题库 32.从上到下打印二叉树(层次遍历 C实现)
  8. 机器学习-单个感知器实现逻辑或(matlab实现)
  9. 概率论-2.2 随机变量的数学期望(重点:随机变量X的期望)
  10. dnf 跨服 服务器 位置,dnf2017跨区表_2017dnf90级版本跨区表_快吧游戏