应用高斯分布来解决异常检测问题(一)

(原创文章,转载请注明出处!)

异常检测的样本数据,可能有标签,但通常正常状况的样本很多,异常状况的样本很少,并且出异常的原因通常也不尽相同。所以,可以只针对正常状况的样本建模。

而如果收集到一堆的数据没有标签,则可以对所有的样本数据用一个模型建模,因为通常数据中异常状况的样本很少,对最终模型的影响很小。

通常样本数据是多维的,所在使用高斯分布来建模的时候,可以分别对每一维使用一个一元高斯分,或者是对多维使用使用一个多元高斯分布来描述正常状况的样本数据。

这样得到高斯分布模型对正常状况的样本计算得到的概率值就会比较大,对异常状况的样本计算得到的概率值就会比较小。

可以设定一个阈值,对一个新样本,使用训练得到的多元高斯分布模型计算概率值,如果得到的概率值比阈值小,就认为它是一个异常情况。

一、多个一元高斯分布模型

假设样本数据是三维。第一维的分布函数:f(x1112) = {1 / [(2π)1/2σ1]} * exp{-(x-μ1)2/(2σ12)}

                             第二维的分布函数:f(x2222) = {1 / [(2π)1/2σ2]} * exp{-(x-μ2)2/(2σ22)}

                             第三维的分布函数:f(x3332) = {1 / [(2π)1/2σ3]} * exp{-(x-μ3)2/(2σ32)}

它们的联合分布函数:f(x1,x2,x3112222332) = f(x1112) * f(x2222) * f(x3332)    (假设三个维度独立)

目标就是要估计出三个维度的分布函数中的参数:μ112222332

通过大数定律,一元高斯分布的总体的期望μ的估计值是样本均值,总体的方差σ2的估计值是样本方差,即:

μ1 = (1/m)  * [∑i=1m(x1i)]  ,  μ2 = (1/m)  * [∑i=1m(x2i)]  ,  μ3 = (1/m)  * [∑i=1m(x3i)]

σ12 = [1/(m-1)]  * [∑i=1m(x1i1)2]  , σ22 = [1/(m-1)]  * [∑i=1m(x2i2)2]  , σ32 = [1/(m-1)]  * [∑i=1m(x3i3)2]  

这样就通过训练计算得到了模型的参数,对新样本,即可通过f(x1,x2,x3112222332)计算得到它的概率,

通过与阈值比较即可判断新样本是否异常。

二、一个多元高斯分布模型

在上面的模型中,假设三个维度特征是独立的,这在很多情况下不符合实际。可以使用多元高斯分布来克服这个问题。

在多元高斯分布中,每个维度上的随机变量也服从高斯分布,各维度之间的关系通过协方差矩阵来描述。

所以,使用多元高斯分布来描述样本数据是,目标就是估计出多元高斯分布密度函数的期望向量和协方差矩阵

还是假设样本数据是三维的,对期望向量的估计如下:

μ = (1/m)  * [∑i=1m(xi)]    // xi是三维列向量

C = [1/(m)]  * [∑i=1m(xi-μ)(xi-μ)T]    // x, μ是三维列向量

      // 假设 m =3, 即有三个样本

   = [1/3]  * { (x1-μ)(x1-μ)T + (x2-μ)(x2-μ)T + (x3-μ)(x3-μ)T}

   = [1/3]  * { 

                      +

                      +   }

 同过以上公式及可计算出模型的参数。

 可以看出,以上对多元高斯分布模型的应用,有点类似GDA模型,但不同与GDA,在异常检测中,只对一类数据进行了建模,

即:只需要计算一个高斯分布的参数,且没有关于label的0-1分布。

三、样本数据

上述两个模型都使用了高斯分布来建模,如果样本数据的分布不是高斯分布,那么使用模型来进行异常检测的效果就会不佳。

可以先使用柱状图将样本的数据的各维都plot出来,看柱状图的整体形状是否与一元高斯分布的钟型图相似,如果形状差别比较大,说明样本数据不是高斯分布。

可以通过对原始的数据计算log、sqrt等方法,将柱状图的整体形状往一元高斯分布的钟型图形状调整。

另外,模型一没有考虑特征间的相关性,所以有时候可能需要使用已有特征的组合,构造新的特征,以描述原始特征间的关系。

 

转载于:https://www.cnblogs.com/activeshj/p/3954213.html

FFmpeg是一款功能强大的开源多媒体处理工具,广泛应用于视频和音频的编码、解码、转换以及流媒体处理。然而,由于历史原因和标准限制,原生的FFmpeg并不支持将H.265(高效视频编码)格式的视频流封装到FLV(Flash Video)容器中。FLV是一种常见的网络流媒体传输格式,但其最初设计时并未考虑现代高效的H.265编码标准。因此,当尝试将H.265编码的视频与FLV容器结合时,会出现“Video codec hevc not compatible with flv”的错误提示,表明FFmpeg无法识别这种组合。 为了解决这一问题,开发者通常需要对FFmpeg的源代码进行修改和扩展。一个名为“用于解决ffmpeg不支持flv+h265需要修改的文件.zip”的压缩包中包含了一些源代码文件,这些文件旨在扩展FFmpeg的功能,使其能够处理FLV容器中的H.265编码内容。压缩包中的三个关键文件分别是“flvdec.c”“flvenc.c”和“flv.h”,它们分别对应FLV的解码器、编码器和头文件。 flvdec.c:这是FFmpeg的FLV解码器源代码,经过修改后可能支持读取和解析包含H.265数据的FLV流。解码器的作用是从FLV容器中提取视频数据,并将其转换为可处理的原始像素格式。 flvenc.c:这个文件包含FLV编码器的源代码,经过调整后可能允许将H.265编码的视频流封装到FLV容器中。编码器负责将原始视频数据编码为H.265格式,并将其打包到FLV文件中。 flv.h:这是一个头文件,定义了FLV格式相关的常量、结构体和函数原型。修改该文件可能涉及添加或更新与H.265支持相关的定义和接口。 要应用这些修改,开发者需要重新编译FFmpeg源代码,并将修改后的版本替换原有的FFmpeg安装。这样,用户就可以使用定制版的FFmpeg来处理FLV+H.265的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值