天天看點

Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

聲明:本部落格涉及的内容僅供個人學習使用,友善後續複習總結,請勿用做商業用途

第一周知識點總結:

(1)幾種常見的時間序列

–趨勢序列(trend):朝一個特定方向變化

Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow import keras

def plot_series(time, series, format="-", start=0, end=None, label=None):
    plt.plot(time[start:end], series[start:end], format, label=label)
    plt.xlabel("Time")
    plt.ylabel("Value")
    if label:
        plt.legend(fontsize=14)
    plt.grid(True)

def trend(time, slope=0):
    return slope * time
time = np.arange(4 * 365 + 1)
baseline = 10
series = trend(time, 0.1)

plt.figure(figsize=(10, 6))
plot_series(time, series)
plt.show()
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

–季節序列:周期性變化

Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

相關代碼:

def seasonal_pattern(season_time):
    """Just an arbitrary pattern, you can change it if you wish"""
    return np.where(season_time < 0.4,
                    np.cos(season_time * 2 * np.pi),
                    1 / np.exp(3 * season_time))

def seasonality(time, period, amplitude=1, phase=0):
    """Repeats the same pattern at each period"""
    season_time = ((time + phase) % period) / period
    return amplitude * seasonal_pattern(season_time)
baseline = 10
amplitude = 40
series = seasonality(time, period=365, amplitude=amplitude)

plt.figure(figsize=(10, 6))
plot_series(time, series)
plt.show()
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
slope = 0.05
series = baseline + trend(time, slope) + seasonality(time, period=365, amplitude=amplitude)

plt.figure(figsize=(10, 6))
plot_series(time, series)
plt.show()
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

–噪聲序列:無法預測的白噪聲随機值

Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
def white_noise(time, noise_level=1, seed=None):
    rnd = np.random.RandomState(seed)
    return rnd.randn(len(time)) * noise_level
noise_level = 5
noise = white_noise(time, noise_level, seed=42)

plt.figure(figsize=(10, 6))
plot_series(time, noise)
plt.show()

           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

往時間序列裡加噪聲

series += noise

plt.figure(figsize=(10, 6))
plot_series(time, series)
plt.show()
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

–Autocorrelation: auto correlated time series. Namely it correlates with a delayed copy of itself often called a lag.

Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

–現實生活中的時間序列一般被認為是上面這四種時間序列的組合,即“Trend + Seasonality + Autocorrelation + Noise”

Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

下面的代碼就是講上面幾種時間序列進行組合

split_time = 1000
time_train = time[:split_time]
x_train = series[:split_time]
time_valid = time[split_time:]
x_valid = series[split_time:]

def autocorrelation(time, amplitude, seed=None):
    rnd = np.random.RandomState(seed)
    φ1 = 0.5
    φ2 = -0.1
    ar = rnd.randn(len(time) + 50)
    ar[:50] = 100
    for step in range(50, len(time) + 50):
        ar[step] += φ1 * ar[step - 50]
        ar[step] += φ2 * ar[step - 33]
    return ar[50:] * amplitude
def autocorrelation(time, amplitude, seed=None):
    rnd = np.random.RandomState(seed)
    φ = 0.8
    ar = rnd.randn(len(time) + 1)
    for step in range(1, len(time) + 1):
        ar[step] += φ * ar[step - 1]
    return ar[1:] * amplitude
series = autocorrelation(time, 10, seed=42)
plot_series(time[:200], series[:200])
plt.show()
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
series = autocorrelation(time, 10, seed=42) + trend(time, 2)
plot_series(time[:200], series[:200])
plt.show()
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
series = autocorrelation(time, 10, seed=42) + seasonality(time, period=50, amplitude=150) + trend(time, 2)
plot_series(time[:200], series[:200])
plt.show()
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
series = autocorrelation(time, 10, seed=42) + seasonality(time, period=50, amplitude=150) + trend(time, 2)
series2 = autocorrelation(time, 5, seed=42) + seasonality(time, period=50, amplitude=2) + trend(time, -1) + 550
series[200:] = series2[200:]
#series += noise(time, 30)
plot_series(time[:300], series[:300])
plt.show()
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
def impulses(time, num_impulses, amplitude=1, seed=None):
    rnd = np.random.RandomState(seed)
    impulse_indices = rnd.randint(len(time), size=10)
    series = np.zeros(len(time))
    for index in impulse_indices:
        series[index] += rnd.rand() * amplitude
    return series 

series = impulses(time, 10, seed=42)
plot_series(time, series)
plt.show()
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
def autocorrelation(source, φs):
    ar = source.copy()
    max_lag = len(φs)
    for step, value in enumerate(source):
        for lag, φ in φs.items():
            if step - lag > 0:
              ar[step] += φ * ar[step - lag]
    return ar
signal = impulses(time, 10, seed=42)
series = autocorrelation(signal, {1: 0.99})
plot_series(time, series)
plt.plot(time, signal, "k-")
plt.show()
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
signal = impulses(time, 10, seed=42)
series = autocorrelation(signal, {1: 0.70, 50: 0.2})
plot_series(time, series)
plt.plot(time, signal, "k-")
plt.show()
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
series_diff1 = series[1:] - series[:-1]
plot_series(time[1:], series_diff1)
           
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

—Non-Stationary Time Series:發生某個事件後,序列與過去的時間發生很大變化的時間序列,像股票走勢。

Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

對于這樣的序列,我們一般隻需要後面的時間資料進行訓練,以後前面的資料對我們後續的預測沒有多大作用

Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

–天真預測(naive forecast):取序列的最後一個值,并且假設後面的值與它相同,我們一般用天真預測值作為時間序列模型的基線(baseline)名額。

時間序列模型中的一些性能名額:mse和mae

Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

第一周測驗:第二題選D

Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)
Sequences, Time Series and Prediction in Tessorflow quizs on Coursera (一)

繼續閱讀