序
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$ 进行梯度下降,他们的偏导数为: