隨機遊走是隨機過程。它們由數學空間中的許多步驟組成。最常見的隨機遊走從值 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
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
修改隨機遊走
這些隨機遊走被調整以顯示所需的行為。例如,新增對隨機遊走的最小值和最大值的限制來模擬容量利用率。
隨機遊走的行為透過改變其他初始條件進一步改變,例如,強加整體積極趨勢。正趨勢是透過調整機率閾值來實現的。透過增加正向步驟的機率,隨機遊走會產生正向趨勢。對於這個程式碼,它是透過降低閾值來實現的。
以這種方式設定隨機遊走可以更接近股票趨勢。如果總體趨勢是積極的還是消極的,則可以將詳細資訊納入合成數據中。
有幾個選項可以進一步調整隨機遊走。例如,在每一步都包含高斯噪聲或將步長增加到更大的值會導致不同的步行跨越更大的空間。但是,還有一些其他調整會導致非常不同的行為。
隨著時間的推移增加波動性是透過在每個步驟後增加少量步長來實現的。因此,隨著時間的推移,步長會慢慢變大。
平滑行走也可以透過修改步長來實現,但也可以透過在正步之後增加大小並在負步之後將大小減小一個小值來實現。
總結
隨機遊走是一個有趣的隨機過程。在很少的起始條件下,生成了許多不同的模式。因此,隨機遊走可以用作合成時間序列資料並針對您的特定問題例項進行調整。
作者:Zachary Warnes
喜歡就關注一下吧:
點個
在看
你最好看!