基于机器学习的 ElasticSearch 异常值检测案例
机器学习在当前是非常火热的一种技术,随着框架越来越成熟,机器学习逐渐大众化,不需要你非常精通数学领域的知识,或者阅读各种晦涩难懂的论文。现在很多算法都已经封装为成熟的 API,因此机器学习不再是算法工程师才能够掌握的技术。
普通软件开发工程师也能够掌握如何去应用机器学习。当然如果是研究型的算法,还是需要专业人士来做。软件开发工程师只需要会用和了解原理,知道如何解决当前项目中所遇到的问题就行了,如果想精进现有的算法模型,那还是有很长的一段路需要走。
话不多说,本章节就利用 ES 提供的一个机器学习工具,来对指标进行异常检测,机器学习任何人都可以用,赶紧来体验一下它的神秘之处。
异常
异常检测,什么是异常?如何去检测?
首先异常就是一个对比的结果,可以跟其他人比,可以跟自己比,比如说我们的天气指标,当天不同城市温度的异常,这个就是自己跟其他人的比较异常,假如说夏天来了,大部分地区都是 30 度以上,但是东北地区竟然零下,那么东北这个数据就是个异常。加入北京地区一周都是 30 度的高温,最后一天却只有 10 度,那么这天的温度就是异常,这个自己跟自己比的一个过程。
仔细考虑一下,如果是让你自己去判断,是不是很容易判断出谁“出毛病”了,但是总不能让人一直观察这些数据吧,有没有一种方法能够自动找出这个异常数据呢?
规则
我们平时开发的逻辑代码,都是 if else,其中逻辑代码被称作基于规则来判断,满足一定的规则就归放到某一类。但是温度异常这个需求如何用规则来判断呢?
如果用“零度”以下来判断,如果零度以上,那么就是异常,但是冬天的时候,零下不是很正常吗?难道每天都是异常?这明显不行。
那么就再加条件,如果是“夏天但是零下”就是异常。东北夏天或者俄罗斯地区,经常会出现零度以下(假设),这明显也不行。那就得继续加条件。
看明白了没?无休止地增加规则才可能逼近正确的结果。明显这种需求,规则已经无法满足。
无监督学习——统计
规则无法满足的,我们可以通过统计来确定,统计异常的统计方法有很多,3 sigma 模型、高斯模型、聚类等。通过统计,我们能够统计出谁是离群的个体,从而找到这个异常。算法原理这里不做过多的讨论,我们来讨论一下这些算法为什么会有效?
以聚类分析为例。我们通过一种聚类的方式把具有相同性质的聚合到一起,结果发现”红色“的旁边有个”橘黄色“的表情,这就很容易判断出它是个异常数据。这种直接统计学习,这种没有样本告诉我们哪些是异常哪些不是异常,通过统计得出的结果的算法,我们称作无监督学习。与之对应需要一个学习,需要一个参考告诉我们什么是异常的学习方式,我们称作有监督学习。
作者:日常君
原文链接:https://www.jianshu.com/p/4a7a9cdd3848