14 异常检测问题
针对给出的样本构建一个模型,在模型范围内的样本点被认为是正常的,超出阈值的样本点被认为是异常的。
14.1 算法实现
- 一堆样本的每个特征量都对应一个均值和方差
- 计算样本每个特征的均值和标准差
- 利用高斯分布构建概率函数: p ( x ) = p ( x 1 ; μ 1 , σ 1 2 ) p ( x 2 ; μ 2 , σ 2 2 ) . . . p ( x n ; μ n , σ n 2 ) p(x)=p(x_1;\mu_1,\sigma^2_1)p(x_2;\mu_2,\sigma^2_2)...p(x_n;\mu_n,\sigma^2_n) p(x)=p(x1;μ1,σ12)p(x2;μ2,σ22)...p(xn;μn,σn2)
- 设定一个阈值 ε \varepsilon ε作为概率参考值,若新样本的特征计算出的P大于该值,则认为非异常,小于则认为是异常的
14.2 评估算法
- 选取大量正常样本训练P
- 少量正常样本和极少异常样本作为交叉验证集,尝试使用不同的 ε \varepsilon ε值使 F 1 F_1 F1值最大
- 另一部分的少量正常样本和极少异常样本作为测试集
- 可以通过变化特征如取对数,降幂把样本的特征分布改变为高斯型,也可以组合特征使异常得以凸显
14.3 异常检测算法与监督学习的不同使用范围
-
异常检测
针对少量正样本(y=1),用大量负样本(正常)学习p(x)值
-
监督学习
大量正样本(异常样本)可以用来更新参数
有大量的正样本和负样本也用监督学习
14.4 多元高斯分布
(14.1) p ( X ; μ , Σ ) = 1 ( 2 π ) n / 2 ∣ Σ ∣ 1 / 2 e x p ( − 1 2 ( X − μ ) T Σ − 1 ( X − μ ) ) p(X;\mu,\Sigma)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp(-\frac{1}{2}(X-\mu)^T\Sigma^{-1}(X-\mu))\tag{14.1} p(X;μ,Σ)=(2π)n/2∣Σ∣1/21exp(−21(X−μ)TΣ−1(X−μ))(14.1)
改变协方差矩阵和均值可以捕捉不同的分布
样本数量m需要大于特征数量n,一般 m ≥ 10 n m\ge10n m≥10n使用
15 推荐系统
通过已有的评价去推测未知的评价
15.1 建立推荐系统的方法
15.1.1 基于内容的推荐算法
因为假设已经有电影评价特征量 x x x,学习得到用户特征量 θ \theta θ
相当于多个参数向量的线性回归,去掉了样本总量m
估计用户的特征值 θ \theta θ
15.1.2 协同过滤
假设有部分用户特征量 θ \theta θ,学习得到未知的电影评价特征量 x x x,再反推用户特征量 θ \theta θ ,不断往复
估计电影的特征值 x x x
- 快速协同过滤:同时计算得到 θ \theta θ与 x x x的算法:结合两种代价函数
可计算用户j对电影i的评分预测
- 向量化实现协同过滤: X θ T X\theta^T XθT
- 推荐类似的电影:small ∣ ∣ x ( i ) − x ( j ) ∣ ∣ ||x^{(i)}-x^{(j)}|| ∣∣x(i)−x(j)∣∣
- 均值归一化:解决有一用户未给所有电影评分的问题(一列无取值)