推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
habin
V2EX  ›  Python

没学过机器学习的东西, Python 怎么检测时间序列连续变量数据中离群值

  •  
  •   habin · Aug 27, 2019 · 5921 views
    This topic created in 2630 days ago, the information mentioned may be changed or developed.

    通过 EXCEL 生成散点图,可以看到有 3 个离群点存在,百度了一下是可以使用 PYOD 库的方法,但苦于没有机器学习的基础,来 V 吧问问最好是用哪个算法模板,大概的思路是怎么处理的?图如链接所示: https://imgchr.com/i/m53WCt

    15 replies  •  2019-10-08 08:38:08 +08:00
    habin
    habin
    OP
    Aug 27, 2019
    1
    还有整个文件的列数据都或多或少存在离群值,如何高效的找出来?
    ipwx
    ipwx
    Aug 27, 2019❤️2
    2
    你这数据有周期规律么?比如按天看有规律。最好给个完整的数据图片。

    我做过一篇论文,有关时间序列异常检测的。你可以把场景给我描述一下,我判断是不是适用。

    论文: https://dl.acm.org/citation.cfm?id=3185996
    代码: https://github.com/haowen-xu/donut
    dlsflh
    dlsflh
    Aug 27, 2019 via Android
    3
    每个点的值和他周围的若干个点的值差异过大就拿出来不可以吗?
    DoctorCat
    DoctorCat
    Aug 27, 2019
    4
    kNN 也行的
    necomancer
    necomancer
    Aug 27, 2019❤️1
    6
    抱歉刚才没看图,你这种例子我觉得用移动平均可能更简单:
    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))

    移动平均用的点个数、和几倍标准差比,根据具体情况调整一下。
    habin
    habin
    OP
    Aug 27, 2019
    7
    @ipwx 没有周期规律,是飞机航班数据的记录,数据是一个时间段的,有一些参数是连续变量,例如经纬度,由于飞机设备记录的原因,可能会记录错误,出现离群值,例如图所示
    winglight2016
    winglight2016
    Aug 27, 2019
    8
    你这个是 outlier 数据点,跟时间序列无关,线性回归就好了,用 sklearn 库,基本上看文档就能搞定
    MinQ
    MinQ
    Aug 27, 2019 via Android
    9
    做数据分析的飘过,这跟机器学习没啥关系。假设一段时间内的点大部分服从线性规律,只有少部分离群点。那么我觉得可以直接计算这些点的一个线性拟合,然后算出每个点到这条线的距离,排除距离大于某个阈值的点就行了
    flyaway
    flyaway
    Aug 27, 2019
    10
    数据是线性的话,直接用线性回顾就可以了。
    ipwx
    ipwx
    Aug 28, 2019 via Android❤️1
    11
    @habin 你这个场景可能适合用 卡尔曼滤波器 kalman filter。当年 NASA 科研人员为了处理航天器传感器的错误数据提出的。
    abakane
    abakane
    Aug 28, 2019
    12
    数据是线性,线性回归就可以,3 倍方差之外得点基本都是异常点。
    不是线性得话,考虑 knn,如果有空间分布得话,可以用空间聚类。
    to
    to
    Aug 28, 2019 via Android
    13
    github Anomaly Detection
    woaikaifa120
    woaikaifa120
    Sep 29, 2019
    14
    楼主去中航信了吗?请问联系方式是多少呢?有事需要咨询一下
    habin
    habin
    OP
    Oct 8, 2019
    15
    @woaikaifa120 不好意思,不在中航信
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1489 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 11:58 · PVG 19:58 · LAX 03:58 · JFK 06:58
    ♥ Do have faith in what you're doing.