亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過異常值檢測方法在周期性或基于序列的數據上生成作為異常值的脈沖以進行實驗?

如何通過異常值檢測方法在周期性或基于序列的數據上生成作為異常值的脈沖以進行實驗?

青春有我 2023-04-18 14:38:31
我想用本文建議的知識管理方法對一些時間序列數據進行一些實驗。問題是我沒有訪問論文中的數據,但我有相似類型的數據,沒有異常值,我需要以脈沖(頂部和底部)的形式人為/手動生成一些異常值,以滿足要求如下圖所示,來自這篇論文的成果:在最壞的情況下,我想知道我是否可以在脈沖或 Sin 函數的周期性完美序列上生成類似的東西以應用于可用數據。到目前為止,我的實施僅限于這些post1、post2和Welch但為了生成正確的離群值,我正在考慮識別/檢測高和低狀態,然后經常添加離群值以進一步實驗離群值檢測器。我不確定將脈沖作為目標異常值的噪聲進行卷積是污染我訪問或不訪問的周期性數據的正確方法。到目前為止,我已經產生了一系列脈沖,但我不知道如何將其包含到一個周期性信號或數據中:import scipy.signal as signalimport matplotlib.pyplot as pltimp = signal.unit_impulse(200, [10,50,60])fig, ax = plt.subplots(1,1, figsize=(8,6))ax.set_xlabel('Cycles')plt.plot(imp)plt.title('Generating impulse outliers in desired cycles: 10, 50 & 60')plt.ylim((0.0, 1.4))plt.show()任何幫助將不勝感激,因為許多人都在研究異常和異常值檢測等主題。
查看完整描述

2 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

您可以使用例如numpyPython 模塊生成信號。你可以將你的脈沖添加到這個信號中(當然,如果尺寸是正確的)。我已經為您編寫了一個示例,我在其中生成了一個正弦信號,numpy并且在您的問題中添加了類似的脈沖signal.unit_impulse()。為了更好地理解,我在代碼中添加了一些注釋。


代碼:


import numpy as np

import matplotlib.pyplot as plt

import scipy.signal as signal


positive_impulses = signal.unit_impulse(200, [10, 50, 60])  # Generate positive impulses

negative_impulses = signal.unit_impulse(200, [80, 100, 150])*-1  # Generate negative impulses


# Generate the Sinus signal.

t = np.linspace(1, 200, 200)

x_sin_sig = np.sin(t / (2 * np.pi))

plt.subplot(4, 1, 1)

plt.plot(t, x_sin_sig)

plt.title("Signal")

plt.ylabel("Sin")



plt.subplot(4, 1, 2)

plt.plot(t, x_sin_sig + positive_impulses)  # Add the positive impulses to the original signal

plt.title("Signal with positive impulses")


plt.subplot(4, 1, 3)

plt.plot(t, x_sin_sig + negative_impulses)  # Add the negative impulses to the original signal

plt.title("Signal with negative impulses")


plt.subplot(4, 1, 4)

plt.plot(t, x_sin_sig + positive_impulses + negative_impulses)  # Add the both impulses to the original signal

plt.title("Signal with different impulses")


plt.tight_layout()

plt.show()

輸出:

http://img1.sycdn.imooc.com//643e3b2a0001e2a606590488.jpg

筆記:


為您的信號生成隨機脈沖可能更有效。你可以用模塊來做random。


import random


positive_impulses = signal.unit_impulse(200, random.sample(range(200), 5))  # Generate positive impulses

negative_impulses = signal.unit_impulse(200, random.sample(range(200), 5))*-1  # Generate negative impulses

將random.sample(range(200), 5)返回從 0 到 200 范圍內選擇的 5 個數字的列表,沒有重復。


一個隨機脈沖的例子:

http://img1.sycdn.imooc.com//643e3b3900014b2d06570498.jpg


查看完整回答
反對 回復 2023-04-18
?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

可以通過將輸出視為正常signal和一些噪聲的組合來合成時間序列中的異常。最常見的噪聲模型是加性噪聲,這意味著輸出很簡單out = signal + noise。在你的情況下,你會在添加之前將單位脈沖縮放到合適的幅度。在這個例子中,脈沖噪聲的振幅似乎在 15 左右。

PS:幅度,脈沖之間的距離和脈沖的寬度/形狀都應該是隨機變量。



查看完整回答
反對 回復 2023-04-18
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

謝謝你的邀請。關于如何產生周期異常值,我到現在還沒有這樣的經驗。但由于它是基于時間序列的,所以我認為我們可以從 Arima 概念開始。

  1. 如果你能找到pd,q參數,你就已經找到了數據答案。雖然有很高的計算成本。StackOverflow 中有一些關于如何找到p q d

  2. 處理時間序列,平穩是Arima模式中最重要的事情。您可以嘗試做一階微分或二階微分。如果數據集只有1個特征,異常值已經直接顯示出來了。

祝你好運。


查看完整回答
反對 回復 2023-04-18
  • 2 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號