本博客是针对Andrew Ng在Coursera上的machine learning课程的学习笔记。


基于内容的推荐(Content-based recommendation)

问题表述

假设我们有如下评分矩阵(纵向为同一用户的评分对不同电影的评分,横向为不同用户对同一部电影的评分):

$n_u$表示用户数目,$n_m$表示电影数目,$\theta{(j)}$表示用户j对电影特征的喜好程度参数(一个向量),$x{(i)}$表示电影i的特征向量。当我们要预测用户j对电影i的评分时,就可以使用以下公式:$$Rating=(\theta{(j)})Tx^{(i)}$$

即用户对电影不同特征的喜好向量的转置,与电影的特征向量相乘。

问题范式

那么,用公式化的语言来总结上述的问题,形式如下:

总结而言,我们通过以$\theta{(j)}$为目标参数最小化损失函数(加上正则项),以学习到$\theta{(j)}$的最优值,以用于预测用户j对于其尚未评分 的电影的评分。(删除$m^{(j)}$是因为其是一个常数,在最小化损失函数的过程中对结果没有影响)

接下来,我们将最优化目标做进一步转化:将所有需要预测的用户的损失函数加总在一起,得到我们最终的优化目标(如下图):

参数学习的方式还是用梯度下降(注意对截距项和非截距项参数的更新上,正则项是否存在的差别)

协同过滤(collaborative filtering)

问题引入

我们之前假设了已经获得了每部电影的特征向量,但实际情况中,往往电影的特征向量数据也可能没有,这种情况下,我们怎么预测用户对电影的评分呢?假设我们的每个用户已经告诉了我们他们对于不同的电影特征的喜好程度($\theta{(j)}$),那么根据$\theta{(j)}$,以及已知的用户给电影的评分,我们可以大致判断某些电影中的特征向量的值:

最优化算法

给定各用户的喜好向量$\theta{(j)}$,我们以学习到电影的特征向量$x{(i)}$为目的,以以下损失函数的最小化为优化目标(上面的式子是以学习到某电影i的特征向量为目的,下面的式子是一学习到所有电影的特征向量为目的):

上一个部分讲的是如何通过电影的特征向量和电影评分学习到用户的喜好向量,而协同过滤是通过用户的喜好向量学习到电影的特征向量,因此这两个过程的结果可以互相为对方所用,因此可以将结果交给对方交互进行学习过程,以达到最终最优的效果。

协同过滤的最优化目标

当我们将上述的两种学习过程组合在一起,便可以同时学习用户的喜好向量和电影的特征向量,这便是我们的协同过滤算法的最优化目标:

协同过滤算法

低阶矩阵因式分解(Low Rank Matrix Factorization)。

假设我们有以下四个用户对五部电影的评分数据(有部分缺失),我们将用户的评分放入一个矩阵Y:

我们可以通过协同过滤算法获得用户对于电影的完整的评分矩阵(用拟合模型获得估计评分填入缺失部分)。而如果想通过向量化的方式直接获得这个评分矩阵,可以对X和$\Theta$作处理,如下图:

而这里通过$X*\Theta^T$的做法其实就是低阶矩阵因式分解,因为获得的运算结果的完整评分矩阵就是一个被称为低阶矩阵的东西(名称来源)。


来自《集体智慧编程》的非负矩阵因式分解(Non-Negative Matrix Factorization)的参考内容,以帮助读者更好理解矩阵因式分解的知识:

对矩阵进行因式分解,其本质就是要找到两个更小的矩阵,使得二者相乘可以得到原来的矩阵,而这两个更小的矩阵分别称为特征矩阵和权重矩阵。


那么我们如何来找两部彼此相似度高的电影呢?

对于每个电影,我们可以得到它的一个特征向量$x^{(i)}\in R^n$,如下图,只需找到特征向量之间距离小的两部电影即可:

均值标准化(Mean Normalization)

同样,对于如下评分矩阵,我们用协同过滤的算法去尝试进行估计:

我们仍然将评分放入一个Y矩阵中,并可以算出每一行的一个均值,将Y的均值提取出来$\mu$,并利用均值将Y矩阵进行相应地改变:保证每一行均值不变的情况下,使得评分值均匀分布,这便是均值标准化的步骤:

然后,我们将均值标准化后的Y矩阵假设为我们从用户那边得到的真实评分矩阵,从该矩阵中学习参数$\theta{(j)}$和$x{(i)}$。于是,当我们要预测用户j对电影i的评分值时,就可以用$(\theta{(i)})T(x^{(i)})+\mu_i$的方式来进行预测。那么这时,假若用户j的$\theta$为0向量(用户j没有对任何电影给过评分),我们即用其它用户对电影i的平均评分作为对用户j对电影i的评分值。

推荐系统(Recommender Systems)的更多相关文章

  1. [C11] 推荐系统(Recommender Systems)

    推荐系统(Recommender Systems) 问题阐述(Problem Formulation) 将 推荐系统 纳入这门课程来讲有以下两个原因: 第一.仅仅因为它是机器学习中的一个重要的应用.在 ...

  2. 斯坦福第十六课:推荐系统(Recommender Systems)

    16.1  问题形式化 16.2  基于内容的推荐系统 16.3  协同过滤 16.4  协同过滤算法 16.5  矢量化:低秩矩阵分解 16.6  推行工作上的细节:均值归一化 16.1  问题形式 ...

  3. Ng第十六课:推荐系统(Recommender Systems)

    16.1  问题形式化 16.2  基于内容的推荐系统 16.3  协同过滤 16.4  协同过滤算法 16.5  矢量化:低秩矩阵分解 16.6  推行工作上的细节:均值归一化 16.1  问题形式 ...

  4. 推荐系统(recommender systems):预测电影评分--问题描述

    推荐系统很重要的原因:1>它是机器学习的一个重要应用2>对于机器学习来说,特征是非常重要的,对于一些问题,存在一些算法能自动帮我选择一些优良的features,推荐系统就可以帮助我们做这样 ...

  5. 推荐系统(recommender systems):均值归一化(mean normalization)

    均值归一化可以让算法运行得更好. 现在考虑这样一个情况:一个用户对所有的电影都没有评分,即上图所示 的Eve用户.现在我们要学习特征向量(假设n=2) 以及用户5的向量θ(5),因为用户Eve没有对任 ...

  6. 推荐系统(recommender systems):预测电影评分--构造推荐系统的一种方法:低秩矩阵分解(low rank matrix factorization)

    如上图中的predicted ratings矩阵可以分解成X与ΘT的乘积,这个叫做低秩矩阵分解. 我们先学习出product的特征参数向量,在实际应用中这些学习出来的参数向量可能比较难以理解,也很难可 ...

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

    Lecture 16 Recommender Systems 推荐系统 16.1 问题形式化 Problem Formulation 在机器学习领域,对于一些问题存在一些算法, 能试图自动地替你学习到 ...

  8. 【RS】Matrix Factorization Techniques for Recommender Systems - 推荐系统的矩阵分解技术

    [论文标题]Matrix Factorization Techniques for Recommender Systems(2009,Published by the IEEE Computer So ...

  9. 【RS】Improving Implicit Recommender Systems with View Data - 使用浏览数据提升隐式推荐系统

    [论文标题]Improving Implicit Recommender Systems with View Data(IJCAI 18) [论文作者]Jingtao Ding  , Guanghui ...

  10. 【RS】Wide & Deep Learning for Recommender Systems - 广泛和深度学习的推荐系统

    [论文标题]Wide & Deep Learning for Recommender Systems (DLRS'16) [论文作者] Heng-Tze Cheng, Levent Koc, ...

随机推荐

  1. 先治再扶,重灾区后的P2P你还敢投吗?

    ​ 互联网强大的包容性和创新性,给予很多新生事物成长的空间.而其全面普及与快速传播的特性,也让任何事物都像被放在放大镜乃至显微镜下,几乎无形遁形.这样一来,新生事物很容易被"神化" ...

  2. Neural Turing Machine - 神经图灵机

    Neural Turing Machine - 神经图灵机 论文原文地址: http://arxiv.org/pdf/1410.5401.pdf 一般的神经网络不具有记忆功能,输出的结果只基于当前的输 ...

  3. Docker实战之Consul集群

    前言 最近参加了几场 Java 面试,发现大多数的微服务实践还是 Eureka 偏多,鉴于笔者的单位选型 Consul,这里对 Consul 做简单总结. 该篇是 Docker 实战系列的第三篇.传送 ...

  4. Mysql报错:Authentication .....Reading from the stream has failed

    连接Mysql5.7版本的数据库出现报错:Authentication to host '171.13.164.***' for user 'root' using method 'mysql_nat ...

  5. 提权篇之简单介绍和exp利用过程

    正文开始.... 提权的方法有很多种,因为一开始我入门的时候是看的小迪的网络教程,当然也推荐大家去看小迪的教程,或者直接小迪的实地培训班.这个可没什么利益关系,我认识他,他可不认识我,,但是我是在网上 ...

  6. phpstudy渗透到服务器

    0x00 目标站点www.test.ichunqiu 0x01 尝试登陆系统 -尝试弱密码登陆 结果:forbidden!!! -尝试万能账号密码登陆 1‘ or 1=1--+ 和 1‘ or 1=1 ...

  7. 用 Java 实现人脸识别功能(附源码)

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...

  8. 【每日一包0018】fecha

    [github地址:https://github.com/ABCDdouyae...] fecha 比moment.js更加轻量级的时间解析和格式化包 format 用法:format(<Dat ...

  9. PTP从时钟授时模块应用及介绍

    PTP从时钟授时模块应用及介绍 随着网络技术的不断进步和发展,NTP网络时间协议已经满不了一些精密设备和仪器的精度要求,这时就需要精度更高的PTP协议,PTP协议是一种应用于分布式测量和控制系统中的精 ...

  10. WEB渗透 - XSS

    听说这个时间点是人类这种生物很重要的一个节点 cross-site scripting 跨站脚本漏洞 类型 存储型(持久) 反射型(非持久) DOM型 利用 先检测,看我们输入的内容是否有返回以及有无 ...