通过 EXCEL 生成散点图,可以看到有 3 个离群点存在,百度了一下是可以使用 PYOD 库的方法,但苦于没有机器学习的基础,来 V 吧问问最好是用哪个算法模板,大概的思路是怎么处理的?图如链接所示: https://imgchr.com/i/m53WCt
1
habin OP 还有整个文件的列数据都或多或少存在离群值,如何高效的找出来?
|
2
ipwx 2019-08-27 14:46:37 +08:00 2
你这数据有周期规律么?比如按天看有规律。最好给个完整的数据图片。
我做过一篇论文,有关时间序列异常检测的。你可以把场景给我描述一下,我判断是不是适用。 论文: https://dl.acm.org/citation.cfm?id=3185996 代码: https://github.com/haowen-xu/donut |
3
dlsflh 2019-08-27 14:50:50 +08:00 via Android
每个点的值和他周围的若干个点的值差异过大就拿出来不可以吗?
|
4
DoctorCat 2019-08-27 16:11:52 +08:00
kNN 也行的
|
5
necomancer 2019-08-27 17:59:17 +08:00
|
6
necomancer 2019-08-27 18:38:31 +08:00 1
抱歉刚才没看图,你这种例子我觉得用移动平均可能更简单:
def moving_average(a, n=3): ....ret = np.cumsum(np.pad(a, n, 'edge'), dtype=float) ....ret[n:] = ret[n:] - ret[:-n] ....return ret[n:-n] / n am = moving_average(a, n=15) #离群点少的话 np.argwhere(np.abs(a-am)>3 * np.std(a-am)) 移动平均用的点个数、和几倍标准差比,根据具体情况调整一下。 |
7
habin OP @ipwx 没有周期规律,是飞机航班数据的记录,数据是一个时间段的,有一些参数是连续变量,例如经纬度,由于飞机设备记录的原因,可能会记录错误,出现离群值,例如图所示
|
8
winglight2016 2019-08-27 21:51:51 +08:00
你这个是 outlier 数据点,跟时间序列无关,线性回归就好了,用 sklearn 库,基本上看文档就能搞定
|
9
MinQ 2019-08-27 21:54:33 +08:00 via Android
做数据分析的飘过,这跟机器学习没啥关系。假设一段时间内的点大部分服从线性规律,只有少部分离群点。那么我觉得可以直接计算这些点的一个线性拟合,然后算出每个点到这条线的距离,排除距离大于某个阈值的点就行了
|
10
flyaway 2019-08-27 23:11:05 +08:00
数据是线性的话,直接用线性回顾就可以了。
|
11
ipwx 2019-08-28 01:54:02 +08:00 via Android 1
@habin 你这个场景可能适合用 卡尔曼滤波器 kalman filter。当年 NASA 科研人员为了处理航天器传感器的错误数据提出的。
|
12
abakane 2019-08-28 08:32:42 +08:00
数据是线性,线性回归就可以,3 倍方差之外得点基本都是异常点。
不是线性得话,考虑 knn,如果有空间分布得话,可以用空间聚类。 |
13
to 2019-08-28 12:58:58 +08:00 via Android
github Anomaly Detection
|
14
woaikaifa120 2019-09-29 16:02:23 +08:00
楼主去中航信了吗?请问联系方式是多少呢?有事需要咨询一下
|
15
habin OP @woaikaifa120 不好意思,不在中航信
|