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

54 天前
 AlwaysBee

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

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

注:窗口大小是固定的

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

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

1716 次点击
所在节点    机器学习
29 条回复
ipwx
54 天前
不懂,红框和黑框有啥区别。

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

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

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

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

你加个卷积核吧,两边低中间高的卷积核。
ipwx
54 天前
另外你还是没有描述清楚。

你这边有好几条序列,设为 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
54 天前
@ipwx 不好意思,因为在这方面确实不是专业的,所以描述也比较直白
前面说的波动大,就是如图红框中间的波形图波动陡峭起伏大的意思

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

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

不知道这样描述是否理解了
ipwx
54 天前
@AlwaysBee 不理解。

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

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

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

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

abs(y1[t]) 很大?

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

----

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

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


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

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

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

特征数据提取之后,是需要把特征数据扔进去训练模型的,算是数据预处理的步骤
ipwx
54 天前
@AlwaysBee

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

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

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

----

楼主说的什么信号时延根本不是问题的关键。要让尖峰延迟若干个点用卷积求平均就行了
ipwx
54 天前
ipwx
54 天前
画了 200 个的片段,以及用卷积时延过的信号。

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

但正确检测“异常”反而可能要上模型。
ipwx
54 天前
然后你这个周期性信号的异常检测我觉得和

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
54 天前
@ipwx 谢谢大佬

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

现实操作中,动作的出现是没有周期性的规律的,并且会出现不同的动作,不同动作有不一样的波形,但都具有中间波动大、两侧平缓的特征

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1059641

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX