0. 版权声明
- Machine learning 系列笔记来源于Andrew Ng 教授在 Coursera 网站上所授课程《Machine learning》1;
- 该系列笔记不以盈利为目的,仅用于个人学习、课后复习及交流讨论;
- 如有侵权,请与本人联系([email protected]),经核实后即刻删除;
- 转载请注明出处;
1. 异常检测原理
1.1 Symbol
-
p(x):随机变量 x 的概率分布;
p(x;μ,σ2):服从正态分布的随机变量 x 的概率分布,其均值为μ,方差为 σ2;
μi:随机变量 x 第 i 个特征的均值;
1.2 Gaussian(Normal) distribution
- 高斯分布:即正态分布,服从该分布的随机变量 x 均值为 μ,方差为 σ2,记为 x∼N(μ,σ2);
- N 表示 Normal distribution;
- 标准差 σ 决定高斯分布概率密度函数的宽度;
1.3 异常检测算法
- 密度估计问题:即求解 p(x);
- 设随机变量 x 有多个特征 x1,x2,…,xn;
-
p(x)=p(x1;μ1,σ12)p(x2;μ2,σ22)…p(xn;μn,σn2)=∏j=1np(xj;μj,σj2);
上式的前提为特征 x1,x2,…,xn 均独立,即使不满足该前提时,使用该式计算所得结果依然很好(语出 Andrew Ng 《Machine learning》 Week 9 视频:Algorithm 2:19 秒);
- 异常检测算法的步骤:
- Step 1:选取若干特征 x1,x2,…,xn;
- Step 2:拟合期望与方差;
-
μi=m1∑i=1mxj(i),向量化可得 μ=⎣⎢⎢⎢⎡μ1μ2⋮μn⎦⎥⎥⎥⎤=m1∑i=1mx(i);
-
σj2=m1∑i=1m(xj(i)−μj)2,向量化可得 σ2=m1∑i=1m(x(i)−μ)2;
- Step 3:对给定的新样本 x ,计算 p(x);
-
p(x)=∏j=1np(xj;μj,σj2)=∏j=1n2πσj1exp(−2σj2(xj−μj)2);
- 取阈值为 ϵ,若 p(x)<ϵ,则新样本 x 为异常点;
2. 构建异常检测系统
2.1 如何评价一个异常检测系统
- 异常检测系统的评价算法:
- Step 1:将带标签的样本划分为训练集、交叉验证集和测试集,样本划分时使假设训练集中无异常样本,交叉验证集和测试集中有异常样本;
- 样本划分案例:数据集中有 10000 个正常样本,20 个异常样本,则将其划分为训练集中有 6000 个正常样本,交叉验证集中有 2000 个正常样本和 10 个异常样本,测试集中有 2000 个正常样本和 10 个异常样本;
- 训练集中正常样本数量较多,有利于拟合高斯分布中的参数;
- Step 2:在训练集中拟合模型 p(x) 及参数 μ1,σ1,μ2,σ2,…,μn,σn;
- 一般而言,异常检测问题中,正常样本数量远多于异常样本数量,因此评价偏斜类问题时,使用 F1-score 作为判断依据;
- 在交叉验证集中,使用多个 ϵ,使 F1-score 最大的 ϵ 即为最合适的阈值,也使用该方式决定选择那些特征;
- Step 3:在测试集中评价算法;
2.2 异常检测与监督学习的差异
- Q:在异常检测系统中使用了带标签的样本,为什么不使用监督学习的方法解决该问题?
A:
- 异常检测方法的适用场景:
- 正常样本较多,异常样本较少;
- 异常的种类较多,难以学到所有的异常类型,处理此前从未见过的异常类型;(导致引擎故障的原因有很多,算法难以通过较少的样本,学到所有可能导致引擎故障的类型,也难以处理从未见过的新的异常类型)
- 监督学习方法的适用场景:
- 正常样本和异常样本均较多;
- 算法能够通过数量足够的样本学到故障类型,判断新样本时仅需将其与已有的故障类型对应即可;
2.3 调整样本分布
- Q:如果样本不服从 Gaussian distribution 如何处理?
A:
- 异常检测算法中使用高斯分布建模,画出样本的各个特征数据或用直方图表示,将各特征数据调整至接近高斯分布;
- 即使特征不服从高斯分布,算法通常也可以得到较好的结果;(语出 Andrew Ng 《Machine learning》 Week 9 视频:Choosing What Feature to Use 0:50 秒)
- e.g. 对特征 x1,可使用 log(x1),log(x1+c),cx1 等替换 x1,从而使特征分布接近高斯分布;
3. 多元高斯分布
3.1 多元高斯分布的概念
- 多元高斯分布不分别对特征 x1,x2,…,xn 建模,而是将 p(x) 作为一个整体建模,可以描述特征之间的相关性;
- 若将各个特征单独分析,则有可能导致误判,例如下图中的绿色样本点;
- 一元高斯分布会将某个同心圆上的所有样本点视为有相同的异常概率,而下图中红色样本点的实际分布并非如此;
- 多元高斯分布通过调整协方差矩阵中各元素的值,使等高线变成椭圆;
- 多元高斯分布的概率密度估计模型:p(x;μ,Σ)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ)),积分值为1;
-
μ∈Rn,Σ∈Rn×n,此处的 Σ 为协方差矩阵;
-
∣Σ∣ 表示求协方差矩阵行列式的值;
3.2 使用多元高斯分布做异常检测
- 多元高斯分布应用于异常检测的步骤:
- Step 1:拟合模型 p(x),即多元高斯分布的参数估计:
-
μ=m1∑i=1mx(i);
-
Σ=m1∑i=1m(x(i)−μ)(x(i)−μ)T;
- Step 2:对给定的新样本,计算多元高斯分布的概率密度函数:
-
p(x;μ,Σ)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ));
- 若 p(x)<ϵ 则表示新样本异常;
3.3 一元高斯分布与多元高斯分布
3.3.1 一元高斯分布与多元高斯分布之间的关系
- 一元高斯分布:p(x)=p(x1;μ1,σ12)p(x2;μ2,σ22)…p(xn;μn,σn2);
- 概率密度函数的等高线沿轴向(x1,x2 所在坐标轴)分布;
- 多元高斯分布:p(x;μ,Σ)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ));
- 概率密度函数的等高线可沿任意方向;
- 当 Σ=⎣⎢⎢⎡σ12σ22⋱σn2⎦⎥⎥⎤,即主对角线以外的元素为 0 时,多元高斯分布即等同于一元高斯分布;
3.3.2 一元高斯分布与多元高斯分布的适用场景
- 一元高斯分布:
- 适用于构建少量新的特征变量用于捕获异常;
- 该方法计算量较小,适用于特征数量较多的场景;
- 训练样本较少时也有较好效果;
- 多元高斯分布:
- 适用于自动捕获特征之间的相关性,避免手动构建新特征变量的繁琐;
- 该方法计算量较大,不适用于特征数量较多的场景;
- 必须满足 m>n 否则 Σ 不可逆;
- 即确保有足够的数据用于拟合参数;
- 经验法则:m>10n 时使用该方法较为合理;
4. 推荐系统
- 构造推荐系统的方法:
- 基于内容的推荐:已知样本特征,求参数;
- Collaborative filtering (协同过滤):也被称为 Low rank matrix factorization (低秩矩阵分解),样本特征、参数均未知,随机初始化后求解;
4.1 用公式描述推荐系统问题
- 在预测观众对电影的评分案例中用到的符号:
-
nu:用户数量;
-
nm:电影数量;
-
m(j):用户评价过的电影数量;
-
r(i,j):若用户 j 对电影 i 有评分记录,则该值为1,否则该值为0;
-
y(i,j):用户 j 对电影 i 的评分,评分值为1-5星,该变量仅在 r(i,j)=1 时有定义;
-
Y:由 y(i,j) 组成的 nm×nu 矩阵;
- 基于内容的推荐系统:
- 将观众对每个电影的评分作为回归问题,x(i) 表示第 i 部电影的特征向量(包含偏置项),θ(j) 表示第 j 位观众的参数向量,(θ(j))Tx(i) 即为第 j 位观众对第 i 部电影的评分预测值;
- 优化目标(即学得 θ(j) 的过程):
- 类似于线性回归问题有:θ(j)min2m(j)1∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+2m(j)λ∑k=1n(θk(j))2;
- 能使该代价函数最小的 θ(j) 即为所求;
- 上式中求和符号表示将满足 r(i,j)=1 的所有 i 值相加;
- 为简化表达式,将常数 m(j)1 去除,不影响优化结果;
- 对第 j 位观众有,J(θ(1),⋯,θ(nu))=θ(j)min21∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+2λ∑k=1n(θk(j))2;
- 对所有观众有,J(θ(1),⋯,θ(nu))=θ(1),⋯,θ(nu)min21∑j=1nu∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+2λ∑j=1nu∑k=1n(θk(j))2;
- 代价函数的梯度:
-
∂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);
- 梯度更新:
- 当 k=0 时,θk(j):=θk(j)−α∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))xk(i);
- 当 k̸=0 时,θk(j):=θk(j)−α(∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))xk(i)+λθk(j));
4.2 协同过滤
- Q:为什么使用协同过滤?
A:基于内容的推荐系统需要选取特征,但选取特征的过程较为困难,而协同过滤算法能够自动学习需要使用的特征;
- 协同过滤求需要使用的特征:
- 求某一部电影的特征 x(i):x(i)min21∑j:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+2λ∑k=1n(xk(i))2,使该代价函数最小的 x(i) 即为所求;
- 求所有电影的特征 x(1),⋯,x(nm):x(1),⋯,x(nm)min21∑i=1nm∑j:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+2λ∑i=1nm∑k=1n(xk(i))2;
- 协同过滤算法的优化目标:
- 将求解参数 θ(j) 和特征 x(i) 结合为一个代价函数表示:J(x(1),⋯,x(nm),θ(1),⋯,θ(nu))=21(i,j):r(i,j)=1∑((θ(j))Tx(i)−y(i,j))2+2λ∑i=1nm∑k=1n(xk(i))2+2λ∑j=1nu∑k=1n(θk(j))2;
- 此处 x,θ∈Rn,即均不含有偏置项,若算法需要一个恒为1的参数值,可通过学习得到,而不需要人为设置这样一个参数;
- Q:为什么在神经网络中需要偏置项?
A:神经网络中需要偏置项设置**值,而此处拟合所有参数不需要(phq);
- 梯度更新:
-
xk(i):=xk(i)−α(∑j:r(i,j)=1((θ(j))Tx(i)−y(i,j))θk(j)+λxk(i));
-
θk(j):=θk(j)−α(∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))xk(i)+λθk(j));
- 协同过滤算法:
- Step 1:将 x(1),⋯,x(nm),θ(1),⋯,θ(nu) 随机初始化为较小值;
- Step 2:使用梯度下降或高级优化算法求解 x(1),⋯,x(nm),θ(1),⋯,θ(nu) ;
- Step 3:用 θTx 预测新样本的标签值;
4.3 协同过滤算法的向量化实现
- 预测结果 =XΘT;
- 其中 X=⎣⎢⎢⎢⎡−−−(x(1))T(x(2))T⋮(x(nm))T−−−⎦⎥⎥⎥⎤,Θ=⎣⎢⎢⎢⎡−−−(θ(1))T(θ(2))T⋮(θ(nu))T−−−⎦⎥⎥⎥⎤;
n. Reference