Week9:Anomaly Detection & Recommender Systems

Coursera的课程还有2周就要结束了,我这周基本上是每天学一周的内容,而下周就要开始正式接触NLP了。

身边也有一起学习Ng这套课程的人,但是学到一半没到就放弃了,我在学习过程中也问过自己,Ng这套11年的课程放在现在还有价值么?这是多虑的表现。到了Week9我慢慢感觉到了这套课程的魅力所在,首先它可以在很短时间内让你了解机器学习这门学科,我大概也就用了一个月吧;其次它总能用一些简单的例子来让你快速理解问题所在,我觉得机器学习是偏应用。

异常检测

这是一个偏斜问题,传统行业像零件生产商,他们在出货前都会做这个工作,也许10000个成品里只有40个是不合格的。假如一家引擎生产商,正在做异常检测的工作,他们规定了两个重要指标(两个特征)来衡量产品的好坏,画在坐标系中可以很清楚的发现所有的点都集中在一个区域,只有一少部分数据会落在边缘地带。

对数学笔记敏感的同学也许很快反应过来,这有点像正态分布,是的。

高斯分布

又名正态分布,它的方程长这个样子:

如果变量x服从正态分布,则可以记作

  • exp就是e为底的对数
  • $\mu$ 是平均数,又叫做位置参数
  • $\sigma $ 是标准差,所以 $\sigma^2$ 是方差

画成图就是这样:

$\mu$ 和 $\sigma$ 对图像的影响是:

  • $\mu$ 是对称轴
  • $\sigma$ 大则矮胖;小则廋高

图像的面积为概率,例如$ 8 <= x <= 10$ 的概率,就是正态函数在$x ∈ [8, 10]$区间上的积分(面积) 。

所以可以认为,如果数据x越靠近中心,那么它为正品的概率$p(x)$越高,反之如果x落在了边缘,那么它很可能是异常数据,为了更加精确的描述异常数据,我们可以取一个比较小的值 $\epsilon$ ,当 $p(x) < \epsilon$ 的时候,我们就认为该 $x$ 是异常数据,否则就是正常数据。

异常检测算法

既然高斯分布可以用来检测异常,那太好了,我们得到了一个有力的工具。我们假设每一个特征是服从正态分布的,那么$x_1, x_2, …, x_n$ 服从各自的正态分布,他们有各自的 $\mu_i, \sigma_i^2$ 。那么给定的数据集 { $x^{(1)},x^{(2)},…x^{(n)}$ } 中,数据$x^{(i)}$ 的概率 $ p(x^{(i)}) = p(x_1^{(i)})p(x_2^{(i)}) … p(x_n^{(i)})$ ,这个值如果小于 $\epsilon$ ,则可以认为数据是异常数据。那么现在要做的就是计算出每一个特征的$\mu_i, \sigma_i^2$ 值,而其实就是计算特征的平均数和方差。

那么如何衡量一个异常检测算法的好坏呢?当然还是使用查准率召回率,而不是单纯的使用它的预测准确度,因为异常检测通常是偏斜问题。

异常检测和监督学习

它们之间的一些区别

异常检测(0 异常 1正常) 监督学习 (0 反例 1正例)
极少异常,大部分是正常 正、反的比例相当
异常情况复杂,很难从正常数据中学习到异常的特征 足够的正例数据来进行学习
异常数据可能是我们从未出现过的数据

它们不同的应用场景

异常检测 监督学习
诈骗检测 垃圾邮件分类
制造业(如零件生产商) 天气预报
服务器故障监控 癌症预测

推荐系统

评分是一个收集用户兴趣的好方法,我们假设已经观察到下面一些用户的评分行为:

电影名 用户1 用户2 用户3 用户4
何以笙箫默 5 5 0 0
栀子花开 5 0
激战 0 5
叶问2 0 4
战狼 0 0 5 5

评分范围是0-5的整数,留空表示用户没有对其评分,可能是没看过。

基于内容的推荐

如果独立的看一个用户i,把电影看成是输入值 $X$,评分看成输出 $Y$,这就是一个线性回归问题,通过学习用户1已经对电影的评分,我们可以预测出用户1对“激战”这部电影的评分。

我们可以把电影分成两类:爱情片、动作片,所以特征数量是2,那么预测函数为:

$h(X) = \theta_0 + \theta_1x_1 + \theta_2x_2$ ,其中 $x_1$ 理解为表示是这部电影是爱情片的程度,$\theta_1$ 是用户对于爱情片的喜爱程度,可以记用户i的$\theta$ 值为 $\theta^{(i)}$ 。

所以一个用户评价的越多,他的$\theta$就会越精确,我们就可以更加精确的为其推荐内容。

协同过滤

随着电影数量越来越多,我们不好好确定一部电影的“爱情片程度”。协同过滤算法的一个特点是,它可以自动的学习出电影的特征值。怎么学的?通过询问用户,来确定他的 $\theta$ 值,然后再根据用户对电影的评分来求得这部电影的特征值。

而回想发现,$\theta$ 应该才是要被优化的参数啊!!所以协同过滤算法的另一个特点是它在递归下降时同时优化$x$ 和 $\theta$ 。

它的Cost Function:

日中 $r(i, j) = 1$ 表示用户 $j$ 对电影 $i$ 评过分(从表格看来,电影的特征是行,用户是列)

分别对 $x$ 、$\theta$ 进行梯度下降,他们的偏导数为:

坚持原创文章分享,您的支持将鼓励我继续创作!