吴恩达机器学习:异常检测与协同过滤

这是吴恩达机器学习的最后一课,这次学习的内容是机器学习的常见应用,异常检测与协同过滤。课程中介绍的异常检测主要基于 正态分布,用于检测出偏离正常值的数据。而协同过滤是 推荐系统 的一部分,利用已有用户的评分来给你推荐商品、视频等。

点击 课程视频 你就能不间断地学习 Ng 的课程,关于课程作业的 Python 代码已经放到了 Github 上,点击 课程代码 就能去 Github 查看,代码中的错误和改进欢迎大家指出。

以下是 Ng 机器学习课程第八周的笔记。

异常检测

通常使用异常检测的情况是在一个含有正常和异常的数据集中,异常样本数目远小于正常样本数目,使得无法从异常数据中提取有效的特征。于是只能通过学习正常数据的分布来识别异常数据。具体来说,我们通过数据学习一个概率模型 p ( x ) p(x) p(x),并通过一个阈值 ϵ \epsilon ϵ 来判断数据是否异常。从直观上来理解正常数据虽然由于误差等原因有所偏离,但基本都还在一个区域范围内,而异常数据则会离这个区域比较远( 如下图,红圈里的可以看做异常值 )。
异常检测

算法

在异常检测中,假设特征是相互独立的而且服从正态分布 x j ∼ N ( μ j , δ j 2 ) x_j \sim N(\mu_j,\delta_j^2) xjN(μj,δj2),所以:
p ( x ) = ∏ j = 1 n p ( x j ; μ j , δ j 2 ) = ∏ j = 1 n 1 2 π δ j e − ( x j − μ j ) 2 2 δ j 2 p(x)=\prod\limits_{j=1}^np(x_j;\mu_j,\delta_j^2)=\prod\limits_{j=1}^n\frac{1}{\sqrt{2\pi}\delta_j}e^{-\frac{(x_j-\mu_j)^2}{2\delta_j^2}} p(x)=j=1np(xj;μj,δj2)=j=1n2π δj1e2δj2(xjμj)2
然后我们只要通过数据计算 μ i \mu_i μi δ i \delta_i δi 就可以得到 p ( x ) p(x) p(x) 了,于是有如下算法:

  1. 选择有助于区分异常数据的特征 x i x_i xi
  2. 分别计算 μ 1 , . . . , μ n , δ 1 2 , . . . , δ n 2 \mu_1,...,\mu_n,\delta_1^2,...,\delta_n^2 μ1,...,μn,δ12,...,δn2
    KaTeX parse error: No such environment: align* at position 9: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \mu_j &= \frac…
  3. 对于需要检测异常的数据 x x x 计算 p ( x ) p(x) p(x),如果 p ( x ) < ϵ p(x) < \epsilon p(x)<ϵ 则判断为异常。

算法在特征比较多时计算效率比较高,而且在通常情况下即使特征不独立也能够得到比较好的结果。如果特征比较少并且特征之间又相互关联的情况,这时候我们可以使用 多元正态分布 来作为模型,此时 p ( x ) p(x) p(x) 为:
p ( x ) = 1 ( 2 π ) k ∣ Σ ∣ e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) p(x)=\frac{1}{\sqrt{(2\pi)^{k}|\Sigma|}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)} p(x)=(2π)kΣ 1e21(xμ)TΣ1(xμ)
式中的 Σ \Sigma Σ协方差矩阵,在之前的课程笔记中有提到。

ϵ \epsilon ϵ 选择

由于我们的数据有 偏斜类 的问题,所以需要用 查准率召回率 的结合 F 1 F_1 F1 指数来评价模型,并选取 F 1 F_1 F1 取最大时对应的 ϵ \epsilon ϵ 作为阈值。

协同过滤

假设我们有 n m n_m nm 部影片,并且有 n u n_u nu 位用户对于其中一些影片的评价 y ( i , j ) y^{(i,j)} y(i,j),。
影片评分
其中用户对有些影片没有打分,我们希望能够估计这些评分并推荐高分的内容给用户。用户 j j j 有没有给 i i i 电影评分记为 R ( i , j ) R(i,j) R(i,j)。假设每部电影具有特征向量 x ( i ) x^{(i)} x(i),对于用户 ( 1 ) (1) (1),我们像 线性回归 中那样学习一个 h θ ( x ) = θ 0 ( 1 ) + θ 1 ( 1 ) x 1 + θ 2 ( 1 ) x 2 + ⋯ + θ n ( 1 ) x n h_\theta(x)=\theta_0^{(1)}+\theta_1^{(1)}x_1+\theta_2^{(1)}x_2+\dots+\theta_n^{(1)}x_n hθ(x)=θ0(1)+θ1(1)x1+θ2(1)x2++θn(1)xn 来获取用户没有打分的评分。可以看出对于所有用户,评分表可以表示为电影特征矩阵和用户参数矩阵的乘积:
X = [ — ( x ( 1 ) ) T — — ( x ( 2 ) ) T — ⋮ — ( x ( n m ) ) T — ] , Θ = [ — ( θ ( 1 ) ) T — — ( θ ( 2 ) ) T — ⋮ — ( θ ( n u ) ) T — ] X = \begin{bmatrix} — (x^{(1)})^T — \\ — (x^{(2)})^T — \\ \vdots \\ — (x^{(n_m)})^T — \end{bmatrix}, \Theta = \begin{bmatrix} — (\theta^{(1)})^T — \\ — (\theta^{(2)})^T — \\ \vdots \\ — (\theta^{(n_u)})^T — \end{bmatrix} X=(x(1))T(x(2))T(x(nm))T,Θ=(θ(1))T(θ(2))T(θ(nu))T
预测的评分 P r e d i c a t e d = X Θ T Predicated = X \Theta^T Predicated=XΘT,值得注意的是 X , Θ X, \Theta X,Θ 都是未知的,它们都是需要学习的变量。

代价函数

确定了学习模型,下一步就是要设定 代价函数。这次的 代价函数 和之前基本相同,不同的是在计算梯度的时候 X , Θ X, \Theta X,Θ 都需要求。下面直接给出 代价函数

J ( x ( 1 ) , . . . , x ( n m ) , θ ( 1 ) , . . . , θ ( n u ) ) = 1 2 ∑ ( i , j ) : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n ( x k ( i ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n ( θ k ( j ) ) 2 \begin{array}{l l l} J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)}) & = & \frac{1}{2} \sum_{(i,j):r(i,j)=1} \left( (\theta^{(j)})^T x^{(i)} - y^{(i,j)}\right) ^2 \\ & + & \frac{\lambda}{2} \sum_{i=1}^{n_m} \sum_{k=1}^n (x_k^{(i)})^2 \\ & + & \frac{\lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^n(\theta_k^{(j)})^2 \end{array} J(x(1),...,x(nm),θ(1),...,θ(nu))=++21(i,j):r(i,j)=1((θ(j))Tx(i)y(i,j))22λi=1nmk=1n(xk(i))22λj=1nuk=1n(θk(j))2
通过简单的求导可以得到梯度公式:
∂ J ∂ x k ( i ) = ∑ j : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) θ k ( j ) + λ x k ( i ) ∂ J ∂ θ k ( j ) = ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ k ( j ) \frac{\partial J}{\partial x_k^{(i)}} = \sum_{j:r(i,j)=1} ((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})\theta_k^{(j)} + \lambda x_k^{(i)} \\ \frac{\partial J}{\partial \theta_k^{(j)}} = \sum_{i:r(i,j)=1} ((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})x_k^{(i)} + \lambda \theta_k^{(j)} xk(i)J=j:r(i,j)=1((θ(j))Tx(i)y(i,j))θk(j)+λxk(i)θk(j)J=i:r(i,j)=1((θ(j))Tx(i)y(i,j))xk(i)+λθk(j)
和之前的学习算法相同,我们只需要实现 代价函数 的部分并计算梯度值,调用 minimize 函数来获取最优解就可以了。有了 X , Θ X, \Theta X,Θ 的值,我们就能够得到预测的评分,通过评分高低就能够进行推荐啦。

课程总结

吴恩达机器学习课程作为对机器学习基本的了解还是不错的。但是课程的内容比较老,像 深度学习强化学习 等内容都没有涉及,缺乏概率方面的视角,工程方面也只是提了一点点,这些也正是今后需要继续学习的内容。
当驶向 机器学习之海 的时候,感觉心中有一个方向很重要,即便它有多么的不切实际。

So~,第八周的内容就是这些了,谢谢大家耐心阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值