Lecture 16 Recommender Systems 推荐系统

16.1 问题形式化 Problem Formulation

在机器学习领域,对于一些问题存在一些算法, 能试图自动地替你学习到一组优良的特征。通过推荐系统(recommender systems),将领略一小部分特征学习的思想。

假使有 5 部电影,3部爱情片、2部动作片。  4 个用户为其中的部分电影打了分。现在希望构建一个算法,预测每个人可能给没看过的电影打多少分,以此作为推荐的依据。


下面引入一些标记:
nu       代表用户的数量
nm      代表电影的数量
r(i, j)   如果用户 j 给电影 i 评过分则 r(i, j) = 1
y(i,j)    代表用户 j 给电影 i 的评分 (注:这里 i 和 j 不要搞反)
mj       代表用户 j 评过分的电影的总数

16.2 基于内容的推荐系统 Content Based Recommendations

1 定义

在一个基于内容的推荐系统算法中,假设对于我们希望推荐的东西有一些数据,是这些东西的特征。
现在假设每部电影都有两个特征, x1 代表电影的浪漫程度,x2 代表电影的动作程度。


则每部电影都有一个特征向量,如 x(1)是第一部电影的特征向量,为[0.9 0]。
下面我们采用线性回归模型,针对每一个用户都训练一个线性回归模型,如θ(1) 是第一个用户的模型的参数。 于是有:
θ(j)   用户 j 的参数向量
x(i)   电影 i 的特征向量
对于用户 j 和电影 i,我们预测其评分为:(θ(j))Tx(i)

2 代价函数

针对用户 j,该线性回归模型的代价为预测误差的平方和,加上正则化项:

其中 i: r(i, j) 表示我们只计算那些用户 j 评过分的电影。在一般的线性回归模型中,误差项和正则项应该都是乘以1/2m,在这里我们将m去掉,且不对方差项θ0进行正则化处理。
上面的代价函数只是针对一个用户的,为了学习所有用户,我们将所有用户的代价函数求和:

如果我们要用梯度下降法来求解最优解,我们计算代价函数的偏导数后得到梯度下降的更新公式为:

16.3 协同过滤 Collaborative Filtering

在之前的基于内容的推荐系统中,使用电影的特征,训练出了每一个用户的参数。相反地,如果拥有用户的参数,可以学习得出电影的特征。


但是如果既没有用户的参数,也没有电影的特征,这两种方法都不可行了。可以使用协同过滤算法,同时学习这两者。

优化目标便改为同时针对x和θ进行。是一个:预测 θ,再反过来预测 x, 再预测 θ,再预测 x 的迭代过程。

16.4 协同过滤算法 Collaborative Filtering Algorithm

协同过滤的代价函数定义为:

对代价函数求偏导数:


(注:在协同过滤从算法中,通常不使用方差项,如果需要的话,算法会自动学得。)
协同过滤算法使用步骤如下:


1. 初始 x 和 θ 为一些随机小值
2. 使用梯度下降算法最小化代价函数 J
3. 在训练完算法后,通过计算 θTx 预测用户 j 给电影 i 的评分
通过这个学习过程获得的特征矩阵包含了有关电影的重要数据,这些数据不总是人能读懂的,但是可以用这些数据作为给用户推荐电影的依据。

总结:

16.5 向量化:低秩矩阵分解 Vectorization_ Low Rank Matrix Factorization

协同过滤算法的向量化实现
举例:
1)给出一件产品,能否找到与之相关的其它产品。
2)一位用户最近看上一件产品,有没有其它相关的产品可以推荐给他。

现在有5部电影,4位用户,矩阵 Y 就是一个 5 行 4 列的矩阵,存储每个用户对每个电影的评分数据:

通过使用 θ 和 x 计算,可以预测出每个用户对每个电影打的分数:

现在将所有 x 都集中在一个大的矩阵X中,每一部电影是一行;

将所有 θ 集中在一个大的Θ中,每个用户是一行。

则有:

因为矩阵X乘Θ的转置,在数学上具有低秩属性。因此这个算法也被称为低秩矩阵分解 low rank matrix factorization。

现在已经学习到了特征参数向量,那么可以使用这些向量做一些别的事情,比如度量两部电影之间的相似性。例如,如果一位用户正在观看电影 x(i) ,可以根据两部电影的特征向量之间的距离 ∥x(i) − x(j)∥,寻找另一部相似电影 x(j)

16.6 推行工作上的细节:均值归一化  Mean Normalization

现在新增一个用户 Eve,她没有为任何电影评分,那么我们以什么为依据为 Eve 推荐电影呢?

