Toggle navigation
Yang's Blog
主页
week 9
Machine Learning
week 2
week 3
week 4
week 5
week 6
week 7
week 8
week 10
End_to_End_Learning
About Me
归档
标签
week 9
0
无
2017-10-31 21:48:33
10
0
hljyy96@126.com
1.anomaly detection:problem motivation 首先解释一下异常检测的定义,假设我们是一种飞机引擎的制造商,当你的飞机引擎从生产线上流出时,需要进行QA测试,作为这项测试的一部分,我们选取了飞机引擎的一些特征变量,比如引擎运转时的热量或者引擎的震动频率等: ![](https://leanote.com/api/file/getImage?fileId=59af5a66ab64411aa5000cca) 这样一来,我们就有了一个数据集,从$x^{(1)}到x^{(m)}$,如果我们生产了m个引擎的话,将它们绘制在一张图表上,看起来会如下图所示: ![](https://leanote.com/api/file/getImage?fileId=59af5a66ab64411aa5000cc8) 这里的每个点都是无标签数据,这样一来,问题检测的定义可以这么定义:假设有一天我们的一个新引擎流出,我们对其进行检测,而它的特征变量是$x_{test}$,所谓异常检测的意思就是我们希望知道这个引擎是否有某种异常,或者说我们希望判断这个引擎是否需要进行下一步测试。 给定数据集$x^{(1)},x^{(2)},x^{(3)}...x^{(m)}$,我们假设数据集是正常的,我们希望新的数据$x_{test}$是否也为正常的,即这个数据不属于这个数据集概率的大小,我们所构建的模型应该能根据该测试数据的位置来反馈给我们其属于一组数据的可能性$p(x)$。 ![](https://leanote.com/api/file/getImage?fileId=59af5a66ab64411aa5000cc4) 很明显,在上图中蓝色圈以内的数据属于该数据组的可能性较高,相反的,离中心越远的数据所对应的可能性也就越低。这种方法称为密度估计,方法如下: ![](https://leanote.com/api/file/getImage?fileId=59af5a66ab64411aa5000cc0) 异常检测主要用于识别欺骗行为,如识别在线性模式中不符合样本特征的模型的用户。 2.Gaussian distribution 高斯分布也称为正太分布,其公式如下: ![](https://leanote.com/api/file/getImage?fileId=59af5a66ab64411aa5000cc6) 而我们利用已有的数据来估计总体中的$\mu和\sigma$的方法如下: ![](https://leanote.com/api/file/getImage?fileId=59af5a66ab64411aa5000cc3) ![](https://leanote.com/api/file/getImage?fileId=59af5a66ab64411aa5000cc1) 要注意的是在这里对于方差我们通常只除以m而非统计学中的m-1,这在当我们有一个比较大的数据集的时候是几乎没有影响的。 3.algorithm 异常检测算法就是对于给定的数据集,我们要针对每一个特征计算$\mu和\sigma$的估计值: ![](https://leanote.com/api/file/getImage?fileId=59af5a66ab64411aa5000cc5) 一旦我们获得了平均值和方差的估计值,我们就可以根据模型计算p(x): ![](https://leanote.com/api/file/getImage?fileId=59af5a66ab64411aa5000cc2) 当$p(x)<\epsilon$时即为异常。 下图是由两个特征构成的训练集,以及对应的特征分布的情况: ![](https://leanote.com/api/file/getImage?fileId=59af5a66ab64411aa5000cc7) 而下面的图示三维密度估计函数,z轴作为两个特征的估值p: ![](https://leanote.com/api/file/getImage?fileId=59af5a66ab64411aa5000cc9) 我们选择一个$\epsilon$,当p(x)大于其时即为正常数据,否则为异常数据。 4.developing and evaluating an anomaly detection system 异常检测算法是一种unsupervised learning,也就是说我们无法根据结果变量y的取值来判断我们的数据是否为真的异常,我们需要另一种方式来帮助检验算法是否有效,也就是从样本中选取一些带标签的数据,无论是positive或negative,然后用剩下的数据构成cross validation set 和test set。例如我们有10000台引擎的数据,有20台异常引擎的数据,我们选取6000台正常的引擎的数据作为training set,选取2000台正常的引擎和10台异常的引擎作为cross validation set,再选取2000台正常的引擎和10台异常的引擎作为test set,具体的评估方法如下: ① 根据训练集数据,我们算出其中的均值和方差,并且求出相应的p(x) ② 对于交叉验证集,我们尝试使用不同的$\epsilon$值作为阙值,并预测数据是否异常,根据$F_1$的值或者查准率和查全率的比值来确定$\epsilon$ ③ 选出$\epsilon$后,针对测试集进行预测,计算异常检验系统的$F_1$值或查准率和查全率的比值 5.anomaly detection vs supervised learning 由于我们之前在对于异常检测系统的数据选择上也选择了一些带标签的数据,所以看起来会和supervised learning有些相似,如下的表格可以比较清晰地区分出二者的不同: ![](https://leanote.com/api/file/getImage?fileId=59b0b1b2ab64417fef00093b) 另外,当正样本过少的时候,也就是说出现了太多的没见过的异常类型,对于这些问题,通常应该采用的算法就应该为anomaly detection。 6.choosing what feathers to use 对于异常检测算法,选择合适的特征时十分重要的,在选取特征上一般按照以下的标准选择: 由于异常检测假设特征符合高斯分布,但是如果不符合高斯分布的话异常检测算法也能够工作,但还是将其转换为高斯分布较好,例如使用对数函数$x=log(x+c)$,其中c为非负常数,或者$x=x^c$,其中c为0-1之间的一个常数或者其他的方法。 ![](https://leanote.com/api/file/getImage?fileId=59b0b1b2ab64417fef00093c) 这里存在一个问题,就是一些异常的数据可能也会有较高的p(x)值,而因此呗认为算法时正常的,在这种情况下,误差分析可以帮助我们分析出那些被算法错误预测为正常的数据,我们也可能从分析出的数据中决定是否应该向其中添加一些新的特征以更好地进行异常检测。 异常检测的误差分析如下: ![](https://leanote.com/api/file/getImage?fileId=59b0b1b3ab64417fef00093d) 我们也可以采用一些特征的组合来获得一些新的和更好的特征,这些新的特征值可能或很大或很小,这样就有助于我们判断和评估这些特征。 7.multivariate Gaussian distribution 假如我们有两个相关的特征,而且这两个特征的值域比较宽,这样的话一般的高斯分布模型可能不会很好地识别异常数据,其原因在于一般的高斯分布尝试的是抓取两个特征的偏差,并以此创造出一个较大的判断边界。 下图所示的是两个相关特征,其中洋红色的线描述的是一般的高斯分布所选取的边界,单很明显绿色的点描述的是一个异常的值,但其值p(x)却在正常范围内,这很明显是不正确的,而正确的高斯分布的描述正像蓝色的线描述的一样,即多元高斯分布: ![](https://leanote.com/api/file/getImage?fileId=59b5edc2ab64414ff3000945) 在一般的高斯分布的模型中,我们计算p(x)的方法是将通过计算每个特征对应的概率并将其累乘,在多元高斯分布模型中,我们将构建协方差矩阵,用所有的特征来计算p(x)。 我们先计算所有特征的平均值,再计算协方差矩阵: ![](https://leanote.com/api/file/getImage?fileId=59b5edc2ab64414ff3000949) 其中$\mu$是一个向量,每个单元都是原特征矩阵中每一行的数据的均值,最后我们依此计算多元高斯分布的p(x): ![](https://leanote.com/api/file/getImage?fileId=59b5edc2ab64414ff3000946) 其中$|\Sigma|$是行列式,在octave中用det(sigma)计算,$|\Sigma|^{-1}$是逆矩阵。 下面我们来看一下协方差矩阵是如何影响模型的: ![](https://leanote.com/api/file/getImage?fileId=59b5edc2ab64414ff3000947) 从左至右: ① 是一个一般的高斯分布模型 ② 通过协方差矩阵,令特征1拥有较小的偏差,同时令特征2不变 ③ 通过协方差矩阵,令特征2拥有较小的偏差,同时令特征1不变 ④ 通过协方差矩阵,在不改变两个特征原有偏差的基础上,增强二者的正相关性 ⑤ 通过协方差矩阵,在不改变两个特征原有偏差的基础上,增强二者的负相关性 由此可见多元高斯分布和原有高斯分布模型的关系:原来的高斯分布模型是多元高斯分布模型的一个子集。 原高斯分布模型和多元高斯分布模型的比较如下: ![](https://leanote.com/api/file/getImage?fileId=59b5edc2ab64414ff3000948) 所以在训练集不是太大并且没有太多特征的情况下,我们可以使用多元高斯分布模型。 8.anomaly detection using the multivariate Gaussian distribution 接下来让我们用多元高斯分布的这些想法来制定一个不同的异常检测算法: 首先回顾一下多元高斯分布和多元正态分布: ![](https://leanote.com/api/file/getImage?fileId=59b5f6ecab64414db8000b13) 其中$\mu$是一个一维向量,$\Sigma$是一个n*n的协方差矩阵。 依此来看参数拟合问题: 假设我们有一组样本{$x^{(1)},x^{(2)},x^{(3)}...x^{(m)}$}是一个n维向量,我们想确保样本来自一个多元高斯分布,那么我们应该如何估计参数$\mu和\Sigma$呢? 首先设置$\mu$为样本均值:![](https://leanote.com/api/file/getImage?fileId=59b5f6ecab64414db8000b15) 并设置$\Sigma$:![](https://leanote.com/api/file/getImage?fileId=59b5f6edab64414db8000b16) 我们将上述2个公式进行拼合就得到了多元高斯分布模型: ![](https://leanote.com/api/file/getImage?fileId=59b5f6ecab64414db8000b14) 首先我们依照训练集和拟合模型计算出p(x),再依据模型的特点来调整协方差矩阵中的数据,使最终的多元高斯分布模型满足模型的特征。 在原有高斯模型和多元高斯模型的选取方面一般按照如下标准: ![](https://leanote.com/api/file/getImage?fileId=59b5f6edab64414db8000b17) 9.recommender system:problem formulation 我们从一个例子来定义推荐系统的问题:假设我们是一个电影供应商,我们有5部电影和4个用户,我们要求用户为电影打分: ![](https://leanote.com/api/file/getImage?fileId=59b74ab2ab644145010012fa) 我们希望构建的算法来预测他们会给没有看过电影打多少分,并以此为推荐的依据,下面引入一些标记: ![](https://leanote.com/api/file/getImage?fileId=59b74ab2ab644145010012f9) 10.content based recommendations 在我们的例子中,我们假设了每个电影都有两个特征,如$x_1$代表了电影的浪漫程度,$x_2$代表了电影的动作程度: ![](https://leanote.com/api/file/getImage?fileId=59b74ab3ab644145010012fb) 那么每个电影都会有一个特征向量,如$x^{(1)}$是第一部电影的特征向量$\begin {bmatrix} 0.9 \\ 0\\ \end {bmatrix}$。 下面我们就根据这些特征来构建一个推荐算法,假设我们采用线性回归模型,我们可以根据每个用户都训练一个线性回归模型,如$\theta$是第一个用户的模型的参数,于是我们有: ![](https://leanote.com/api/file/getImage?fileId=59b74df1ab644145010013b1) 针对用户j,该线性回归模型的代价函数为预测误差的平方和,加上正则化项: ![](https://leanote.com/api/file/getImage?fileId=59b74df1ab644145010013b4) 其中i:r(i,j)代表在求和时只考虑那些用户j评分过的电影i。和之前的线性回归不一样的是,我们去掉原来$\frac 1{2m}$中的m,变为$\frac 1 2$,并且我们不对方差项$\theta_0$进行正则化处理。 上述的代价函数只是针对一个用户的,所有的用户的代价函数求和如下: ![](https://leanote.com/api/file/getImage?fileId=59b74df1ab644145010013b3) 经过代价函数的偏导数求导后得到的梯度下降的更新公式为: ![](https://leanote.com/api/file/getImage?fileId=59b74df1ab644145010013b2) 11.collaborative filtering 在之前的算法中,我们通过得到每一部电影的特征来推导得到每一个用户的参数,相反的,如果我们有每一个用户的相关参数,我们也可以得到所有电影的特征: ![](https://leanote.com/api/file/getImage?fileId=59b74f4cab6441450100140d) 但是在实际中我们往往没有这些实际的参数,通过使用协同过滤算法可以同时学习这两者,我们的优化目标变为同时针对x和$\theta$执行: ![](https://leanote.com/api/file/getImage?fileId=59b74f4cab6441450100140a) 对代价函数求偏导的结果如下: ![](https://leanote.com/api/file/getImage?fileId=59b74f4cab6441450100140c) 在协同过滤算法中,我们通常不使用方差项,如果需要的话系统会自动学习获得。 协同过滤算法的使用步骤如下: ![](https://leanote.com/api/file/getImage?fileId=59b74f4cab6441450100140b) 协同过滤优化目标: ![](https://leanote.com/api/file/getImage?fileId=59b74f6eab644142ce0013aa) 12.vectorization_low rank matrix factorization 根据之前的内容,如果我们有5部电影的数据集,我们要做的就是将这些数据集分组并写入同一个矩阵中,例如我们有5部电影和4位用户,就是一个5*4的矩阵: ![](https://leanote.com/api/file/getImage?fileId=59b89d07ab64411928000922) ![](https://leanote.com/api/file/getImage?fileId=59b89d07ab64411928000923) 推出评分: ![](https://leanote.com/api/file/getImage?fileId=59b89d07ab64411928000924) 如果一位用户正在看电影$x^{(i)}$,我们可以根据最小的$||x^{(i)}-x^{(j)}||$推荐电影$x^{(j)}$。 13.implementation detail_mean normalization 让我们看一下下面的数据: ![](https://leanote.com/api/file/getImage?fileId=59b89d08ab64411928000926) 假设新增一位用户E,但是他并没有对任何一部电影进行过评分,那么我们以什么为依据来向他推荐电影呢?根据我们之前得到的训练算法: ![](https://leanote.com/api/file/getImage?fileId=59b89d07ab64411928000921) 显然只有末尾的正则项对结果有影响,因为r(i,j)始终为0,所以最后的结果矩阵会是一个零向量,而这个结果显然是没用的,我们需要使用另外一种方法。 首先我们对结果Y矩阵进行均值归一化处理,将每一个用户对每一个电影的评分减去所有用户对相应的电影的评分的平均值: ![](https://leanote.com/api/file/getImage?fileId=59b89d08ab64411928000925) 然后我们用这个结果矩阵来训练算法,再将平均值加回去,预测$(\theta^{(j)})^T(x^{(i)})+\mu_i$,也就是说我们会认为E对所有电影做了一个平均值的评分。
week 6
week 10
0
赞
10 人读过
新浪微博
微信
更多分享
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航