您的位置:首页 > 其它

机器学习第九周(二)--构建异常检测系统

2017-09-29 16:44 316 查看
异常检测系统的开发与评估

异常检测 or 监督学习

如何选择特征

特征选择的建议

异常检测系统的开发与评估



前面内容中,我们已经提到了使用实数评估法的重要性。这样做的想法是,当你在用某个学习算法来开发一个具体的机器学习应用时,你常常需要做出很多决定,比如说选择用什么样的特征等等。而如果你找到某种评估算法的方式,比如直接返回一个数字,来告诉你算法的好坏,那么你做这些决定就显得更容易了。有了这样的数字,你就可以更好的确定某些特征是否需要在构建算法的时候考虑进来了,因为你可以通过对比算法在有这个特征和没这个特征的情况下,算法的具体表现,来决定是否要加入这个特征。

这对于异常检测系统的评价方式很重要。

为了做到能评价一个异常检测系统,我们先假定已有了一些带标签的数据。我们用y=0表示完全正常的样本,用y=1表示有异常的样本。

注意:我们要考虑的异常检测问题是一个非监督问题,使用的是无标签数据。但如果你有一些带标签的数据,能够指明哪些是异常样本,哪些是非异常样本,那么这就是我们要找的能够评价异常检测算法的标准方法。

还是以飞机引擎为例:



训练集为6000个正常的引擎。

交叉验证集为2000个正常引擎和10个异常引擎。

测试集为2000个正常引擎和10个异常引擎。



用训练样本去拟合模型 p(x) ,我们给定一个比较小的ϵ ,对于 p(x) <ϵ 情况下视为异常样本,分别在测试集和交叉验证集上验证。得出y=1或y=0。

我们可以把异常检测算法想象成是对交叉验证集和测试集中的y进行预测,这与监督学习有些类似,因为我们在对有标签的数据进行预测。所以我们可以通过对标签预测正确的次数来评价算法的好坏。

在测试集和验证集得出标签后,容易知道y=0是远远要多于y=1的,这就会出现标签倾斜的情况。

即考虑到偏斜类的情况,根据前面的内容,我们采用F1值来衡量算法的好坏。

还有一个问题,即ϵ 如何确定呢???

这里通过交叉验证集来说明,即尝试不同的ϵ ,然后选出一个使得F1值最大的ϵ ,这个ϵ 就是在交叉验证集上表现最好的,也就是我们要确定的那个。

异常检测 or 监督学习

上面异常检测的过程中,我们使用了带标签的数据,那么为什么不直接用监督学习的方法呢???



关键区别就是在异常检测算法中我们只有一小撮正样本,因此监督学习算法不能从这些样本中学到太多东西。

如何选择特征???

使用异常检测算法时,特征变量的选取尤为重要!!!

我们以直方图来可视化这些数据,并看展示效果是否符合高斯分布,但是并不是所有的特征通过直方图展示出来的效果都是服从高斯分布的,这就需要我们对这些特征进行转化了。(hist函数可用于画直方图)



往往采用的手段是对数据取对数或者开根号。当然上图所有操作都可以进行,目的只有一个:使图像更趋于高斯化

特征变量的获取

首先训练一个异常检测学习算法

再在一组交叉验证集上运行算法

找出异常样本

更换特征变量,看算法的效果是否更好

具体例子如下:



当我们只有一个特征时,区分异常样本显得很困难,我们再引入一个特征,这时再来区分异常点就显得容易许多了。

特征选择的建议

通常,我会选择那些既不是特别大也不是特别小的特征变量。以数据中心监测异常计算机为例



现在,假设有一种异常情况,就是流量消耗很小,但CPU负载却很高,因为可能是机器遇到了某个死循环导致CPU负载飙升,因此我们可以定义一个新的特征变量 x5 来更好的说明这一情况。当 x5 非常大时候,即CPU负载很大,但流量消耗正常,所以从 x5 的大小可以监测以上四个特征哪些异常。

总的来说就是通过构造新的特征来更好地监测出异常情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: