有一组采样数据,横轴时间,绘制出来一张图,希望能标识出图中的尖峰,对“尖峰”没有量化定义,目前是两种,一是某一个时间点的激增,二是某一段时间的激增;从图上看就是突然某一个点比前后都高很多,或者是平滑处理后的包络图,某会有类似二次函数的突起。
这两种 尖峰能否使用现有的库,通过分析数据进行标注呢,确定出现尖峰的时间段即可
1
liprais 2021-03-11 14:23:58 +08:00
异常值检测呗
|
2
lixuda 2021-03-11 14:36:03 +08:00
sklearn 库看看,有个异常检查。
|
3
Wincer 2021-03-11 14:50:14 +08:00
mark 一下,楼主有方案了麻烦告知一下,我最近也有类似的需求。目前尝试了 PCA,但是效果不是很理想。
|
4
guyskk0x0 2021-03-11 14:59:39 +08:00 via Android
Facebook Prophet
|
5
learningman 2021-03-11 15:14:29 +08:00
你先用数学把“尖峰”定义好,然后翻译成代码就行了
|
6
no1xsyzy 2021-03-11 15:20:07 +08:00
话说传统上异常值检测有:在回归时,添加某一个值会使得 r 值突然降低。
|
7
imn1 2021-03-11 15:24:56 +08:00
第一个想到应用场合是证券的放量
我目前的做法是设定斜率临界点,前后两点拉直线的斜率,但不太满意 此帖我会回看 |
8
sdushn OP @learningman emm,其实就是这个尖峰的数学定义没有讨论出很好的定义
|
9
superrichman 2021-03-11 15:50:40 +08:00 via iPhone
我是通过计算 z-score 来找 outlier,有一定局限性
看看有其它好方法没 |
10
Macv1994 2021-03-11 16:23:47 +08:00 via Android
在上一家公司做过,我记得 numpy 还是 scipy 中有一个函数可以直接做尖峰检测
|
11
hasasiki 2021-03-11 16:31:30 +08:00
现有库不太清楚,不过可以试试直接找到所有峰值,然后再按自己需求筛选,找峰值的算法就很多了
|
12
Vectors 2021-03-11 17:21:24 +08:00
scipy 库,scipy.signal.find_peaks
https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.find_peaks.html |
13
yesterdaysun 2021-03-12 10:31:17 +08:00
之前用过 peakutils
|
14
sdushn OP @yesterdaysun 好用的,我目前也是采用了这个方案
|
15
necomancer 2021-03-14 20:40:58 +08:00
https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.find_peaks.html
一般这些算法都是基于小波变换,看看原理很简单的。 |