Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

用隨機遊動生成時間序列的合成數據

deephub 2021-09-15 14:43:42 阅读数:56 评论数:0 点赞数:0 收藏数:0

隨機遊走是隨機過程。它們由數學空間中的許多步驟組成。最常見的隨機遊走從值 0 開始,然後每一步都以相等的概率加或减 1。

隨機遊走可用於為不同的機器學習應用程序生成合成數據。例如當沒有可用信息或沒有實時數據可用時,具有隨機遊走的合成數據可以近似實際數據。

這篇文章利用一維隨機遊走為時間序列算法生成數據。

生成數據

在創建和測試時間序列模型時,以隨機數據為基准測試模型是有益的。隨機遊走可以模擬庫存、產能利用率甚至粒子運動的趨勢。

通過每一步概率的調整,行為被添加到隨機遊走中。此外,這些遊走被修改為具有不同的步長,以產生更大或更小的波動。

在 Pandas 中使用“date_range”函數快速生成時間序列數據。下面是一個示例,它為 2019 年每天生成一個具有一個隨機值的df。

 import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import random
DATE_START = '2019-01-01'
DATE_END = '2019-12-31'
dates = pd.date_range(DATE_START, DATE_END)
df = pd.DataFrame({
'date': dates,
'value': np.random.normal(0,1,dates.size)
})
df.set_index('date', inplace=True)
plt.plot(df['value'])
plt.ylabel('Value')
plt.xlabel('Date')
plt.title('Random Values')
plt.show()

隨機遊走

雖然此處的數據可用於時間序列模型,但看不到任何模式。由於實際數據包含與先前點的緊急模式關系,因此需要改進合成數據。隨機遊走是生成一些逼真行為的可行解决方案。在 Pandas 中創建隨機遊走需要遍曆df的每一行。步行中的每一步都取决於上一步。

下面是生成隨機遊走的代碼。第一個“previous_value”作為步行的起點。接下來,步長設置為 1。最後,“閾值”將正向或負向行走的概率設置為 50%。

此外,隨機遊走受到最小值和最大值的限制。對於許多數據集,例如股票價值,這些值都是嚴格的正數。

隨機遊走的圖是用‘matplotlib’生成的。

 def random_walk(
df, start_value=0, threshold=0.5,
step_size=1, min_value=-np.inf, max_value=np.inf
):
previous_value = start_value
for index, row in df.iterrows():
if previous_value < min_value:
previous_value = min_value
if previous_value > max_value:
previous_value = max_value
probability = random.random()
if probability >= threshold:
df.loc[index, 'value'] = previous_value + step_size
else:
df.loc[index, 'value'] = previous_value - step_size
previous_value = df.loc[index, 'value']
return df

修改隨機遊走

這些隨機遊走被調整以顯示所需的行為。例如,添加對隨機遊走的最小值和最大值的限制來模擬容量利用率。

隨機遊走的行為通過改變其他初始條件進一步改變,例如,强加整體積極趨勢。正趨勢是通過調整概率閾值來實現的。通過增加正向步驟的概率,隨機遊走會產生正向趨勢。對於這個代碼,它是通過降低閾值來實現的。

以這種方式設置隨機遊走可以更接近股票趨勢。如果總體趨勢是積極的還是消極的,則可以將詳細信息納入合成數據中。

有幾個選項可以進一步調整隨機遊走。例如,在每一步都包含高斯噪聲或將步長增加到更大的值會導致不同的步行跨越更大的空間。但是,還有一些其他調整會導致非常不同的行為。

  • 隨著時間的推移增加波動性是通過在每個步驟後增加少量步長來實現的。因此,隨著時間的推移,步長會慢慢變大。
  • 平滑行走也可以通過修改步長來實現,但也可以通過在正步之後增加大小並在負步之後將大小减小一個小值來實現。

總結

隨機遊走是一個有趣的隨機過程。在很少的起始條件下,生成了許多不同的模式。因此,隨機遊走可以用作合成時間序列數據並針對您的特定問題實例進行調整。

本文分享自微信公眾號 - DeepHub IMBA(deephub-imba) ,作者:P**nHub兄弟網站

原文出處及轉載信息見文內詳細說明,如有侵權,請聯系 yunjia_community@tencent.com 删除。

原始發錶時間: 2021-09-02

本文參與騰訊雲自媒體分享計劃,歡迎正在閱讀的你也加入,一起分享。

版权声明
本文为[deephub]所创,转载请带上原文链接,感谢

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;