机器学习 | 吴恩达机器学习第九周学习笔记

课程视频

课程PPT    下载密码:95wq

上周主要讲解经典的无监督聚类算法k-means,包括k-means的优化目标,原理以及一些参数设置细节;和降维算法PCA的原理,目标,问题规划以及应用等问题;本周将继续学习机器学习的应用--异常检测和推荐系统,包括高斯分布,开发和评估异常检测系统、多元高斯分布,异常检测算法的应用以及推荐算法(协同过滤)的原理和应用。

 

目录

一、异常检测

1.问题动机

2.高斯分布

3.算法

4.开发和评估异常检测系统

5.异常检测 VS 监督学习

6.选择要使用的功能

7.多变量高斯分布

8.使用多元高斯分布的异常检测

二、推荐系统

1.问题规划

2.基于内容的推荐算法

3.协同过滤

4.协同过滤算法

5.矢量化:低秩矩阵分解

6.实施细节:均值规范化

三、实验


一、异常检测

异常检测通常用于无监督的场景中,但是和监督问题有些相似。

1.问题动机

  • 异常检测实例

有一些飞机引擎,现在需要找出其中存在异常的引擎。假设每个引擎有都有两个特征:

那么我们可以得到一个有关飞机引擎的数据集:{{x^{(1)},x^{(2)},...,x^{(m)}},将数据集可视化得到下图:

接下来根据样本特征来判断新样本x_{test}是否为异常样本。上图中的绿色代表新样本,红色代表训练样本,当新样本离大多数训练样本比较近时,我们把它判定为正常的;否则判定为异常样本。

  • 一般定义

假设有如下的无标签训练集,其中x^{(i)}表示第i个样本的特征向量:

异常检测需要做的是,对训练集进行建模,得到这些样本的概率分布p(x),然后对于新样本x_{test},代入p(x)

其中,\varepsilon为设定好的阈值。

以上例为例,它的概率分布可能如下所示:

在最中心的位置概率最大(大多数样本位于中心位置),越往外走,概率越小。对于新样本来说,如果它位于中心位置,则它应该是正常样本;如果位于最外围,和大多数样本都不一样,则它应该是异常样本。

  • 异常检测应用

1)欺诈检测:

用特征向量x^{(i)}表示用户i的行为活动,可能包括:x_{1}用户登陆次数,x_{2}用户发帖次数,x_{3}用户打字速度等特征。以此我们可以构建一个关于用户行为的数据集。

通过对该数据集进行建模,得到该数据集的概率分布p(x),对于网站上的一些可疑用户x_{test},检测p(x_{test})<\varepsilon是否成立,若成立,则该用户极有可能是异常用户,存在欺诈行为或被盗号等。

2)工业生产领域:如上述的飞机引擎异常检测问题

3)检测数据中心的计算机:

用特征向量x^{(i)}表示第i个计算机的特征向量,可能包括:x_{1}内存使用,x_{2}硬盘访问量,x_{3}CPU负载等特征,也有可能包括一些复杂特征如x_{4}:CPU负载/网络流量。以此我们可以构建一个关于计算机的数据集。

通过对该数据集进行建模,得到该数据集的概率分布p(x),对于一台计算机x_{test},检测p(x_{test})<\varepsilon是否成立,若成立,则该计算机极有可能出现了异常,此时应让技术人员进行具体察看。

 

2.高斯分布

高斯分布也叫正态分布。

  • 高斯分布

如果x\in R服从均值为\mu,方差为\sigma ^{2}的高斯分布,则可以记做:

其中,N代表高斯分布,它有两个参数\mu\sigma ^{2},一旦这两个参数确定,高斯分布也就确定了。

高斯分布的图像大致呈现出一个钟形:

其中均值\mu是它的对称轴,对应概率最大的位置,越远离均值,概率越小;标准差\sigma决定“钟形”的宽度。

高斯分布公式:

  • 高斯分布例子

高斯分布均值\mu决定中心位置,标准差\sigma决定高斯函数的宽度,\sigma越大,宽度越大。因为是概率分布曲线,高斯函数曲线与x轴包围部分的积分为1,当\sigma增大一倍,为保持积分为1,高度会减少为原来的一半。

  • 参数估计

假设有如下的训练集,其中每个样本的特征都是实数,即只有一个特征:

假设这些样本来自一个高斯分布的整体,即:

参数估计要做的是,确定这些样本来自哪个高斯分布,即确定高斯分布的参数,有如下公式:

需要注意的是,可能在一些概率教材中分母位置是m-1,但在机器学习中更常用m,其实2者在实际应用中差别不大。

 

3.算法

本小节我们将利用高斯分布构建一个异常检测算法:

  • 密度估计

假设有如下的训练集,每个样本的特征向量都是n维的:

假设这n个特征都各自服从一个不同的高斯分布(独立假设,实际上当不满足独立假设时,该算法也可以用)即:

对该训练集进行建模,得到它的密度估计(概率分布)p(x):

  • 异常检测算法

1.为每一个异常检测样本选择一个特征向量x^{(i)},构建训练集{x^{(1)},...,x^{(m)}}

2.参数估计,确定每个特征x_{j}服从的高斯分布,即确定\mu_{j}\sigma _{j}^{2}  (j=1,...,n)

3.计算出训练集的概率分布p(x)

4.对于新样本的特征向量x^{test},计算p(x^{test}),若p(x^{test})< \varepsilon则为异常样本

  • 异常检测例子

假设训练集的样本只有两个特征x_{1},x_{2},分别进行参数估计,得到2者的均值和方差,进而确定2者服从的正态分布:

接下来通过上述公式,计算两个特征概率分布的乘积,得到训练集的概率分布p(x),图像如下:

图像中的高度代表概率,对于新样本x_{test}^{(1)},x_{test}^{(2)},如下图绿叉所示,红叉为训练集样本:

将新样本分别代入p(x),得到两个概率值,并设置阈值为0.02,对于上图所示的情况,可能会得到以下结果:

x_{test}^{(1)}判定为正常样本,x_{test}^{(2)}判定为异常样本。p(x)图像突起的部分都有一个比较大的概率(大于阈值),大致对应下图中洋红色圈中的样本,因此圈内的样本极有可能是正常的,尔圈外则是异常的。

 

4.开发和评估异常检测系统

之前我们一直把异常检测看作是一个无监督学习的问题,但是如果你有一些带标签的数据,则可以评估异常检测算法的性能;而且,当为样本选择特征时,如果不确定是否该纳入某一个特征,可以分别在两种情况下进行训练,在验证集上分别评估效果,从而决定是否纳入该特征(模型选择问题).

如果你有一个带标签的数据集,一般把它分为训练集,验证集和测试集3部分,其中:

训练集一般全为正常的样本(即使混入一些异常样本也没关系),将异常样本分到验证集和测试集中:

  • 飞机引擎异常检测例子

假设数据集有10000个正常样本(y=0),和20个异常样本(y=1),一种推荐的分割数据集的方式是,按照60%,20%,20%的比例划分为训练集、验证集和测试集,其中训练集全是正常样本,并用其拟合出训练集的概率分布p(x);将异常样本分到验证集和测试集中:

  • 推导和评估异常检测算法

