ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

吴恩达机器学习笔记-16(推荐系统)

2021-06-15 09:34:48  阅读:161  来源: 互联网

标签:吴恩达 frac 16 sum 电影 用户 笔记 && theta


目录

推荐系统

推荐系统广泛地应用在生产当中,如,亚马逊推荐新书给你,淘宝试图推荐新商品给你,等等。这些推荐系统,根据浏览你过去买过什么书,或过去买过什么商品来判断。这些系统会带来很大一部分收入,比如为亚马逊和像阿里巴巴这样的公司。因此,对推荐系统性能的改善,将对这些企业的有实质性和直接的影响。
但是推荐系统并不会在学术界受到太多关注,一个有关机器学习的学术会议并不会过多地谈论到。

推荐系统的形式化

假设有一个影评网站,这里有5部和4个用户,要求用户为电影打分。
image
前面三部是爱情片,后面两部是动作片,能看出来Alice和Bob更倾向于爱情片,而Carol和Dave更倾向于动作片。并且每个用户都有未打分的电影。
网站希望构建一个算法来预测他们每个人可能给未观影的电影打多少分,并且以此作为推荐的依据。
下面定义一些变量:
\(n_u\):表示用户数量
\(n_m\):表示电影数量
\(r(i,j)\):表示若用户j给电影i评过分,则\(r(i,j)=1\)
\(y^{(i,j)}\):表示用户j给电影i打的分数
\(m_j\):表示用户j已评的电影数量

基于内容的推荐系统

还是以电影推荐为例子:\(n_u=4,n_m=5\)
image
假设每部电影都有两个特征,如\(x_1\)代表电影的爱情元素,\(x_2\)代表电影的动作元素。
则每部电影都有一个特征向量\(x=[x_0,x_1,x_2]^T\),如\(x^1=[x_0^1x_1^1,x_2^1]^T=[1,0.9,0]^T\)

下面要基于这些特征来构建一个推荐算法。给出如下定义:
\(\theta^j\):表示用户j的参数向量,是n+1维向量。
\(x^i\):表示电影i的特征向量
\(m^j\):表示被用户j评分的影片数量
对于用户j和电影i,预测的评分为\({(\theta^j)}^T{x^i}\),可以看出来,这是一个监督学习问题,模型也与线性回归类似,那么容易得到代价函数:\(J(\theta)=\frac{1}{2}\sum_{i:r(i,j)=1}{({(\theta^j)}^T{x^i}-y^{(i,j)})}^2+\frac{\lambda}{2}{(\theta^j_k)}^2\)
其中\(i:r(i,j)\)表示我们只计算那些用户j评过分的电影。在一般的线性回归模型中,误差项和正则项应该都是乘\(\frac{1}{2m}\),在这里我们将m去掉。仍然不对\(\theta_0\)进行正则化处理。
上面的代价函数只是针对一个用户的,为了学习所有用户,我们将所有用户的代价函数求和:

\[J(\theta)=\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}{({(\theta^j)}^T{x^i}-y^{(i,j)})}^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}{(\theta^j_k)}^2 \]

(其中第二个求和符号的含义是,对每个用户j,将他评过分的每部电影加起来。)

如果要用梯度下降法求最优解,更新过程如下:

\[\theta_k^j:=\theta_k^j-\alpha\sum_{i:r(i,j)=1}{({(\theta^j)}^T{x^i}-y^{(i,j)})}x^i_k\quad{(k = 0)} \]

\[\theta_k^j:=\theta_k^j-\alpha{(\sum_{i:r(i,j)=1}{({(\theta^j)}^T{x^i}-y^{(i,j)})}x^i_k+\lambda\theta_k^j)}\quad{(k = 1)} \]

和线性回归极其类似。

协同过滤

在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。
协同过滤有一种很有趣的特性,叫做特征学习,这种算法可以自行学习所要使用的特征。
还是以电影为例子,假设我们并没有收集到有关电影的特征,但是通过其他手段比如采访获取了用户对不同电影的喜爱程度\(\theta^1,\theta^2,\theta^3,\theta^4\):
image
如果Alice说她喜欢爱情片,那么\(\theta^1_1\)对应于\(\x^1_1\),就应该表示对爱情片的喜好程度,所以\(\theta^1_1\)的值就应该比较大。Alice讨厌动作片,那么\(\theta^1_2\)的值就应该比较小。
其他几位用户以此类推。

image
那么根据用户已评的分,可以推断出电影\(x^1\)的特征近似为\(x_0^1=1,x_1^1=1.0,x_2^1=0\)。(因为\({\theta^1}^T{x^1}\approx{5}\))

容易想到,可以通过参数向量\(\theta^j{(j=1,...,n_u)}\)来训练出特征向量\(x^i{(i=1,...,n_m)}\)

\[\frac{1}{2}\sum^{n_m}_{i=1}\sum_{j:r(i,j)=1}{({(\theta^j)}^T{x^i}-y^{(i,j)})}^2+\frac{\lambda}{2}\sum^{n_m}_{i=1}\sum^n_{k=1}{(x^i_k)}^2 \]

(其中的第二个求和符号的含义是,对于每部电影i,将所有对它进行过评分的用户加起来。)

将这个和基于内容算法结合起来,就可以不停地对参数和特征进行优化,最终收敛到一个最佳值。
给定\(x^1,...,x^{n_m}\),估计\(\theta^1,...,\theta^{n_u}\)
给定\(\theta^1,...,\theta^{n_u}\),估计\(x^1,...,x^{n_m}\)

算法描述

上面讲到了将两种思想结合起来进行训练,只不过有先后之分。
但其实,协同过滤算法的精髓,在于同时对\(x^i\)和\(\theta^j\)进行优化。

image
image
结合为一个新的目标优化函数J,为:

\[J(x^{(1)},...x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})=\frac{1}{2}\sum_{(i:j):r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x_k^{(j)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_k^{(j)})^2 \]

这是一个关于特征x和参数\(\theta\)的函数,其中的求和符号含义是,对每个\(r(i,j)=1\)的\((i,j)\)实数对求和。
最小化这个优化函数,就可以同时解出特征\(x\)和参数\(\theta\)。
需要注意的是,使用结合之后的目标优化函数,将不再需要\(x_0=1\)这一项,此时x应为n维向量,相应地,\(\theta\)也应该为n维向量。

协同过滤算法的流程如下:

  1. 初始 \(x^{(1)},x^{(1)},...x^{(nm)},\ \theta^{(1)},\theta^{(2)},...,\theta^{(n_u)}\)为一些随机小值
  2. 使用梯度下降算法最小化代价函数:

\[x_k^{(i)}:=x_k^{(i)}-\alpha\left(\sum_{j:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\theta_k^{j}+\lambda x_k^{(i)}\right) \]

\[\theta_k^{(i)}:=\theta_k^{(i)}-\alpha\left(\sum_{i:r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)}x_k^{(i)}+\lambda \theta_k^{(j)}\right) \]

  1. 在训练完算法后,我们预测\((\theta^{(j)})^Tx^{(i)}\)为用户 \(j\) 给电影 \(i\) 的评分

低秩矩阵分解

这一小节主讲,协同过滤算法的向量化实现。
以及可以用这个算法实现的一些功能,如:

  1. 当给出一件产品时,你能否找到与之相关的其它产品。
  2. 一位用户最近看上一件产品,有没有其它相关的产品,你可以推荐给他。

还是以电影为例子:
image
有这样一个数据集,5部电影,4个用户。
用矩阵表示如下:

\[Y=\begin{bmatrix}5&&5&&0&&0\\\\5&&?&&?&&0\\\\?&&4&&0&&?\\\\0&&0&&5&&4\\\\0&&0&&5&&0\end{bmatrix}\quad{(其中的元素表示为y(i,j),如y(1,1)=5)} \]

容易推出预测值组成的矩阵为:
image
为了便于给出更简洁的向量化表示,首先给出如下定义:
\(X=\begin{bmatrix}{(x^1)}^T\\\\{\vdots}\\\\{(x^{n_m})}^T\end{bmatrix}\quad\quad\Theta=\begin{bmatrix}{(\theta^1)}^T\\\\{\vdots}\\\\{(\theta^{n_u})}^T\end{bmatrix}\)
那么根据矩阵运算法则,容易得出:\(预测值矩阵=X\Theta^T\),这个过程也被称为低秩矩阵分解(low rank matrix factorization)。

在推荐电影的过程中,对于每一部电影i,我们都可以通过学习算法得到一个n维特征向量\(x^i\),人类可能并不总是能直观地理解这些特征,但是对于计算机来说,对于推荐电影来说,这些特征是有特殊的意义的。
比方说,某位用户对某部电影i打了高分,代表他喜欢这部电影中所具有的特征向量\(x^i\),算法可以尝试去寻找某部电影\(x^j\),使得\(||x^i-x^j||\)最小,那就能很有力地表明电影\(i\)和电影 \(j\) 在某种程度上有相似,至少在某种意义上,某些人喜欢电影\(i\),或许也可能对电影\(j\)感兴趣。
如果要推荐多部电影,就找能使得\(||x^i-x^j||\)最小的多部电影j,即可。

实现细节:均值归一化

还是以电影为例子:
image
新增一个用户Eve,该用户并没有为任何一部电影评分, 似乎无法对其进行电影的推荐。
假设n=2,即有每个样本只有两个特征,那么对于Eve来说其参数向量\(\theta^5\)是2维向量

\[J(x^{(1)},...x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})=\frac{1}{2}\sum_{(i:j):r(i,j)=1}((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x_k^{(j)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_k^{(j)})^2 \]

考虑这个优化目标函数,因为Eve没有给任何一部电影打过分,所以\(r(i,5)\neq1\),所以第一项不会对参数\(\theta^5\)的结果造成影响,会造成影响的只有最后的正则化项。
把正则化项单独拿出来看:\(\frac{\lambda}{2}[{(\theta^5_1)}^2+{(\theta^5_2)}^2]\),我们要最小化这个式子,最终得到的参数向量\(\theta^5=\begin{bmatrix}0\\\\0\end{bmatrix}\)
通过这个参数向量最后会预测出Eve给每部电影都打0分这一离奇的结果。
那么就需要用到均值归一化思想,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值:
image
(\(\mu_1\)表示所有用户对电影\(x^1\)的评分的均值,因为评分的只有4个用户,所以是\({(5+5)}\div4=2.5\))
然后我们利用这个新的 \(Y\) 矩阵来训练算法。如果我们要用新训练出的算法来预测评分,则需要将平均值重新加回去,即预测结果为\((\theta^{(j)})^T x^{(i)}+\mu_i\)
此例中,对于新用户Eve来说,由于\(\theta^5=\begin{bmatrix}0\\\\0\end{bmatrix}\),那么\({\theta^5}^T{x^i}+\mu_i=\mu_i\),也即取了个均值。

标签:吴恩达,frac,16,sum,电影,用户,笔记,&&,theta
来源: https://www.cnblogs.com/mmmhongyu/p/14884157.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有