首页 > 其他分享 >时间序列分类方法:BOSSVS学习

时间序列分类方法:BOSSVS学习

时间:2024-04-10 19:59:01浏览次数:16  
标签:系数 self 分类 BOSSVS SAX 序列 傅里叶 SFA

目录

前言

BOSSVS(Bag-of-SFA Symbols in Vector Space)是一种将自然语言处理方法中TF-IDF应用到基于符号化傅里叶逼近(SFA)的词袋中的方法,是一种时间序列分类的方法。简单来说与之前讲的SAX-VSM有异曲同工之妙,不过这里的字符是通过离散傅里叶系数得到的。

一、理论部分

SFA(Symbolic Fourier Approximation)

SFA是一种将时间序列转换为傅里叶系数后,将一定数量傅里叶系数离散化后、映射到字符的算法,这和之前讲到的SAX很相似,只不过转换到了频域。
离散傅里叶逼近在上一篇文章讲到了,有兴趣可以看一下,内容很少也很好理解,当然,如果存在错误烦请指正,不胜感激!
SFA简单流程
上图简单描述了SFA的过程,通过将时间序列( 蓝色 \textcolor{blue}{蓝色} 蓝色)进行离散傅里叶变换得到傅里叶系数( 红色 \textcolor{red}{红色} 红色),再将其中低频成分或特征、主要成分取出后进行分箱,最后映射到字符上。
SFA提供了几种分箱方法:①每个箱的宽度相同;②每个箱内的数据点数相同;③正态分布分位数(和SAX一样)。
不同的分箱策略得到的结果差距还是挺大的,我个人习惯了SAX的模式,所以后续都是按照正态分布分位数进行的。

不知道有没有朋友和我有一样的疑问,有了SAX为什么还要SFA?而且SFA只取了部分傅里叶系数进行逼近,会不会效果不好。虽然现在我可能也不能给出一个很好的解释,但从学习过程中的一些思考来讲,个人认为,首先SFA是在频域实现的,这可以实现一定的降噪效果,如果是选择前n个系数,那这些系数表示的就是数据的趋势,如果选择的是最具特点的,那就是最具特点的(咳咳)。

二、实战

1.自编代码

这次自编代码是在python实现的,还是贴出一些主要的代码交流交流~

    def sfa(self, x, strategy='reduce'):
        """
        生成符号表达
        :param strategy: 是否删除重复字符串
        :param x:离散傅里叶逼近的长度为coeff的傅里叶系数
        :return: 符号表达
        """
        sfa_list = []
        indexes = []
        temp = ''
        n = len(x)
        for i in range(n-self.win_size+1):
            sub = x[i:i+self.win_size]
            new_sub = self.dft_trans(sub)
            for j in range(len(new_sub)):
                temp += self.alpha[np.sum(self.beta <= new_sub[j]) - 1]
            if strategy == 'reduce':
                if len(sfa_list) == 0 or not temp == sfa_list[-1]:
                    sfa_list.append(temp)
                    indexes.append(i)
            else:
                sfa_list.append(temp)
                indexes.append(i)
            temp = ''
        return sfa_list, indexes

这里的reduce就是表明只保留连续相同字符串的第一个,和SAX一样。转换部分和离散傅里叶逼近和之前的文章一样,就不再重复了。

2.Pyts库函数

from pyts.classification import BOSSVS
from pyts.approximation import SymbolicFourierApproximation, MultipleCoefficientBinning
from pyts.datasets import load_gunpoint,load_pig_central_venous_pressure,load_coffee
X_train, X_test, y_train, y_test = load_coffee(return_X_y=True)
clf = BOSSVS(window_size=100,word_size=10,n_bins=5,strategy='normal')
clf.fit(X_train, y_train)
score = clf.score(X_test,y_test)
print('accuracy:',score,e-s)

注意一下,strategy这里强调了一下用normal,我记得当时测试自编的效果总是和库函数对不上,最后发现是由于默认的分箱策略不是正态分位数,可以注意一下~

3.测试

这次的测试用一些不一样的,数据集采用凯斯西储大学的故障轴承公开数据集里转速为1793的部分,对比了一下SAX-VSM和BOSSVS的效果,这里滑窗宽度为30,单词长度5,单词表长度:10。
SAX-VSM:
SAX-VSM分类结果
BOSSVS:
BOSSVS分类结果
可以说都挺惨不忍睹的,而且没想到BOSSVS和SAX-VSM差了这么多,不过毕竟轴承故障特征比较复杂,虽然会表现出一些周期性的冲击、调幅什么的,但是还是不能简单的从时域的形状进行区分。而且不得不说,调参是个玄学的事情,窗口宽度、单词长度、单词表长度有一丝丝变化最后的结果都天差地别。

