Andrew NG 机器学习 笔记-week9-异常检测和推荐系统(Anomaly Detection and Recommender Systems)

来源:互联网 发布:淘宝软件2017官方下载 编辑:程序博客网 时间:2024/05/21 22:22

一、Density Estimation(密度估计)

1. 问题动机(Problem Motivation)

异常检测(Anomaly detection)问题,是机器学习算法的一个常见应用。

这种算法的有趣之处在于:它虽然主要用于无监督学习问题,但从某些角度看,它又类似于一些监督学习问题。

什么是异常检测呢?为了解释这个概念,让我举一个例子吧:

假如你是一个飞机引擎制造商,当你生产的飞机引擎从生产线上流出时,你需要进行QA(质量控制测试),你测量了飞机引擎的一些特征变量,比如引擎运转时产生的热量,或者引擎的振动等等。

这里写图片描述

这样一来,你就有了一个数据集,从 x(1)x(m),如果生产了m 个引擎,绘制成图表,如下:
这里写图片描述

这里的每个点,都是无标签数据。异常检测问题就是:有一个新的飞机引擎,特征是 xtest。我们希望判断它看起来是否像一个正常的引擎。

给定数据集 x(1),x(2),..,x(m) ,我们假使数据集是正常的,我们希望知道新的数据 xtest 是不是异常的,即这个测试数据不属于该组数据的几率如何。我们所构建的模型应该能根据该测试数据的位置告诉我们其属于一组数据的可能性 p(x)。
这里写图片描述

这种方法称为密度估计,表达如下:
这里写图片描述

异常检测主要用来识别欺骗。例如在线采集而来的有关用户的数据,一个特征向量中可能会包含如:用户多久登录一次,访问过的页面,在论坛发布的帖子数量,甚至是打字速度等.尝试根据这些特征构建一个模型,可以用这个模型来识别那些不符合该模式的用户。
再一个例子是检测一个数据中心,特征可能包含:内存使用情况,被访问的磁盘数量,CPU 的负载,网络的通信量等。根据这些特征可以构建一个模型,用来判断某些计算机是不是有可能出错了。

2.高斯分布(Gaussian Distribution)

高斯分布,也称为正态分布。

通常如果我们认为变量 x 符合高斯分布 x~N(μ,σ2) 则其概率密度函数为:
这里写图片描述

我们可以利用已有的数据来预测总体中的 μ 和 σ2 的计算方法如下:
这里写图片描述

高斯分布样例:
这里写图片描述

注:机器学习中对于方差我们通常只除以 m 而非统计学中的(m-1)。这里顺便提一下,在实际使用中,到底是选择使用 1/m 还是 1/(m-1)其实区别很小,只要你有一个还算大的训练集,在机器学习领域大部分人更习惯使用 1/m 这个版本的公式。这两个版本的公式在理论特性和数学特性上稍有不同,但是在实际使用中,他们的区别甚小,几乎可以忽略不计。

3.异常检测算法

应用高斯分布开发异常检测算法。

异常检测算法:

对于给定的数据集 x(1),x(2),...,x(m) ,针对每一个特征计算 μ 和 σ2 的估计值:
这里写图片描述

一旦我们获得了平均值和方差的估计值,给定新的一个训练实例,根据模型计算 p(x):
这里写图片描述

下图是一个由两个特征的训练集,以及特征的分布情况:

三维图表表示的是密度估计函数,z 轴为根据两个特征的值所估计 p(x)值:

我们选择一个 ε,将 p(x)=ε 作为我们的判定边界,当 p(x)>ε 时预测数据为正常数据,否则为异常。

这里写图片描述

二、Building an Anomaly Detection System

1. 开发并评估一个异常检测系统(Developing and Evaluating an Anomaly Detection System)

异常检测算法是一个无监督学习算法,意味着我们无法根据结果变量y的值来告诉我们数据是否真的是异常的。我们需要另一种方法来帮助检验算法是否有效。
当我们开发一个异常检测系统时,我们从带标记(异常或正常)的数据着手,从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合构成交叉验证集和测试集。

例如:有10000台正常引擎的数据,有20台异常引擎的数据。我们这样分配数据:
6000台正常引擎的数据作为训练集。
2000台正常引擎和10台异常引擎的数据作为交叉验证集。
2000台正常引擎和10台异常引擎的数据作为测试集。

具体的评估方法如下:
1、根据测试集数据,估计特征的平均值和方差并构建p(x) 函数。
2、对交叉验证集,我们尝试使用不同的 ε 值作为阀值,并预测数据是否异常,根据 F 1值或者查准率与查全率的比例来选择 ε。
3、选出ε 后,针对测试集进行预测,计算异常检测系统的 F1 值,或者测准率与查全率之比。

