如何截取完整的波形图,请教一下各位(关于机器学习、特征提取、时间序列) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AlwaysBee
24.8D
0.67D
V2EX    机器学习

如何截取完整的波形图,请教一下各位(关于机器学习、特征提取、时间序列)

  •  
  •   AlwaysBee 2024-07-24 10:26:12 +08:00 2536 次点击
    这是一个创建于 445 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在做机器学习相关的事情,但遇到了如下问题,导致训练出来的模型识别准确度一般

    数据波形图如上图所示,我目前是通过滑动窗口来进行截取的,我的预期是截取下来的数据是红色框框的这种(两边平缓、中间波动较大),我目前的截取条件是超过阈值就自动截取

    注:窗口大小是固定的

    但由于条件可能过于单一,也有一定的概率截取到黑色框框的这种类型的数据

    本人在数据分析和机器学习上,基本上是小白,问题描述可能也比较不专业,所以在此请教一下 V 友,这种时间序列的数据,应该如何进行特征提取

    29 条回复    2024-07-24 20:34:12 +08:00
    ipwx
        1
    ipwx  
       2024-07-24 10:47:24 +08:00
    不懂,红框和黑框有啥区别。

    你先想办法把你的场景讲清楚
    AlwaysBee
        2
    AlwaysBee  
    OP
       2024-07-24 10:50:44 +08:00
    @ipwx 红框部分截取下来的波形图,两边是比较平缓的,中间是波动较大的
    黑框截取的波形图,波动大的那部分,跑到末尾了,没有被完整截取
    ipwx
        3
    ipwx  
       2024-07-24 10:56:53 +08:00
    @AlwaysBee 哦,你是一个实时序列从左往右跑,然后检测是吧。。。这句话也是我看你上面这句话猜出来的,猜测你 “跑到末尾” 是这个意思。

    你的描述太不清晰了,我其实还是知之甚少,比如你的数据是什么、有什么性质。。。
    AlwaysBee
        4
    AlwaysBee  
    OP
       2024-07-24 10:58:10 +08:00
    ![]( https://s3.bmp.ovh/imgs/2024/07/24/1dafb7fdb9997217.png)

    https://s3.bmp.ovh/imgs/2024/07/24/1dafb7fdb9997217.png
    @ipwx

    帖子无法 append ,在这里补充一个图
    黑色框不是我想要的(由于达到阈值就开始截取了,但实际上是提前了),红色虚线框才是我想要截取的
    ipwx
        5
    ipwx  
       2024-07-24 11:19:19 +08:00
    @AlwaysBee 哦好像看懂你在说什么了。

    你加个卷积核吧,两边低中间高的卷积核。
    ipwx
        6
    ipwx  
       2024-07-24 11:22:13 +08:00
    另外你还是没有描述清楚。

    你这边有好几条序列,设为 S1[t] ... Sk[t] 这 k 条序列。

    所以你每一时刻 t 的波动大,这个波动到底指的是以下哪种定义:

    1. max(Si[t] - Sj[t]) 两两之差的最大值
    2. max(abs(Si[t] - Sj[t])) 两两之差的绝对值的最大值
    3. max(abs(Si[t])) 每条序列的绝对值的最大值

    到底是哪个啊?
    ----

    所以你真的还没描述清楚啊(心累
    AlwaysBee
        7
    AlwaysBee  
    OP
       2024-07-24 11:39:07 +08:00
    @ipwx 不好意思,因为在这方面确实不是专业的,所以描述也比较直白
    前面说的波动大,就是如图红框中间的波形图波动陡峭起伏大的意思

    X 轴是时间,然后 Y 轴有三个数据(体现在波形图就是有三条不同颜色的折线图),随着时间会变化,并且是随着时间不断产生数据

    我需要做的是,将红框内这样的数据提取出来,作为特征样本,但由于算法实现的问题,有一定概率截取到黑色框这样的样本,这样对最终的训练结果会有影响

    不知道这样描述是否理解了
    ipwx
        8
    ipwx  
       2024-07-24 11:52:41 +08:00
    @AlwaysBee 不理解。

    “前面说的波动大,就是如图红框中间的波形图波动陡峭起伏大的意思”

    你这描述,每个人都有每个人不同的看法啊。你还是得形式化啊

    ----
    我用 t 表示时间,y1 y2 y3 表示序列。

    如果认为 y1 在 t 时刻起伏大,是绝对值大?

    abs(y1[t]) 很大?

    什么叫大?比 80% 的其他点大?

    ----

    如果时刻 t 只有一条线的绝对值大,那算不算你 t 时刻这三条线大?

    还是需要三条线都起伏大?
    ----


    如果 t 时刻,三条线的绝对值都不算很大,但是加起来比其他时刻绝对值加起来大,那算不算?
    ----

    我感觉你这个根本不是机器学习的范畴,只是你自己没有把问题描述清楚。你写清楚了就写出来了。
    AlwaysBee
        9
    AlwaysBee  
    OP
       2024-07-24 12:19:14 +08:00
    @ipwx #8
    其实问题简化一下就是:如何截取到红色框框这这种类型的数据样本(两边平缓、中间起伏大)

    波动大小的判断就是这个问题的关键,怎么判断也是我想问的,我不知道如何通过数学的方式去判断(只能通过波形图判断这个波动大)

    特征数据提取之后,是需要把特征数据扔进去训练模型的,算是数据预处理的步骤
    ipwx
        10
    ipwx  
       2024-07-24 12:21:17 +08:00
    @AlwaysBee

    1 、中间大两边小,我上面说了啊,加卷积啊。
    2 、但是加什么卷积、卷积核多宽、然后三个曲线是加起来还是求平均还是求最大值,你得把问题描述清楚才能具体啊。
    ipwx
        11
    ipwx  
       2024-07-24 12:22:08 +08:00
    你要不给个 csv 数据,我给你 python 随便写一段。你就能体会为啥我上面要问你那么依托东西了。
    AlwaysBee
        12
    AlwaysBee  
    OP
       2024-07-24 12:40:57 +08:00
    https://docs.qq.com/sheet/DY1VPTWRXbXdoUXdx
    你看看能否打开,腾讯文档
    @ipwx #11
    SiWXie
        13
    SiWXie  
       2024-07-24 12:41:42 +08:00 via iPhone
    你这和建模没太大关系,是数据预处理的范涛。我建议是可以使用傅里叶变换,从时域信号变为频域信号,进行频域分析,抹点你不想要的波形后,再转换回来进行提取
    sillydaddy
        14
    sillydaddy  
       2024-07-24 13:21:38 +08:00 via Android
    感觉特征还是很明显的,应该就是 @ipwx 说的,用这个简单的卷积就可以提取特征。

    如果我来做的话,我会在滑动窗口区域,假设为 Ta ~ Tb ,采样 100 个点,然后中间的 40 个点的绝对值,都乘以 1.0 ,然后加总得到一个值。不停滑动窗口的位置,就会得到不同的值。你想要的那种红色框框的滑动窗口,最后得到的值肯定有一个特征,那就是它比它附近的滑动窗口的值都要大。为什么,因为只有波动最大的区域位于滑动窗口中间位置时,采样得到的 40 个点的绝对值加起来才最大。这个特征不会受到简单阈值的影响,因为它统计的是一个区域范围的特征。
    这个特征在你发的图里面是很明显的,之所以说 40 个点是相对于 100 个点的滑动窗口宽度,也是根据你的图形里面大概看出来了的,你可以自己确定采样窗口中间多少个点。
    w16311
        15
    w16311  
       2024-07-24 13:41:54 +08:00
    要不做个短时傅里叶变换(STFT)看看,红色部分应该都是高频?或者看一下失败的 case 调一下阈值多加一些条件。再或者考虑 window 内 std 的大小,如果是框大小一定。
    ipwx
        16
    ipwx  
       2024-07-24 14:08:03 +08:00
    看了一下你的数据,三个信号都不是白噪声,而是周期性信号。

    那可能确实得上小波分析之类的。

    ----

    楼主说的什么信号时延根本不是问题的关键。要让尖峰延迟若干个点用卷积求平均就行了
    ipwx
        18
    ipwx  
       2024-07-24 14:18:30 +08:00
    画了 200 个的片段,以及用卷积时延过的信号。

    楼主你真要把检出时间点放在窗口中间,检测卷积后的信号出现异常的时间(是右边界),然后框到左边就行了。

    但正确检测“异常”反而可能要上模型。
    ipwx
        19
    ipwx  
       2024-07-24 14:21:49 +08:00
    然后你这个周期性信号的异常检测我觉得和

    https://dl.acm.org/doi/abs/10.1145/3178876.3185996

    https://arxiv.org/abs/1802.03903

    这个挺配的。第二个链接不用大学网络就能下。(声明,我是作者)

    论文里面的例子

    https://pic.imge.cc/2024/07/24/66a09d6856838.jpg
    AlwaysBee
        20
    AlwaysBee  
    OP
       2024-07-24 14:46:28 +08:00
    @ipwx 谢谢大佬

    这份数据是为了提取特征而做了大量的、相同的动作产生的,波形就是该动作的体现,所以出现周期性

    现实操作中,动作的出现是没有周期性的规律的,并且会出现不同的动作,不同动作有不一样的波形,但都具有中间波动大、两侧平缓的特征
    AlwaysBee
        21
    AlwaysBee  
    OP
       2024-07-24 14:47:24 +08:00
    @sillydaddy #14
    请教一下,这里的乘以 1.0 是有什么作用吗?
    ipwx
        22
    ipwx  
       2024-07-24 15:16:00 +08:00   1
    @AlwaysBee 你现在总结的信息才是解决你问题的重要信息。

    按照你的说法,我感觉似乎用一个高斯核、一个均匀核进行卷积。如果两者相差太大,就可以认为出现了你要的检测信号。
    sillydaddy
        23
    sillydaddy  
       2024-07-24 15:20:18 +08:00 via Android   1
    @AlwaysBee 40 个点乘以 1.0 加总,其实隐含的就是两侧的 60 个点乘以 0.0 ,取 1.0 是对比 0.0 来说的。这里对每个点乘以一个加权数然后加总的过程就是 ipwx 提到的卷积。具体加权的数字怎么定义,怎么分布,就是所谓的卷积核。它是根据待提取的特征决定的。比如为了突出中间数值特别大的特征,也可以取中间 10 个点乘以 3.0 ,周围 30 个点乘以 1.0 ,再周围 60 个点乘以 0.0 。卷积核怎么定义,都是自己定的。

    在这个例子里,特征就是中间波动大(数值绝对值也大),两边波动小(数值绝对值也小)。假设想要提取一个满足中间值比较大,两侧值比较小这个特征的滑动窗口,那就对于连续的每个滑动窗口,都用滑动窗口的中间区域乘以一个大的数值,两侧区域乘以一个小的数值,加总后的值得到该滑动窗口对应的特征值。如果某个滑动窗口的这个特征值比周围滑动窗口的特征值都大,即极大值,那我们就找到它了。
    AlwaysBee
        24
    AlwaysBee  
    OP
       2024-07-24 15:23:51 +08:00
    谢谢两位,我这边先消化一下
    @sillydaddy @ipwx
    sillydaddy
        25
    sillydaddy  
       2024-07-24 15:27:39 +08:00 via Android
    如果你要提取波动大的特征,而不是数值绝对值大的特征,也可以类似比照着做,只是需要先计算一下相邻两个点的变化率,通过卷积,对一个窗口的变化率加权加总,来计算出一个特征值。

    甚至也可以将数值大小与变化率大小结合起来,计算出一个特征值。单看数据的特征了。

    我是看你发的图形的特征,用数值计算特征值好像就足够了。
    Sawyerhou
        26
    Sawyerhou  
       2024-07-24 17:28:32 +08:00 via Android
    直接要求最小值在窗口中间行不?
    SiWXie
        27
    SiWXie  
       2024-07-24 19:18:25 +08:00 via iPhone
    @Sawyerhou 这个是最简单的,先把所有数据用窗口扫一遍,判断极值是不是在窗口的中间,不再的先过滤掉。

    这样不仅能保证样本具有一致性操作也简单。op 需要做的就是设置最小值的阈值,超过这个阈值才能称作最小值。

    至于上面讨论的核函数方法,我们就算求出了特征值,也需要设置阈值做判断,还不如这个直接。
    Sawyerhou
        28
    Sawyerhou  
       2024-07-24 19:36:22 +08:00
    倒也不一定删掉,我就觉着把那个黑框挪一下,把最值放窗口中间,就跟红框差不多。
    TY233
        29
    TY233  
       2024-07-24 20:34:12 +08:00 via iPhone
    感觉都不用 ai ,opencv 就可以搞定,从左到右检测蓝线的值,低于阈值就以这个点为中心画框
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     925 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 18:47 PVG 02:47 LAX 11:47 JFK 14:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86