多元高斯分布与一元高斯分布的关系
首先一维标准正态分布:
二维标准正态分布,就是两个独立的一维标准正态分布随机变量的联合分布:
把两个随机变量组合成一个随机向量:
则有:
然后从标准正态分布推广到一般正态分布,办法是通过一个线性变换:
注意前面的系数多了一个|A|(A的行列式)。
可以证明这个分布的均值为µ,协方差为:
记
那就有:
高维情形同理。
算法流程
有了前面的知识,我们可以得到,采用了高斯分布的异常检测算法流程如下:
- 选择一些足够反映异常样本的特征 。
- 对各个特征进行参数估计:
- 当新的样本x到来时,计算其概率p(x), 如果超出卡定范围,则认为样本x 是异常样本。
我们用斯坦福机器学习课程里面的例子来说明一下。
我们假定有两个特征,均服从高斯分布,并且通过极大似然估计我们得知其分布参数了:
由于一个参数则是二维的,两个参数就当然是三维的了,我们把这个三维图堪称热力图嘛(本来直观理解也是一样的嘛,概率越高的地方就越热,比如东京就是最热的地方,逃~),二维图你一根直线就可以卡范围了,三维下就是一个平面了(当然高纬度空间就是超平面咯!)就是下图中描红的位置,以下的区域都是异常样本!
我们从顶上往下看,即投影下来,可以看到这个红色圈就是上面的切割平面与三维体的相交部分,圈内就是正常样本,圈外就是异常样本。
数据集划分
划分为训练集、交叉验证集跟测试集。
算法评估
由于实际场景中异常样本是极少的,所以整个数据集是非常偏斜的,我们不能单纯的用预测准确率来评估算法优劣,而是:(参考链接在这)
- 真阳性、假阳性、真阴性、假阴性
- 查准率(Precision)与 召回率(Recall)
这里乍一看其实有点类似于逻辑回归,因为不就是二分类问题嘛!但是实际上不是的啊!
监督学习其实就是拟合啊!它要求正负样本数量大小一致。
有监督学习 | 异常检测 |
---|---|
数据分布均匀 | 数据非常偏斜,异常样本数目远小于正常样本数目 |
可以根据对正样本的拟合来知道正样本的形态,从而预测新来的样本是否是正样本 | 异常的类型不一,很难根据对现有的异常样本(即正样本)的拟合来判断出异常样本的形态 |
下面的表格则展示了二者的一些应用场景:
有监督学习 | 异常检测 |
---|---|
垃圾邮件检测 | 故障检测 |
天气预测(预测雨天、晴天、或是多云天气) | 某数据中心对于机器设备的监控 |
癌症的分类 | 制造业判断一个零部件是否异常 |
··· | ··· |
特征选择
因为我们建立模型的基础是假设特诊满足高斯分布,那么要是特征不符合高斯分布呢?
答案当然是整成高斯分布啊!
我们一开始拿到的特征的分布可能是这样的:
转换之前的特征 | 转换之后的特征 |
---|---|
我们可以通过对数操作或者其他操作将他转化为高斯分布,例如,上面的特征经对数操作后形成的分布就非常接近于高斯分布:
构建新特征
在参加上次乐信的数据挖掘比赛中,发现有些特征是可以组合起来构建新特怔的,比如借钱的额度是一个特征,借钱的时间是一个特征,利用这两个原始特征我们可以来计算借钱的频率,从侧面刻画这个客户的金融状况。
再比如我的芯片工作电流值是一个参数,电压也是一个参数,乘起来就是功耗参数了,这能刻画出IC是否出现工作状态变化了这一场景,这对异常的识别就更细致了。
多元高斯分布
异常检测算法无法解决的问题,还是现以一个例子来解释:
假设在数据中心监控机器的例子中,我们有如下的内存和CPU使用数据:
其中对于这两个维度的数据,都服从正态分布:
x1 | x2 |
---|---|
如果现在在我们的测试集中,有一个异常数据点出现在下图的位置中:
那么在这种情况下我们会发现,这一点对应的两个维度下的概率其实都不低,从p(x)的结果上,我们无法准确预测这个样本是否属于异常。产生这个问题的实际原因其实是这样的,从x1和x2这两个维度(注:这里是从两个纬度来看的,单单就某一维来看都是正常的,但是两维就是异常的,因为其实这两个变量之间是有一定的相关性的,你直接相乘处理进行判断的话相当于不去管相关性了,也就是业务的一些内在特征就把它给丢了)来看,我们的正常数据及时大多数集中分布在这样一个范围内:
但我们使用之前的异常检测算法,其实是以中心区域向外以正圆的形式扩散的。也就是说距离中心区域距离相等的点,对应的p(x)都是一样的,所以我们可能无法检测到这一个异常样本,因为它也处在一个p(x)比较大的范围内:
这里要这么理解:假如不认为两个特征之间有相关性的话,那么就是以(µ1,µ2)为中心,然后以σ1,σ2为半径画椭圆,因此画出来的极有可能就是粉红色的这些线,而我们真实的确实蓝色那个圈,因此直观上就可知道我们丢失了一些特征,从而拟合出现问题了;
所以,为了解决异常检测算法的这一问题,接下来我解释改良版的异常检测算法,要用到叫做多元高斯分布(多元正态分布)的东西。
定义
多元高斯分布模型被定义为:
其中, µ表示样本均值, ∑表示样本协方差矩阵。
多元高斯分布模型的热力图如下:
参数
- 改变 主对角线的数值可以进行不同方向的宽度拉伸:
- 改变 次对角线的数值可以旋转分布图像:
- 改变 µ 可以对分布图像进行位移:
因此方向上我们人工可以通过调整协方差矩阵来旋转、拉伸上图中粉色的边界圈,使之适应真实数据,方法上我们可以直接利用如下的多元高斯公式来进行计算(拟合)出真实数据对应的协方差矩阵。
具体算法操作步骤:
- 根据数据集拟合参数得到:
然后新的测试样本到来时,你直接输入公式:
最后,如果p(x)<ε时,就把它标记为是一个异常样本,反之,如果p(x)>=ε则不标记为异常样本。
所以,如果使用多元高斯分布来解决异常检测问题,你可能会得到这样一个高斯分布的概率模型:
所以,他可以正常的识别出之前用普通的异常检测算法无法正确检测的那个异常样本。
多元高斯分布模型与一般高斯分布模型的差异
原先的模型是这样的:p(x)=p(x1;µ1,σ21)×p(x2;µ2,σ22)×…×p(xn;µn,σ2n),事实上,可以证明我们原先的这种模型,是多元高斯模型的一种。
实际上,一般的高斯分布模型只是多元高斯分布模型的一个约束,它将多元高斯分布的等高线约束到了如下所示同轴分布(概率密度的等高线是沿着轴向的):
其实这个模型对应于一种多元高斯分布的特例,具体来说这个特例被定义为约束p(x)的分布(也就是多元高斯分布p(x)),使得它的概率密度函数的等高线是沿着轴向的。也就是要求协方差矩阵Σ的非对角线元素都为0。
所以你可以得到多元高斯分布p(x)
看起来是上图中这三种样式的。你会发现,在这3个例子中,它们的轴都是沿着x1,x2的轴的。
因此,在协方差矩阵Σ的非对角线元素都为0的情况下,这两者是相同的:
何时使用多元高斯模型?何时使用原始模型?
既然我们知道了原始的模型是多元高斯模型的一个特例,那么应该在什么时候用哪个模型呢?
事实情况是,原始模型比较常用,而多元高斯模型比较少用。
假设在你的样本中,x1和x2是线性相关的特征组合,下面是这两种算法在处理不正常的特征组合时的具体方式对比:
一元高斯模型 | 多元高斯模型 |
---|---|
捕捉到这两个特征,建立一个新的特征x3(比如x3=x1/x2),去尝试手工组合并改变这个新的特征变量,从而使得算法能很好的工作。 | 自动捕捉不同特征变量之间的相关性。 |
运算量小(更适用于特征变量个数n很大的情况) | 计算更复杂(Σ是n×n的矩阵,这里会涉及两个n×n的矩阵相乘的逻辑,计算量很大) |
即使训练样本数m很小的情况下,也能工作的很好 | 必须满足m>n,或者Σ不可逆(奇异矩阵)。这种情况下,还可以帮助你省去为了捕捉特征值组合而手动建立额外特征变量所花费的时间。 |
由此可以看出,基于多元高斯分布模型的异常检测应用十分有限。
异常情况的应对
当你在拟合多元高斯模型时,如果你发现协方差矩阵Σ是奇异的(不可逆的),一般只有两种情况:
- 第一种是它没有满足m>n的条件
- 第二种情况是,你有冗余特征变量 冗余特征变量的意思是出现了以下两种情况的任意一种:
- 出现了两个完全一样的特征变量(你可能不小心把同一个特征变量复制了两份)
- 如果你有x3=x4+x5,这里x3其实并没有包含额外的信息,相对于x4和x5来说,它就是冗余特征变量。
这是你调试算法时的一个小知识,可能很少会遇到,但是一旦你发现Σ不可逆,那么首先需要从这两个方面来考虑解决方案。
小结:多元高斯分布(Multivariate Gaussian Distribution)的形式很简单,就是一元高斯分布的在向量形式的推广。
也就是说:引入协方差是为了自动地去发掘特征之间的关系的,假如特征之间独立那么就是似然估计模型了嘛,把各特征概率乘起来就好了。
从上面这些图以及背景中可知,没引入协方差前,切割三维热力图就是平着切的,但是引入协方差后即可以对切割的超平面做一些拉伸旋转的操作,获得更好的切割边界,从而更好地进行分类,也就是找到了特怔之间的相关性嘛!。