如果根据之前的模型,因为她没有打分,代价函数第一项为0。算法目标变为最小化最后一项,最后得到 θ(5) 中的元素都是0。现在拿着 θ(5) 预测出的瓶分都是0。这没有什么意义,因此需要做一些处理。


首先需要对结果 Y 矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值:


然后利用这个新的 Y 矩阵来训练算法。 最后在预测评分时,需要在预测值的基础上加回平均值,即预测值等于 (θ(j))Tx(i) + μi 。因此对于 Eve,新模型预测出的她的打分都是该电影的平均分。

转载于:https://www.cnblogs.com/maxiaodoubao/p/10220632.html

【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 16—Recommender Systems 推荐系统...相关推荐

  1. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机...

    Lecture 12 支持向量机 Support Vector Machines 12.1 优化目标 Optimization Objective 支持向量机(Support Vector Machi ...

  2. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 17—Large Scale Machine Learning 大规模机器学习...

    Lecture17 Large Scale Machine Learning大规模机器学习 17.1 大型数据集的学习 Learning With Large Datasets 如果有一个低方差的模型 ...

  3. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 6_Logistic Regression 逻辑回归

    Lecture6 Logistic Regression 逻辑回归 6.1 分类问题 Classification 6.2 假设表示 Hypothesis Representation 6.3 决策边 ...

  4. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 5 Octave Tutorial

    Lecture 5 Octave教程 5.1 基本操作 Basic Operations 5.2 移动数据 Moving Data Around 5.3 计算数据 Computing on Data ...

  5. Andrew Ng机器学习课程笔记--week9(下)(推荐系统协同过滤)

    本周内容较多,故分为上下两篇文章. 本文为下篇. 一.内容概要 1. Anomaly Detection Density Estimation Problem Motivation Gaussian ...

  6. 【原】Coursera—Andrew Ng机器学习—Week 9 习题—异常检测

    [原]Coursera-Andrew Ng机器学习-Week 9 习题-异常检测 参考文章: (1)[原]Coursera-Andrew Ng机器学习-Week 9 习题-异常检测 (2)https: ...

  7. Andrew Ng机器学习课程6

    Andrew Ng机器学习课程6 说明 在前面跟随者台大机器学习基石课程和机器学习技法课程的设置,对机器学习所涉及到的大部分的知识有了一个较为全面的了解,但是对于没有动手写程序并加以使用的情况,基本上 ...

  8. Andrew Ng机器学习课程14(补)

    Andrew Ng机器学习课程14(补) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 利用EM对factor analysis进行的推导还是要参看我的上一 ...

  9. Andrew Ng机器学习课程17(1)

    Andrew Ng机器学习课程17(1) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:主要介绍了强化学习与监督学习的设定上的区别,以及强化学习的框架 ...

最新文章

  1. Java项目:网上水果蔬菜项目系统设计和实现(java+springboot+mysql+ssm)
  2. 关于Android开源库分享平台,(GitClub)微信小程序的开发体验
  3. 对于金融的简单理解(一)
  4. matlab m 文件例子,一个简单OFDM例子(matlab m文件)
  5. BZOJ-2049 [SDOI2008]洞穴勘测
  6. 069:ORM查询条件详解-isnull和regex
  7. mysql数据库连接过多的错误,可能的原因分析及解决办法
  8. listview mysql查询_Sqlite 数据库分页查询(ListView分页显示数据)
  9. boost::units::unscale相关的测试程序
  10. C#结构体中数组的分配
  11. us域名在哪里注册_独立站如何选择一个合适的域名?
  12. 张左峰的歪理邪说 之 大话Redmine插件
  13. pandas中DataFrame对象to_csv()方法中的encoding参数
  14. 苹果智能家居的未来之路
  15. CentOS7增加或修改SSH端口号的方法
  16. 国人走向世界的一个很好的艺术与设计网站
  17. 【LuoguP4770】[NOI2018] 你的名字
  18. PR片头片尾模板 蝴蝶飞舞动态粒子爆炸效果logo展示pr视频模板
  19. Windows 多功能计算器
  20. 如何组装配置属于自己的台式机

热门文章

  1. 超级计算机预测南方下雪,今冬南方就不下雪了?超级计算机:可能性确实在减小,但还要观察...
  2. 代理池proxypool新版使用教程
  3. oracle group by ,having ,order by
  4. Junit如何进行多线程测试
  5. 记一次曲折的后台getshell过程
  6. 某数加密的流程与原理简析
  7. 算法训练 字符删除 c语言
  8. 剑指offer 翻转链表
  9. ElasticSearch5.3插件开发(一)控制台打印信息
  10. vue-cli 上手