version 2.0.0
author cc
update date 2021.5.11
- 修复了内部实现迭代器NPE报错
- 优化了迭代得到最终/融合值和最终/融合数组的算法逻辑
- 改善了异常数集合的返回结果封装模型
- 自适应对传传参识别和修改,对无法转换的抛异常
- 另外最终融合值最终融合数组采用迭代且测试数据量少的情况下完成的测试,不满足大数据要求,固不推荐
####function 功能实现
- 判断一组数据(原数据)是否存在异常值
- 能全自动找出一组数据中的异常值的集合(异常集)
- 能得到去除异常集得到融合后的结果集(融合集)
- 能得到去除异常集得到融合后的结果值(融合值)
- 新增:循环查找原数据算出最后的异常集(最终异常集)
- 原生java代码,使用jdk8+,绝无其他jar包
- 工具类,即拿即用,不需要太多类的记忆,看到异常值处理,想到cc,想到CCUtil即可。
- 对Integer,Double,以及String型的集合做了兼容性的封装,都可以是原数据。
下面同一室内同一地点同一时间点由温度传感器采集到一组温度数据,其中那个数据可能发生了异常?
根据肉眼和经验可以判断出,在温度数据中编号5的32℃是异常值,但湿度数据中很难判断是否存在异常值。 下面的任务就是一定的算法找出这个异常值,把32度剔除掉,把剩下的温度再处理。
下载和导入依赖后,使用工具类CCUtil即可。
以下都是提供自动化的算法,介绍几个常用的api。
- ocExist(Object...)方法:只要传入一个集合,就能检查出中间是否存在异常值,存在返回true,反之;
- ocSet(Object...)方法:只要传入一个集合,就能返回异常值的下标和值的map集合,如上面实例中返回是{4=32};
- fusionList(Object...)方法:只要传入集合,将异常值去除后的剩下元素的集合输出,如上面实例就返回去掉32度剩下7个温度的集合;
- fusionValue(Object...) 方法:传入一个集合,返回将异常值去除后剩下元素的平均值;
- finalSet(Object...)方法:最终不存在异常值得数组;
- finalFusionValue(Object...) 方法:迭代最后得到的融合值。
- 基于3σ准则改善的cc算法。
- 论文基础
简单来说,就是符合正太(高斯)分布的数据,我们都可以通过cc算法来实现大数据量的异常值剔除和融合。
在此文档中暂且只是大致方向上的概述和简单实现这个算法,中间代码,逻辑,数据量,优化等等还有许许多多的不足之处,比如:
1.未实现对象思想,应该就是全自动,返回一个结果封装好的对象。
2.对数据量的算法太少,没有大数据的支持,比如我这套中的源码,简单对数据量的多少自动实现了不同的敏感度(就是对3σ)的数字3进行放大或者缩小, 在目前来说,一组数据中,3<个是没有必要异常值查找的,38用1σ准则,811用2σ准则,>11用3σ准则。
3.代码上存在有逻辑不严谨的地方。
4.后面我会完善代码和编写文档,不会和错误的地方太多。
5.希望有大数据研究,和我一起来发展这个算法框架的欢迎一起开发vx 13195530002 ,许多不足的地方欢迎指正 [email protected]
- 感谢i(qq448276247)用户的热心指出错误
- 也感谢之前有个哥们,希望我能申请这个算法专利,在github上算是一片空白,我最近也在基于论文基础的上去尝试一下