weixin_37809610 2021-12-01 02:08
浏览 70
已结题

KDD时间序列异常检测,使用matrix profile准确率只有

方法参考自https://blog.csdn.net/BulletTech2021/article/details/119080716 @BulletTech2021

使用与文中相同的 matrixprofile lib 计算异常数据位置

使用Fourier Transform计算周期,作为matrix profile计算过程中的window_size

准确率仅有50%, 达不到文中88%的准确率

计算周期函数如下:

def getWindowSize(timeseries, n=5, fmin=0.02):
    yf = abs(fft(timeseries))  # 取绝对值
    yfnormlize = yf / len(timeseries)  # 归一化处理
    yfhalf = yfnormlize[range(int(len(timeseries) / 2))]  # 由于对称性,只取一半区间
    yfhalf = yfhalf * 2   # y 归一化

    xf = np.arange(len(timeseries))  # 频率
    xhalf = xf[range(int(len(timeseries) / 2))]  # 取一半区间

    fwbest = yfhalf[signal.argrelextrema(yfhalf, np.greater)]
    xwbest = signal.argrelextrema(yfhalf, np.greater)

    xorder = np.argsort(-fwbest)
    xworder = list()
    xworder.append(xwbest[x] for x in xorder)
    fworder = list()
    fworder.append(fwbest[x] for x in xorder) 

    if len(fwbest) <= n:
        fwbest = fwbest[fwbest >= fmin].copy()
        x = len(timeseries)/xwbest[0][:len(fwbest)]
        y = fwbest
    else:
        fwbest = fwbest[fwbest >= fmin].copy()
        x = len(timeseries)/xwbest[0][:len(fwbest)]
        y = fwbest
    res_x = -1
    max_y = -1
    for i in range(len(x)):
        if y[i] > max_y:
            max_y = y[i]
            res_x = x[i]
    return int(res_x)
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月9日
    • 创建了问题 12月1日

    悬赏问题

    • ¥15 运筹学排序问题中的在线排序
    • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
    • ¥30 求一段fortran代码用IVF编译运行的结果
    • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
    • ¥15 C++ 头文件/宏冲突问题解决
    • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
    • ¥50 安卓adb backup备份子用户应用数据失败
    • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
    • ¥30 python代码,帮调试,帮帮忙吧
    • ¥15 #MATLAB仿真#车辆换道路径规划