1.在训练集{{x^{(1)},x^{(2)},...,x^{(m)}}拟合概率分布p(x),训练过程是一个无监督的过程。

2.利用p(x)对验证集/测试集中的样本进行预测:

3.与真实标签进行比较,评估算法的性能。注意这是一个倾斜类,正样本(y=1)很少,所以不要使用正确率或错误率进行评估;应计算TF,FP,FN,TN指标,进而计算出查准率和召回率,最终得到F1-score来评估算法性能。

4.使用验证集可以完成一些模型选择问题,如是否应该对样本纳入某个特征,以及算法参数\varepsilon的选择。比如,可以分别尝试不同的\varepsilon,在验证集上得到不同的F1-score,选择使F1-score最大的那个参数作为算法参数。

 

5.异常检测 VS 监督学习

在上一小节中,我们应用异常检测算法时使用了带标签的数据,那么既然数据有标签我们为什么不直接使用监督学习的方法对样本进行学习呢?本小节,将对异常检测和监督学习做一个比较:

1.当数据集中的正样本(y=1,异常样本)非常少(0-20),而负样本(y=0,正常样本)非常多时,我们一般使用异常检测算法;当数据集中存在大量正样本和负样本时,我们一般使用监督学习的方法。

2.对于异常检测问题来说,一个样本出现异常的情况是多种多样的,而且在不断的变化,可能过一段时间就会出现一个新的异常,如果使用监督学习的方法,很难从少量异常样本中,学习到各种异常的情况;而对于异常检测算法来说,它只需要在大量的负样本(正常样本)中进行训练,而不必花时间去学习异常样本,只要一个样本和大多数正常样本的分布不一样,就可以判定为异常。

3.监督学习问题的新样本,不会有太大的变化,一般都能在训练集中找到类似的样本。

4.异常检测一般用在欺诈检测、工业生产(飞机引擎异常检测),检测数据中心的计算机情况等场景,如果这样场景的正样本(异常样本)足够多,也可以转化为监督学习问题。

5.监督学习问题一般用在垃圾邮件分类,天气预测,癌症分类等场景中。

 

6.选择要使用的功能

在使用异常检测算法之前,一个很重要的事情是如何为样本设计和选择合适的特征。

  • 特征不服从高斯分布

之前我们在使用高斯分布构建异常检测算法时,一般都是假设各个特征服从高斯分布。但实际上并不是每个特征都近似于高斯分布。

我们一般先对每个特征分别进行检查,绘制出直方图,如果该特征的直方图如下所示:

则认为该特征近似服从高斯分布,可以直接用;但是如果一个特征并不服从高斯分布,比如直方图是下面这样的:

这种情况下,一般对这个特征进行映射转换,使转换后的特征近似服从高斯分布(当然也可以不这么做,实际上不管特征服不服从高斯分布,异常检测算法都能正常运行,但是转换为可能效果会更好)。

转换方式一般有两种:

x_{j}=log(x_{j}+C)     或者  x_{j}=x_{j}^{a} ,其中a,C是参数,可以进行一系列的尝试,直到转换后的特征直方图大致符合正态分布。注意:在验证集和测试集也要做相应的转换。

 

  • 如何为样本选择特征

可以采用之前监督学习用过的方法----误差分析。

可以为每个样本确定一个最原始的简单的特征,然后进行训练得到P(x),在验证集上进行测试,找到模型检测错的样本,并对其进行分析,看看是否能启发你构建出一个新的特征,再训练模型,进而把检测错的样本检测对。

比如,在进行异常检测时,样本只有一个特征,我们对其建模得到p(x),图像如下:

其中红叉为训练集样本,绿叉是一个已知为异常的测试样本,从上图来看,它被淹没在正常样本中,也就是说当只有x1一个特征时,是无法把它检测出来的。此时,可以对这个没检测出来的异常样本进行分析,看是否可以构建一个新的特征x2,在这种情况下,可以把该异常样本检测出来,添加x2后可能如下图所示:

在这种情况下,位于中心位置的样本概率最大,为正常样本,越往外走,概率越小,越有可能是异常样本。之前的绿色样本,如果仅看x1这个特征,他是正常的,但添加特征x2后,他在x2上的取值可能非常大,进而就可以把这个异常样本检测出来。

  • 实例:检测数据中心的计算机

一个数据中心有可能有成千上万台计算机,我们需要对这些计算机进行异常检测,一边快速找到出现异常的机器。

再为计算机设计特征时,既不能太泛,也不能太细,比如,你可能设计了如下四个特征:

但是你可能会考虑到一些新的情况,正常情况下CPU load和network traffic会呈现出一个线性关系,一个高一般另一个也会高;当某台机器出现死循环时,此时CPU负载会很高,而网络流量则不会变高,这种情况下,基于上述这个特征可能不会检测到,因为这四个特征只是单独考虑各自的情况,并没有考虑他们之间的关联。此时,可以创造出一个新特征,来考虑cpu负载和网络流量的关联,比如:

一旦出现死循环这种异常,x5和x6会非常大,和正常情况下会很不一样,从而把这种异常检测出来。

 

7.多变量高斯分布

多元高斯分布也叫多元正态分布,他和之前的单元高斯分布相比有优势也有劣势,接下来我们将具体进行讨论:

  • 实例:检测数据中心的计算机

假设我们现在只考虑其中的两个特征CPU负载和内存使用:

左图的红叉代表训练样本,右图对训练样本的两个特征分别进行单元高斯分布拟合,得到的图像,最终训练集的概率分布p(x)等于两个特征高斯分布函数的乘积。

但我们观察左图时,我们发现训练样本在这两个特征上会呈现出一个正线性关系,也就是CPU负载高时,内存使用也会很大,也就是左图中蓝圈内的样本大致是正常的。但是如果使用单元高斯分布构建异常检测算法,他只是对特征分别拟合高斯函数,并不能体现特征之间的关联。

比如,有一个异常样本,如左图中左上角的绿叉,该样本在x1上的取值大约是0.5,在x2上的取值大约是1.5,如果使用单元高斯分布,它会分别在各自的特征上进行检测,不会考虑特征间的关联。比如该样本x1=0.5,从CPU负载角度来看,它对应的概率不是很低,属于正常范围;从内存使用来看,x2=1.5,对应的概率也不是很低,也属于正常范围,所以此时会检测不出这个异常样本,从而认为他是正常样本。

也就是说,基于单元高斯分布得到的训练集概率分布大致如左图中的洋红色圈所示,在中心位置概率最大,越往外越小,同一个圈上概率相等。这显然是不对的,比如左图洋红色圈上的3个新样本(绿叉),他们的概率是一致的,而实际上右上方的绿叉(正常)明显比另外两个(异常)的概率要高。

一种改进的方案是向上一小节讲的那样,构建一个新的特征能体现出2者的关联,如x3=x1/x2,再使用单元高斯分布,就能检测出之前检测不出的异常;另一种改进方案是使用多元高斯分布。

 

  • 多元高斯分布

与单元高斯分布不同,不用再分别对每个特征拟合高斯分布函数,最后通过乘积来得到训练集的概率分布p(x);而是直接对所有特征一起拟合多元高斯分布,得到训练集的概率分布p(x).

多元高斯分布的参数:

多元高斯分布公式(绝对值符号是对协方差矩阵求行列式):

  • 多元高斯分布例子

假设每个样本只有两个特征,即n=2,可视化几个多元高斯分布的例子如下:

1.和单元高斯分布类似,均值\mu决定中心位置(最值点的位置);

2.协方差矩阵\Sigma如果是对角矩阵(非对角线元素全为0),此时的多元高斯分布和两个单元高斯分布的乘积是等价的,他的等高线图中的椭圆的对称轴与x1轴和x2轴平行。

3.协方差矩阵\Sigma对角线上的元素大小决定突起的宽度,数值越大越宽,高度越矮(保证图像下的积分为1)

4.协方差矩阵\Sigma是对角矩阵且对角线上的数值相等时,他的等高线图是一个圆;对角线上数值不等时,等高线图是一个椭圆,不同的数值代表在不同方向上的突起宽度。

5.当协方差矩阵\Sigma不是对角矩阵,即非对角线元素不为0,此时多元高斯分布不再与单元的简单乘积等价,它还会考虑不同特征之间的关联,它的等高线图中的椭圆的对称轴将不再与x1轴和x2轴平行。上述两幅图一个是两特征大致呈现正相关,另一个大致呈现负相关。

6.可以看出,单元高斯分布的乘积是多元高斯分布的特殊情况(\Sigma是对角阵)

 

8.使用多元高斯分布的异常检测

  • 多元高斯分布

通过改变参数\mu ,\sum可以得到不同的多元高斯分布(上一小节讨论过)

  • 参数估计

对于一个给定的训练集{x^{(1)},x^{(2)},...,x^{(m)}},其中x^{(i)}\in R^{n}:

  • 用多元高斯分布进行异常检测

1.利用给定的训练集,进行参数估计得到\mu ,\sum

2.利用多元高斯分布公式,得到训练集的 概率分布p(x):

3.对于新样本x^{test},代入p(x),计算p(x^{test}),若满足p(x^{test})<\varepsilon,则认为x^{test}为异常样本。

之前也提到过,多元高斯分布的不同在于他能考虑特征之间的关联,同样使用之前两个特征的例子,x1 CPU负载和x2内存使用,使用多元高斯分布得到的p(x)可能如下图所示:

它会体现出两个特征的关系,概率分布图会沿y=x伸展,最内圈概率最大,越往外走,概率越来越小,这样绿色的异常样本就可以被检测出来。

  • 基于单元高斯分布的异常检测模型与基于多元的模型的关系

基于单元高斯分布的异常检测模型:

基于多元高斯分布的异常检测模型:

之前提到过,原始模型是多元高斯模型的特殊情况,当\Sigma为对角矩阵(f非对角线元素全为0)时,二者是完全等价的,说明此时,特征之间不存在任何的关联。

一旦特征之间存在关联,\Sigma非对角线的元素将不再为0,此时2者将不再等价,使用多元高斯分布能自动捕捉到这种关联,如果此时使用单元高斯分布,需要构建一个新特征来体现这种关联(之前有讲)。

  • 如何对这两种模型进行选择

1.在实际应用中,基于单元高斯分布的异常检测模型更常用,基于多元高斯分布的异常检测模型用的比较少

2.多元高斯分布在自动捕捉特征间关联的方面有很大的优势,而使用基于单元的模型,需要构建新特征来体现这种关联(如之前的例子所示)

3.基于单元的模型计算成本更小,也就是说适用于特征非常多的情况,即n=10000,n=100000时也可以用;而基于多元的模型计算成本非常高,因为要计算\Sigma矩阵(n*n)的逆。

4.当样本数m比较小时,基于单元的模型同样适用;而基于多元的模型在实际使用中需要满足m\geqslant10n,并且\Sigma可逆。

5.使用基于多元的模型时,\Sigma矩阵一般是可逆的,除非不满足m>n或者存在高度冗余的特征,如x1=x2,x3=x4+x5等特征间存在严格的线性关系(在线性代数中称为线性相关,不过这种情况在设计选择特征时几乎不可能出现)

6.一般情况下,如果要考虑特征之间存在的关联,而且此时样本数m很多,而特征数n没那么多,m\geqslant10n时,使用基于多元的模型,可以自动捕获特征间的关联;其他情况,则手动构建新特征,再使用基于单元的模型。

 

二、推荐系统

1.问题规划

  • 示例:预测电影的评级

用户用0-5来评价每部电影,假设有一部分电影评价数据集如下:

其中列名为不同的用户,行名为不同的电影。表中的数值代表用户对电影的评分(0-5),?表示没看过或没评价。

接下来引入一些符号表示:

符号含义
n_{u}用户数量
n_{m}电影数量
r(i,j)如果用户 j 评价过电影 i 则r(i,j)=1,否则为0
y^{(i,j)}用户 j 对电影 i 的评分,当且仅当r(i,j)=1时有定义

通过上述数据,构建推荐系统,预测表格中?的取值,即预测用户对没看过的电影的评分,如果评分高的话,则推荐给该用户。

一种简单的思路:如上表数据所示,从用户Alice的评价来看,她对前两部电影评分都是5,可以发现这两部电影都是爱情电影,由于第三部电影也是爱情电影,那么她对该电影的评分应该也会很高,从而预测她对第三部电影的评分。

 

2.基于内容的推荐算法

依旧使用上一小节的电影数据集,与之前不同的是,我们事先已知每一部电影的属性,即每一部电影包含的类型。比如用两个特征x1浪漫程度,x2动作程度来表示每部电影,并增加特征x0=1,那么每部电影都可以用一个包含3个特征的向量来表示:

比如,第一部电影可以用向量x^{(1)}=[1,0.9,0]表示。

接下来要做就是基于电影数据集和每部电影的特征向量,来学习每位用户的喜好向量\Theta ^{(j)} \in R^{3}(\Theta ^{(j)} \in R^{n+1}).然后可以用(\Theta ^{(j)})^{T}\cdot x^{(i)}来预测用户 j 对未看过的电影 i 的评分,如已知第三部电影的特征向量x^{(3)},并求得第一个用户的喜好向量\Theta ^{(1)},那么用户1对第三部电影的评分可以这么算:

  • 上述问题的一般形式

我们的目的是在数据集和电影特征向量x^{(i)}已知的情况下,学习每位用户的喜好向量\Theta ^{(j)},进而预测出用户没有看过的电影的评分。

在求\Theta ^{(j)},相当于使用一次线性回归,有n_{u}个用户,相当于使用n_{u}次线性回归。优化目标是最小化这n_{u}次“线性回归”代价函数的和,得到每位用户的喜好向量\Theta ^{(1)},...,\Theta ^{(n_{u})}

其中 i:r(i,j)=1用户评价过的电影。

求解方法采用梯度下降法(或一些之前学过的高级优化方法),注意不惩罚第一个参数\Theta _{0}^{(j)}:

其实本质上就是线性回归,只不过没有了之前的系数m,不过这对求解最优值没有任何的影响。

 

3.协同过滤

特征学习:学习算法能自动学得所需要的所有特征。

  • 基于内容的推荐算法变型

依旧采用之前的电影数据集,不同的是我们不知道每一部电影的属性,既不知道每部电影的特征向量x^{(i)}:

但是,我们通过对每一位用户进行采访,知道了他们的喜好向量\Theta ^{(j)},那么与之前类似,已知数据集和\Theta ^{(j)}可以采用相同的方法,求得每部电影的特征向量x^{(i)}:

代价函数:

其中 j:r(i,j)=1,数据集中评价过电影的用户。

求解方法采用梯度下降法(或一些之前学过的高级优化方法),注意不惩罚第一个参数,形式和之前基本一致。

  • 协同过滤

之前基于内容的推荐算法,可以被归类为以下两种形式:

实际上这两种形式都比较难实现,不论是实现调研得到电影的特征向量,还是对每个用户进行采访得到其喜好向量,都不是一件容易的事情,而且每个电影的特征可能比较复杂,不像之前只有爱情、和动作两个简单的特征,可能会多种多样。

因此,对于推荐系统,我们一般使用协同过滤,它是一种可以从数据集中学习到所有特征向量的算法,包括每部电影的特征向量以及每位用户的喜好向量,而不用事先知道其中的任何一个。

协同过滤的大致思想可以理解为,基于数据集,首先随机初始化每位用户的喜好向量\Theta ^{(j)},求得每部电影的特征向量x^{(i)},再更新每位用户的喜好向量\Theta ^{(j)},再更新每部电影的特征向量x^{(i)},以此循环往复,最终算法会收敛,得到每位用户的喜好向量和每部电影的特征向量。

下一小节将正式介绍协同过滤。

 

4.协同过滤算法

  • 协同过滤优化目标

之前基于内容推荐算法的两种形式的代价函数如下:

协同过滤算法的代价函数是把2者整合在一起

注意真正的协同过滤算法,并不是像上一小节提到的那样,初始化其中一部分特征向量,求另一部分,在更新第一部分,再更新第2部分,...,直到两部分都收敛,这只是一个简单的思想;而是基于上述代价函数同时更新两部分特征向量。

当已知一部分特征向量,求另一部分时,一般要添加偏置项x_{0}^{(i)}=1\Theta _{0}^{(j)}=1,即x^{(i)}\in R^{n+1},\Theta ^{(j)} \in R^{n+1};但当使用协同过滤同时求解两部分特征向量时,不需要添加偏置项,即x^{(i)}\in R^{n},\Theta ^{(j)} \in R^{n}.

  • 协同过滤算法

 

5.矢量化:低秩矩阵分解

本小节给出协同过滤算法的向量化实现:

把之前数据集中的数据放在一个矩阵Y中,存放用户对电影的评分:

协同过滤算法预测的评分,会得到一个相同大小的矩阵:

每部电影的特征向量放在矩阵X中,每位用户的喜好向量放在矩阵\Theta中,X\Theta^{T}可以得到上述预测的评分矩阵:

在线性代数中该矩阵有低秩的特点,因此该算法也被称作低秩矩阵分解。

 

  • 找到相关的电影

对于每部电影 i ,我们可以通过协同过滤算法得到他的特征向量x^{(i)} \in R^{n},这个特征向量可能维度很高,其中每一个特征的物理意义或许也是难以理解的,但这并没有任何的影响。

我们可以根据电影 i 的特征向量,找到与他相关的电影 j,即两部电影特征向量的距离很小:

因此,如果用户对电影 i 的评分很高,我们就可以找到与电影 i 相关的其他几部电影推荐给它:

 

6.实施细节:均值规范化

假设有一位用户Eve没有对任何一部电影做出评价,如下图数据集所示:

当最小化协同过滤的代价函数,求解\Theta ^{(5)}时,此时将只剩下正则化惩罚项,因为用户没有任何评分数据,前一项将不存在。假设电影只有两个特征,即n=2,那么会得到的\Theta ^{(5)}=[0,0]],预测该用户对每部电影的评分都将是0,这个结果是没有意义的:

均值规范化可以帮助解决这个问题:

当存在用户没有评价任何一部电影时,可以对每部电影的评分计算平均值,然后将评分矩阵Y中每部电影的评分分别减去各自的均值,得到新的评分矩阵Y,来进行训练得到x^{(i)},\Theta ^{(j)}.

在预测时,计算用户 j 对电影 i 的评分再加上电影 i 的平均评分,作为最后的预测值:

对于用户5 Eve来说,和之前一样,训练得到的喜好向量\Theta ^{(5)}=[0,0]],但是他对每部电影的预测评分将不再是0,而是每部电影的均值评分:

同理,当存在某部电影没有任何一位用户评价时,也可以采用类似的均值规范化方法,即对每位用户的评分分别求均值,对原始的Y减去各自用户的均值后,得到新的Y,再进行训练,预测时把减去的均值再加回来。(不过几乎不可能存在有一部电影没有任何一位用户评价的情况,所以这种情况可以忽略)

 

三、实验

第九周实验

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值