2.异常检测与监督学习对比(Anomaly Detection vs. Supervised Learning)

之前我们构建的异常检测系统也使用了带标记的数据,与监督学习有些相似,下面的对比有助于选择采用监督学习还是异常检测:

两者比较:
这里写图片描述

3.选择特征(Choosing What Features to Use)

对于异常检测算法,我们使用的特征是至关重要的。

异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能工作,但最好还是讲数据转换成高斯分布。例如:使用对数函数 x=log(x+c),其中 c 为非负常数;或者 x=xc, c 为 0-1 之间的一个分数,等方法。

这里写图片描述

误差分析:
一个常见的问题是一些异常的数据可能也会有较高的 p(x)值,因而被算法认为是正常的。这种情况下误差分析能够帮助我们,我们可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。我们可能能从问题中发现我们需要增加一些新的特征,增加这些新特征后获得的新算法能够帮助我们更好地进行异常检测。

异常检测误差分析:
这里写图片描述

通常 正常和异常的样例 p(x) 都比较大,无法区分。这时就需要提取新的特征。如图中的 本来只有 x1 特征,如果区分出异常数据,增加特征 x2 后就能区分出来了。可以通过将一些相关特征进行组合,来获取一些新的特征。如,在检测数据中心的计算机状况的例子中,可以使用CPU负载与网络通信量的比例作为一个新的特征,如果该值异常的大,表有可能意味着该服务器有问题。

三、多元高斯分布(Multivariate Gaussian Distribution )

1.多元高斯分布

假使我们有两个相关的特征,而且这两个特征的值域范围比较宽,这种情况下,一般的高斯分布模型可能不能很好地识别异常数据。其原因在于,一般的高斯分布模型尝试的是去同时抓住两个特征的偏差,因此创造出一个比较大的判定边界。

下图中是两个相关特征,洋红色的线(根据 ε 的不同其范围可大可小)是一般的高斯分布模型获得的判定边界,很明显绿色的 X 所代表的数据点很可能是异常值,但是其 p(x)值却仍然在正常范围内。多元高斯分布将创建像图中蓝色曲线所示的判定边界。

这里写图片描述

在一般的高斯分布模型中,我们计算 p(x) 的方法是:通过分别计算每个特征对应的几率然后将其累乘起来,在多元高斯分布模型中,我们将构建 特征 的 协方差矩阵,用所有的特征一起来计算 p(x).

我们首先计算所有特征的平均值,然后再计算协方差矩阵:
这里写图片描述

注:其中 μ 是一个向量,其每一个单元都是原特征矩阵中一行数据的均值。最后我们计算多元高斯分布的 p(x):
这里写图片描述

其中:
|Σ| 是定矩阵,在 Octave 中用 det(sigma)计算

下面我们来看看协方差矩阵是如何影响模型的:
这里写图片描述
上图是 5 个不同的模型,从左往右依次分析:
1. 是一个一般的高斯分布模型
2. 通过协方差矩阵,令特征 1 拥有较小的偏差,同时保持特征 2 的偏差
3. 通过协方差矩阵,令特征 2 拥有较大的偏差,同时保持特征 1 的偏差
4. 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的正相关性
5. 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的负相关性

这里写图片描述
μ是顶点坐标的值

多元高斯分布模型与原高斯分布模型的关系:
原本的高斯分布模型是多元高斯分布模型的一个子集,即像上图中的第1、2、3,这3 个例子所示,如果协方差矩阵只在对角线的单位上有非零的值时,即为原本的高斯分布模型了。

这里写图片描述
原高斯分布模型被广泛使用着,如果特征之间在某种程度上存在相互关联的情况,我们可以通过构造新特征的方法来捕捉这些相关性。
如果训练集不是太大,并且没有太多的特征,我们可以使用多元高斯分布模型。

2.使用多元高斯分布进行异常检测(Anomaly Detection using the Multivariate Gaussian Distribution)

回顾一下多元高斯(正态)分布:
这里写图片描述
这里写图片描述

如图,该分布在中央最多,越到外面的圈的范围越小。
这里写图片描述

原始模型与多元高斯模型的关系如图:
这里写图片描述

原始模型和多元高斯分布比较如图:
这里写图片描述


一、Predicting Movie Ratings

1. 问题表述(Problem Formulation)

推荐系统是机器学习最重要的应用之一。

对推荐系统性能的改善,将对企业有实质性和直接的影响。

机器学习学术界推荐系统占据份额较少。但在企业中占据很高的优先级。

对机器学习来说,特征是很重要的,你所选择的特征,将对你学习算法的性能有很大的影响。对于一些问题,有算法可以为你学习一套好的特征。不用手动选择。

我们从一个例子开始定义推荐系统的问题:

假设我们有一个电影供应商,我们有5部电影和4个用户,我们要求用户为电影打分。
这里写图片描述

前三部电影是爱情片,后两部则是动作片,我们可以看出 Alice 和 Bob 似乎更倾向与爱情片, 而 Carol 和 Dave 似乎更倾向与动作片。并且没有一个用户给所有的电影都打过分。我们希望构建一个算法来预测他们每个人可能会给他们没看过的电影打多少分,并以此作为推荐的依据。

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

2. 基于内容的推荐系统(Content Based Recommendations)

在基于内容的推荐系统中,假设对于推荐的内容特征有一些数据。

在我们的例子中,每部电影有两个特征,x1 代表电影的浪漫程度,x2 代表电影的动作程度。

这里写图片描述

每部电影都有一个特征向量,如 x(1)=[0.9 ;0],加上方差项x0=1,所以 x(1)=[1;0.9 ;0]

我们要基于这些特征来构建一个推荐系统算法。

假设我们采用线性回归模型,需要对每一个用户训练一个线性回归模型,如 θ(1) 是第一个用户的模型的参数。

θ(j) 是用户 j 的参数向量
x(i) 是电影 i 的特征向量

对于用户 j 和电影 i , 我们预测评分为:(θ(j))Tx(i)

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

其中 i:r(i,j)=1 表示我们只计算那些用户 j 评过分的电影。在一般的线性回归模型中,误差项和正则项应该都是乘以 12m,我们这里将 m 去掉(为了简化,mj 是常数,去掉不改变最小化结果)。我们不对 θ0 进行正则化处理。

上面的代价函数只是针对一个用户的,为了学习所有用户的参数向量,我们将所有用户的代价函数求和:
这里写图片描述

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

事实上很多电影无法直接提取特征。

二、协同过滤(Collaborative Filtering)

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

这里写图片描述

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

我们的优化目标便改为同时针对 x 和 θ 进行。

这里写图片描述

注:在协同过滤算法中,我们通常不使用方差项,如果需要的话,算法会自动学得。

协同过滤算法使用步骤如下:
1、初始化 x(1),x(2),....x(nm)θ(1),θ(2),....θ(nu) 为一些随机小值.
这里写图片描述
2、使用梯度下降算法最小化代价函数.
3、在训练完算法后,我们预测(θ(j))Tx(i) 为用户 j 给电影 i 的评分.

通过这个学习过程获得的特征矩阵包含了有关电影的重要数据,这些数据不总是人能读懂的,但是我们可以用这些数据作为给用户推荐电影的依据。

例如,如果一位用户正在观看电影 x(i) ,我们可以寻找另一部电影 x(j) ,依据两部电影的特征向量之间的距离||x(i) - x(j) ||的大小。

这里写图片描述

三、低秩矩阵分解(Low Rank Matrix Factorization)

上节谈到了协同过滤算法,本节讨论有关该算法的向量化实现,以及有关该算法可以做的其他事情。

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

目标:实现一种选择的方法,写出协同过滤算法的预测情况。

我们有关于5部电影的数据集,将这些用户的电影评分进行分组并存到一个矩阵中。

这里写图片描述

推出评分:
这里写图片描述

找到相关影片:
这里写图片描述

电影 i 有一个特征向量 x(i) ,你是否能找到一部不同的电影 j,保证两部电影的特征向量之间的距离 x(i)x(j) 很小,那就能很有力地表明电影 i 和电影 j 在某种程度上相似.

实现上的细节:均值归一化(Implementational Detail_ Mean Normalization)

让我们来看下面的用户评分数据:
这里写图片描述

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

根据协同过滤方法的代价函数,由于该用户没有观影记录所以,前面项为0,函数的值取决于最后一部分,为了使代价函数最小,所以显然 θ(5)1=0,θ(5)2=0。所以 (θ(5))Tx(i)=0。即预测每个电影评分都是 0 。

显示不是特别合理。

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

这里写图片描述

然后我们利用这个新的 Y 矩阵来训练算法。 如果我们要用新训练出的算法来预测评分,则需要将平均值重新加回去,预测 (θ(j))T(x(i))+μi

使用归一化方法后,我们的新模型会认为Eve给每部电影的评分就是该电影的平均分。

阅读全文
0 0
原创粉丝点击