本博客是针对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. Android系统使用Shell脚本预装apk

    客户需求:需要在Android系统预安装一个或者若干个apk,客户可以选择自行卸载并且卸载后系统再次启动并不会再次自动安装. 考虑到需要批量安装应用,我这里考虑到使用灵活的shell脚本.shell脚 ...

  2. Spring源码阅读笔记03:xml配置读取

    前面的文章介绍了IOC的概念,Spring提供的bean容器即是对这一思想的具体实现,在接下来的几篇文章会侧重于探究这一bean容器是如何实现的.在此之前,先用一段话概括一下bean容器的基本工作原理 ...

  3. C++走向远洋——23(项目一,三角形,类)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:sanjiaoxing.cpp * 作者:常轩 * 微信公众号: ...

  4. android逆向---charles抓包

    手机与电脑处于同一网络环境,且正确设置代理后,charles显示CONNECT失败,提示信息SSL handshake with client failed: An unknown issue occ ...

  5. 使用EventBus + Redis发布订阅模式提升业务执行性能

    前言 最近一直奔波于面试,面了几家公司的研发.有让我受益颇多的面试经验,也有让我感觉浪费时间的面试经历~因为疫情原因,最近宅在家里也没事,就想着使用Redis配合事件总线去实现下具体的业务. 需求 一 ...

  6. JDK 1.8 新特性之Date-Time API

    来源:请点击查看 1.8之前的日期类: 线程不安全:java.util.Date 这个类线程不安全,而且所有日期类都是可变的. 时间处理麻烦:默认的开始日期从1900年,不支持国际化,不提供时区支持, ...

  7. js实现box(2)(3)这种调用方式的方法

    box(2)(3)函数的调用方法有两种: 第一种: var box = function(num1){ return function(num2){ return num1+num2; }; }; a ...

  8. JZOJ 5328. 【NOIP2017提高A组模拟8.22】世界线

    5328. [NOIP2017提高A组模拟8.22]世界线 (File IO): input:worldline.in output:worldline.out Time Limits: 1500 m ...

  9. 【原创】为什么我的 Kafka 总是连接失败呢?

    提出问题 近日助友 Docker 部署 Kafka 服务,服务日志启动正常,但客户端却无法连接 往日曾踩过此坑,然方法均源于博客,其语焉不详,不知为何不行,亦不知为何行,印象不甚深刻,耗费大量时间 为 ...

  10. Js逆向-滑动验证码图片还原

    本文列举两个例子:某象和某验的滑动验证 一.某验:aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s 未还原图像: 还原后的图: ...