结尾碎碎念

最近在做一些异常检测的任务,虽然能把一些异常的成分弄得更加明显了,但是阈值调参真的好烦啊!!!原来想用 μ + n σ \mu+n\sigma μ+nσ这种方法,但是数据不遵循正态分布,效果很差,害。
学习了一下孤立森林,测试一下,用滑动均值将数据平滑、或者说得到趋势后在应用,效果还行,但是总会漏一些,还是需要多学习呀。

参考文献

Schäfer P. Bag-Of-SFA-symbols in vector space (BOSS VS)[J]. 2015.

标签:系数,self,分类,BOSSVS,SAX,序列,傅里叶,SFA
From: https://blog.csdn.net/weixin_48841772/article/details/137607274

相关文章

  • 时间序列分类方法:SAX-VSM学习
    时间序列分类方法:SAX-VSM学习前言一、理论部分1.SAX2.词袋(Bag-of-Word)3.词频-逆文档频率TF-IDF二、实际应用1.自编代码1.1Matlab部分代码:1.2Python部分代码:2.Pyts库函数总结参考文献前言SAX是一种通过将时间序列离散化后投影到字符的算法,简单来说,SAX利用分段......
  • 从0到1的二次反序列化
    前言简单介绍下二次反序列化,顾名思义,就是反序列化两次,其主要意义是绕过黑名单的限制或不出网利用,有些CTF题把一大堆关键类全都ban了,这就让人无从下手,二次反序列化就是为此而生的SignedObject原理看构造函数,接受一个可序列化的对象,再进行一次序列化,简直不要太perfect关注一下......
  • 小论文随便发,最新算法!变分模态分解+霜冰算法优化+LSTM时间序列预测(附matlab代码实现)
     专题推荐:论文推荐,代码分享,视角(点击即可跳转)所有链接建议使用电脑端打开,手机端打开较慢【代码推荐购买指南】电力系统运行优化与规划、时间序列预测、回归分类预测matlab代码公众号历史推文合集23.3.21(电力系统前沿视角/预测和优化方向matlab代码/电力系统优秀论文推荐......
  • 密码的定义与分类
    前言口令 ≠ 密码目录前言一、密码的定义二、密码的分类三、密码的发展(一)第一阶段:古典密码(古代—20世纪初)1.凯撒密码:2.巴斯达密码棒(二)第二阶段:近代密码,也称“机械密码”(20世纪初—1976年)  典型代表:恩尼格玛密码机Enigma(三)第三阶段:现代密码,(1949年......
  • 漏洞分类与实例解析:一场深入安全领域的探索之旅
    漏洞分类与实例解析:一场深入安全领域的探索之旅引言在网络安全的世界里,漏洞无处不在,犹如悬挂在信息空间之上的达摩克利斯之剑。正确识别并理解各类漏洞的特性和分类,是做好安全防护工作的基石。本文将深入探讨几种常见的漏洞类型——远程代码执行(RemoteCodeExecution,RC......
  • 【leetcode面试经典150题】26.判断子序列(C++)
    【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C++语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致)【题目描述】给定字符串 s 和 t ......
  • 516. 最长回文子序列
    题目链接:本题考察区间\(dp\)。设\(f[i][j]\)表示子串\(i\simj\)中的最长回文子序列的长度。思考状态转移方程。因为是判断回文的问题,考虑首尾元素是否相同。若首尾元素相同,则考虑去掉首尾元素之后子串的最长回文子序列的长度+2(首、尾元素各一个)反之若首尾元素不相同......
  • 被3整除的子序列
    题目描述给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除答案对1e9+7取模输入描述输入一个字符串,由数字构成,长度小于等于50输出描述输出一个整数代码实现#include<iostream>#include<string>usingnamespacestd;//这里利用了两个性质//1.添加下......
  • 基于GA优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真
    1.算法运行效果图预览ga优化前:     ga优化后:    2.算法运行软件版本matlab2022a  3.算法理论概述      时间序列预测是许多领域中的核心问题,如金融市场分析、气候预测、交通流量预测等。近年来,深度学习在时间序列分析上取得了显著的成果,尤......
  • 记一次php反序列化漏洞中的POPchain和POC构造实战
    来自于橙子科技反序列化靶场源代码如下:<?php//flagisinflag.phphighlight_file(__FILE__);error_reporting(0);classModifier{private$var;publicfunctionappend($value){include($value);echo$flag;}publicfunction......