十大时间序列模型总结(非常详细),零基础入门到精通,看这一篇就够了

文章目录

前言1. 自回归移动平均模型(ARMA)原理核心公式优缺点适用场景核心案例代码

2. 自回归积分滑动平均模型(ARIMA)原理核心公式优缺点适用场景核心案例代码

3. 季节性自回归积分滑动平均模型(SARIMA)原理核心公式优缺点适用场景核心案例代码

4. 向量自回归模型(VAR)原理核心公式优缺点适用场景核心案例代码

5. 广义自回归条件异方差模型(GARCH)原理核心公式优缺点适用场景核心案例代码

6. Prophet原理核心公式优缺点适用场景核心案例代码

7. 长短期记忆网络(LSTM)原理核心公式优缺点适用场景核心案例代码

8. 门控循环单元(GRU)原理核心公式优缺点适用场景核心案例代码

9. 贝叶斯结构时间序列模型(BSTS)原理核心公式优缺点适用场景核心案例代码

10. 序列到序列模型(Seq2Seq)原理核心公式优缺点适用场景核心案例代码

零基础入门AI大模型1.学习路线图2.视频教程3.技术文档和电子书4.LLM面试题和面经合集5.免费获取

前言

时间序列预测模型非常非常的重要,可以帮助企业和组织优化决策和资源配置。通过分析历史数据,这些模型揭示了潜在的模式和季节性变化,从而提供了数据驱动的预测。有效的时间序列预测还能够提高供应链管理、市场策略和风险控制的精确性。

为此,咱们今儿和大家聊的十种最常见的时间序列模型有:

自回归移动平均模型(ARMA)

自回归积分滑动平均模型(ARIMA)

季节性自回归积分滑动平均模型(SARIMA)

向量自回归模型(VAR)

广义自回归条件异方差模型(GARCH)

Prophet

长短期记忆网络(LSTM)

门控循环单元(GRU)

贝叶斯结构时间序列模型(BSTS)

序列到序列模型(Seq2Seq)

咱们下面详细的聊聊这些方法,大家一定会有一个完整的认识。

1. 自回归移动平均模型(ARMA)

原理

ARMA 模型是时间序列分析中的经典模型,结合了自回归 (AR) 和移动平均 (MA) 模型。AR 部分表示时间序列当前值与其过去几个时刻值的线性关系,而 MA 部分表示时间序列当前值与过去几个时刻的误差项的线性组合。

自回归 (AR) 模型: 当前时刻的值是前几时刻值的线性组合。

移动平均 (MA) 模型: 当前时刻的值是前几时刻的预测误差的线性组合。

核心公式

ARMA 模型结合了 AR 和 MA 模型,假设时间序列数据为 :

:时间序列的当前值

:AR 部分的滞后阶数

:MA 部分的滞后阶数

:AR 模型中的系数

:MA 模型中的系数

:误差项(通常假设为白噪声)

推导:

对于 AR§ 模型:

对于 MA(q) 模型:

将两者结合得到 ARMA(p,q) 模型。

优缺点

优点:

适用于短期预测。

模型相对简单,易于理解和实现。

对平稳时间序列建模效果较好。

缺点:

需要序列是平稳的,不适用于非平稳时间序列。

难以捕捉序列中的季节性和趋势性变化。

适用场景

ARMA 模型通常用于平稳时间序列的建模和预测,如股票价格、经济指标、气象数据的短期预测等。

核心案例代码

我们使用 ARMA 模型预测股票市场数据。

import numpy as np import pandas as pd import matplotlib.pyplot as plt from statsmodels.tsa.arima.model import ARIMA # 生成示例数据:股票价格的时间序列 np.random.seed(42) dates = pd.date_range('2024-01-01', periods=100) data = np.cumsum(np.random.randn(100)) + 100 # 随机漫步序列 # 创建DataFrame df = pd.DataFrame(data, index=dates, columns=['Stock Price']) # 拟合ARMA模型 (p=2, q=2) model = ARIMA(df['Stock Price'], order=(2, 0, 2)) arma_result = model.fit() # 预测未来20个时间点 forecast = arma_result.get_forecast(steps=20) forecast_index = pd.date_range(df.index[-1], periods=21, freq='D')[1:] forecast_values = forecast.predicted_mean # 可视化 plt.figure(figsize=(12, 6)) plt.plot(df.index, df['Stock Price'], label='Observed', color='blue') plt.plot(forecast_index, forecast_values, label='Forecast', color='red', linestyle='--') plt.fill_between(forecast_index, forecast.conf_int().iloc[:, 0], forecast.conf_int().iloc[:, 1], color='pink', alpha=0.3) plt.title('ARMA Model Forecast of Stock Price') plt.xlabel('Date') plt.ylabel('Stock Price') plt.legend() plt.grid(True) plt.show()

整个代码生成一个随机漫步的股票价格序列,使用 ARMA 模型进行拟合并预测未来 20 天的股票价格。图中展示了实际的时间序列数据(蓝色)以及预测的未来值(红色虚线),同时预测区间的置信区间以粉色阴影表示。

2. 自回归积分滑动平均模型(ARIMA)

原理

ARIMA 模型是 ARMA 模型的扩展,适用于非平稳时间序列。ARIMA 模型通过差分操作使非平稳时间序列转化为平稳时间序列,再对平稳时间序列进行 ARMA 模型拟合。

ARIMA 模型的三个主要参数分别是:

p:自回归项数(AR)

d:差分次数(I)

q:移动平均项数(MA)

其中,差分次数 是用来消除时间序列中的趋势成分,使其成为平稳序列。

核心公式

ARIMA 模型由三个部分组成:自回归 (AR)、差分 (I)、移动平均 (MA)。假设时间序列为 ,经过 次差分后的序列为 ,则 ARIMA 模型可以表示为:

其中:

$ y’t = y_t - y{t-1} $ 是经过一次差分后的序列。

、、 是模型的三个参数。

推导:

差分操作:

对原始时间序列 进行 次差分操作,得到平稳序列 :

多次差分的情况为:

其中 是滞后算子。

应用 ARMA 模型:

对差分后的序列应用 ARMA 模型。

优缺点

优点:

适用于处理具有趋势性或非平稳性的时间序列。

对多种类型的时间序列都具有较强的适用性。

缺点:

模型的选择(尤其是差分次数 )比较复杂,可能需要多次试验。

对于存在季节性成分的时间序列,ARIMA 可能不足以捕捉其特征。

适用场景

ARIMA 模型广泛用于经济、金融等领域的时间序列预测,如 GDP、通货膨胀率、失业率、股票价格等。特别适合处理有趋势但无明显季节性的时间序列。

核心案例代码

我们将使用 ARIMA 模型预测一个包含趋势的时间序列数据。

import numpy as np import pandas as pd import matplotlib.pyplot as plt from statsmodels.tsa.arima.model import ARIMA # 生成示例数据:带有趋势的时间序列 np.random.seed(42) dates = pd.date_range('2024-01-01', periods=200) trend = np.linspace(10, 30, 200) # 线性趋势 data = trend + np.random.randn(200) * 2 # 叠加噪声 # 创建DataFrame df = pd.DataFrame(data, index=dates, columns=['Value']) # 拟合ARIMA模型 (p=2, d=1, q=2) model = ARIMA(df['Value'], order=(2, 1, 2)) arima_result = model.fit() # 预测未来30个时间点 forecast = arima_result.get_forecast(steps=30) forecast_index = pd.date_range(df.index[-1], periods=31, freq='D')[1:] forecast_values = forecast.predicted_mean # 可视化 plt.figure(figsize=(12, 6)) plt.plot(df.index, df['Value'], label='Observed', color='blue') plt.plot(forecast_index, forecast_values, label='Forecast', color='green', linestyle='--') plt.fill_between(forecast_index, forecast.conf_int().iloc[:, 0], forecast.conf_int().iloc[:, 1], color='lightgreen', alpha=0.3) plt.title('ARIMA Model Forecast') plt.xlabel('Date') plt.ylabel('Value') plt.legend() plt.grid(True) plt.show()

使用 ARIMA 模型进行拟合和预测。预测结果用绿色虚线表示,预测的置信区间用浅绿色阴影表示。图中展示了过去的观测值(蓝色)和未来 30 天的预测值,展示了 ARIMA 模型对趋势的预测能力。

3. 季节性自回归积分滑动平均模型(SARIMA)

原理

SARIMA 模型是 ARIMA 模型的扩展,用于处理具有季节性成分的时间序列。SARIMA 模型引入了季节性成分,通过增加季节性自回归(SAR)、季节性差分(I)和季节性移动平均(SMA)项来建模。

核心公式

SARIMA 模型的公式如下:

其中:

和 分别是季节性自回归和季节性移动平均项的阶数。

是季节性周期(例如,12 个月为一年)。

和 是季节性自回归和季节性移动平均项的系数。

推导:

季节性差分:

季节性 ARMA 模型:

将季节性 AR 和 MA 组件加入 ARMA 模型。

优缺点

优点:

适用于处理具有明显季节性成分的时间序列。

可以同时建模季节性和非季节性成分。

缺点:

模型复杂度高,参数较多,调整较为困难。

需要确定季节性周期。

适用场景

SARIMA 模型适用于具有季节性波动的时间序列数据,如月度销售数据、季节性气象数据等。

核心案例代码

import numpy as np import pandas as pd import matplotlib.pyplot as plt from statsmodels.tsa.statespace.sarimax import SARIMAX # 生成示例数据:季节性时间序列 np.random.seed(42) dates = pd.date_range('2024-01-01', periods=120, freq='M') seasonal_component = 10 + 10 * np.sin(np.linspace(0, 3 * np.pi, 120)) data = seasonal_component + np.random.randn(120) * 2 # 叠加噪声 # 创建DataFrame df = pd.DataFrame(data, index=dates, columns=['Value']) # 拟合SARIMA模型 (p=1, d=1, q=1, P=1, D=1, Q=1, s=12) model = SARIMAX(df['Value'], order=(1, 1, 1), seasonal_order=(1, 1, 1, 12)) sarima_result = model.fit() # 预测未来12个月 forecast = sarima_result.get_forecast(steps=12) forecast_index = pd.date_range(df.index[-1] + pd.DateOffset(months=1), periods=12, freq='M') forecast_values = forecast.predicted_mean # 可视化 plt.figure(figsize=(12, 6)) plt.plot(df.index, df['Value'], label='Observed', color='blue') plt.plot(forecast_index, forecast_values, label='Forecast', color='orange', linestyle='--') plt.fill_between(forecast_index, forecast.conf_int().iloc[:, 0], forecast.conf_int().iloc[:, 1], color='#FFA07A', alpha=0.3) # 使用有效的颜色代码 plt.title('SARIMA Model Forecast') plt.xlabel('Date') plt.ylabel('Value') plt.legend() plt.grid(True) plt.show()

图中展示了一个具有季节性波动的时间序列数据(蓝色)和未来 12 个月的预测值(橙色虚线)。预测区间的置信区间用浅橙色阴影表示。SARIMA 模型能够有效捕捉时间序列中的季节性模式。

4. 向量自回归模型(VAR)

原理

VAR 模型用于建模多个时间序列变量之间的相互依赖关系。与 ARMA 模型只对单一时间序列进行建模不同,VAR 模型能够处理多变量时间序列,捕捉它们之间的动态关系。

核心公式

假设我们有 个时间序列变量 ,VAR§ 模型可以表示为:

其中:

是 -dim的向量,表示时间点 的观测值。

是 的系数矩阵。

是误差项,通常假设为白噪声。

推导:

VAR§ 模型:

对于每个时间序列变量 ,其值由前 个时刻的所有变量的线性组合决定。

模型拟合:

使用最小二乘法估计参数矩阵 。

优缺点

优点:

能够处理多个时间序列变量,适合多变量时间序列数据的分析。

能捕捉变量之间的动态相互关系。

缺点:

模型复杂度高,参数量大,尤其是当变量数目和滞后阶数都很大时。

对数据的要求较高,尤其是数据量需要足够大以保证模型稳定性。

适用场景

VAR 模型适用于多个经济、金融或社会时间序列变量的建模与预测,如宏观经济指标(GDP、通货膨胀率、失业率)之间的关系分析。

核心案例代码

import numpy as np import pandas as pd import matplotlib.pyplot as plt from statsmodels.tsa.api import VAR # 生成示例数据:多变量时间序列 np.random.seed(42) dates = pd.date_range('2024-01-01', periods=100) data1 = np.cumsum(np.random.randn(100)) + 50 data2 = np.cumsum(np.random.randn(100)) + 30 data = pd.DataFrame({'Variable1': data1, 'Variable2': data2}, index=dates) # 拟合VAR模型 (p=2) model = VAR(data) var_result = model.fit(2) # 预测未来10个时间点 forecast = var_result.forecast(data.values[-2:], steps=10) forecast_index = pd.date_range(dates[-1] + pd.DateOffset(days=1), periods=10) forecast_df = pd.DataFrame(forecast, index=forecast_index, columns=data.columns) # 可视化 plt.figure(figsize=(14, 7)) plt.plot(data.index, data['Variable1'], label='Variable1 (Observed)', color='blue') plt.plot(data.index, data['Variable2'], label='Variable2 (Observed)', color='green') plt.plot(forecast_df.index, forecast_df['Variable1'], label='Variable1 (Forecast)', color='orange', linestyle='--') plt.plot(forecast_df.index, forecast_df['Variable2'], label='Variable2 (Forecast)', color='red', linestyle='--') plt.title('VAR Model Forecast') plt.xlabel('Date') plt.ylabel('Value') plt.legend() plt.grid(True) plt.show()

图中展示了两个时间序列变量的观测数据(蓝色和绿色)以及未来 10 天的预测值(橙色和红色虚线)。VAR 模型能有效捕捉两个变量之间的动态关系。

5. 广义自回归条件异方差模型(GARCH)

原理

GARCH 模型用于建模时间序列数据的条件异方差性,特别是金融时间序列数据的波动性。GARCH 模型扩展了 ARCH 模型,通过引入过去的方差来解释当前的方差。

核心公式

GARCH(p, q) 模型的核心公式

为:

其中:

是残差项。

是条件方差。

是常数项。

和 是模型参数。

推导:

ARCH 模型:

GARCH 模型:

将过去的方差 引入模型。

优缺点

优点:

适用于建模时间序列的波动性,特别是金融数据中的波动性聚集效应。

能够描述时间序列数据中的异方差特性。

缺点:

对参数估计要求较高,模型复杂度较大。

对数据量要求较高。

适用场景

GARCH 模型广泛用于金融时间序列数据,如股票收益率、汇率等,用于建模和预测波动性。

核心案例代码

import numpy as np import pandas as pd import matplotlib.pyplot as plt from arch import arch_model # 生成示例数据:金融时间序列(收益率) np.random.seed(42) dates = pd.date_range('2024-01-01', periods=250) returns = np.random.randn(250) * 0.02 # 生成随机收益率数据 # 创建DataFrame df = pd.DataFrame(returns, index=dates, columns=['Returns']) # 拟合GARCH模型 (p=1, q=1) model = arch_model(df['Returns'], vol='Garch', p=1, q=1) garch_result = model.fit() # 预测未来10个时间点的波动性 forecast = garch_result.forecast(horizon=10) forecast_index = pd.date_range(dates[-1] + pd.DateOffset(days=1), periods=10) forecast_volatility = forecast.variance.values[-1, :] # 可视化 plt.figure(figsize=(12, 6)) plt.plot(df.index, df['Returns']**2, label='Observed Variance', color='blue') plt.plot(forecast_index, forecast_volatility, label='Forecasted Volatility', color='red', linestyle='--') plt.title('GARCH Model Forecast') plt.xlabel('Date') plt.ylabel('Variance') plt.legend() plt.grid(True) plt.show()

图中展示了实际的方差(蓝色)和未来 10 天的预测波动性(红色虚线)。GARCH 模型能有效捕捉时间序列中的波动性特征。

6. Prophet

原理

Prophet 是由 Facebook 开发的时间序列预测模型,专为处理具有强季节性、趋势变化以及缺失值和异常值的时间序列数据设计。它的核心思想是将时间序列数据分解为趋势、季节性和假期效应三个部分。

核心公式

Prophet 模型的公式如下:

其中:

是趋势组件(线性或逻辑斯蒂增长)。

是季节性组件。

是假期效应。

是误差项。

推导:

趋势:

线性趋势:

逻辑斯蒂增长:

季节性:

其中 是季节周期, 是季节性频率的数量。 3. 假期效应:

添加假期的特殊效应。

优缺点

优点:

适用于具有季节性和趋势变化的时间序列。

对缺失值和异常值具有较强的鲁棒性。

模型易于使用,适合非专业用户。

缺点:

对于数据量很大的情况,计算可能会变得比较慢。

对非平稳数据的处理较为简单,可能不足以处理复杂的非平稳特征。

适用场景

Prophet 模型适用于各种具有强季节性和趋势性的数据,例如零售销售、网站流量、生产量等。

核心案例代码

import pandas as pd import numpy as np import matplotlib.pyplot as plt from prophet import Prophet # 使用 prophet 替代 fbprophet # 生成示例数据:带有季节性和趋势的时间序列 np.random.seed(42) dates = pd.date_range('2024-01-01', periods=365) data = np.linspace(10, 50, 365) + 10 * np.sin(np.linspace(0, 2 * np.pi, 365)) + np.random.randn(365) * 5 # 创建DataFrame df = pd.DataFrame({'ds': dates, 'y': data}) # 拟合Prophet模型 model = Prophet(yearly_seasonality=True) model.fit(df) # 预测未来30天 future = model.make_future_dataframe(periods=30) forecast = model.predict(future) # 可视化 fig = model.plot(forecast) plt.title('Prophet Model Forecast') plt.xlabel('Date') plt.ylabel('Value') plt.show()

图中展示了时间序列数据(黑色点)及其预测结果(蓝色线)。Prophet 模型能有效捕捉时间序列中的趋势和季节性成分,并进行未来的预测。

7. 长短期记忆网络(LSTM)

原理

LSTM 是一种特殊类型的循环神经网络(RNN),用于捕捉时间序列数据中的长期依赖关系。LSTM 网络通过引入门控机制(输入门、遗忘门和输出门)来解决标准 RNN 中的梯度消失和爆炸问题。

核心公式

LSTM 网络的核心公式如下:

输入门:

遗忘门:

候选记忆:

记忆单元更新:

输出门:

隐藏状态:

其中:

是输入。

是隐藏状态。

是记忆单元状态。

优缺点

优点:

能够捕捉长期依赖关系,适用于长序列数据。

处理梯度消失和爆炸问题。

缺点:

训练过程计算复杂,时间较长。

对参数的调整比较敏感。

适用场景

LSTM 模型适用于序列预测任务,如股票价格预测、语音识别、自然语言处理等。

核心案例代码

import numpy as np import pandas as pd import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers import LSTM, Dense from sklearn.preprocessing import MinMaxScaler # 生成示例数据:时间序列 np.random.seed(42) dates = pd.date_range('2024-01-01', periods=100) data = np.sin(np.linspace(0, 10, 100)) + np.random.randn(100) * 0.1 # 创建DataFrame df = pd.DataFrame({'Date': dates, 'Value': data}) # 预处理数据 scaler = MinMaxScaler() scaled_data = scaler.fit_transform(df[['Value']]) X, y = [], [] for i in range(len(scaled_data) - 10): X.append(scaled_data[i:i+10]) y.append(scaled_data[i+10]) X, y = np.array(X), np.array(y) # 构建LSTM模型 model = Sequential() model.add(LSTM(50, input_shape=(X.shape[1], X.shape[2]))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mean_squared_error') # 训练模型 model.fit(X, y, epochs=20, verbose=1) # 预测 predicted = model.predict(X) predicted = scaler.inverse_transform(predicted) actual = scaler.inverse_transform(y.reshape(-1, 1)) # 可视化 plt.figure(figsize=(12, 6)) plt.plot(df['Date'][10:], actual, label='Actual', color='blue') plt.plot(df['Date'][10:], predicted, label='Predicted', color='red', linestyle='--') plt.title('LSTM Model Forecast') plt.xlabel('Date') plt.ylabel('Value') plt.legend() plt.grid(True) plt.show()

图中展示了 LSTM 模型的预测结果(红色虚线)与实际数据(蓝色)。LSTM 能够捕捉时间序列的长期依赖特征并进行准确预测。

8. 门控循环单元(GRU)

原理

GRU 是另一种改进的 RNN 结构,旨在克服标准 RNN 的梯度消失问题。GRU 相较于 LSTM 具有更简洁的结构,只使用了重置门和更新门来控制信息的流动。

核心公式

GRU 网络的核心公式如下:

更新门:

重置门:

候选激活:

隐藏状态:

其中:

是输入。

是隐藏状态。

是候选激活值。

优缺点

优点:

结构比 LSTM 更简单,训练速度更快。

处理长期依赖问题。

缺点:

与 LSTM 相比,性能可能有所差距,特别是在某些复杂任务上。

对超参数的设置较为敏感。

适用场景

GRU 模型适用于需要捕捉长期依赖关系的时间序列预测任务,如时间序列预测、自然语言处理等。

核心案例代码

import numpy as np import pandas as pd import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers import GRU, Dense from sklearn.preprocessing import MinMaxScaler # 生成示例数据:时间序列 np.random.seed(42) dates = pd.date_range('2024-01-01', periods=100) data = np.sin(np.linspace(0, 10, 100)) + np.random.randn(100) * 0.1 # 创建DataFrame df = pd.DataFrame({'Date': dates, 'Value': data}) # 预处理数据 scaler = MinMaxScaler() scaled_data = scaler.fit_transform(df[['Value']]) X, y = [], [] for i in range(len(scaled_data) - 10): X.append(scaled_data[i:i+10]) y.append(scaled_data[i+10]) X, y = np.array(X), np.array(y) # 构建GRU模型 model = Sequential() model.add(GRU(50, input_shape=(X.shape[1], X.shape[2]))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mean_squared_error') # 训练模型 model.fit(X, y, epochs=20, verbose=1) # 预测 predicted = model.predict(X) predicted = scaler.inverse_transform(predicted) actual = scaler.inverse_transform(y.reshape(-1, 1)) # 可视化 plt.figure(figsize=(12, 6)) plt.plot(df['Date'][10:], actual, label='Actual', color='blue') plt.plot(df['Date'][10:], predicted, label='Predicted', color='red', linestyle='--') plt.title('GRU Model Forecast') plt.xlabel('Date') plt.ylabel('Value') plt.legend() plt.grid(True) plt.show()

图中展示了 GRU 模型的预测结果(红色虚线)与实际数据(蓝色)。GRU 能够有效处理时间序列数据并进行预测。

9. 贝叶斯结构时间序列模型(BSTS)

原理

BSTS 模型是基于贝叶斯框架的时间序列建模方法,它允许对时间序列数据中的趋势、季节性和假期效应进行建模。BSTS 模型结合了结构时间序列模型和贝叶斯推断方法,以提供灵活的建模能力。

核心公式

BSTS 模型的公式包括趋势、季节性和假期成分:

其中:

是趋势组件。

是季节性组件。

是假期效应。

是误差项。

推导:

趋势: 使用随机游走模型或加法趋势模型。

季节性: 建模季节性波动。

假期效应: 通过特定的假期效应模型引入。

优缺点

优点:

能够处理多种时间序列成分,适用于复杂的时间序列数据。

具有灵活的贝叶斯推断能力,能提供不确定性评估。

缺点:

计算复杂度高,训练时间较长。

对超参数的调整较为敏感。

适用场景

BSTS 模型适用于具有复杂结构的时间序列数据,如业务销售数据、经济指标预测等。

核心案例代码

import numpy as np import pandas as pd import matplotlib.pyplot as plt import numpyro from bsts import BSTS import jax import jax.numpy as jnp # 确认可用设备数量 print(f"Number of available devices: {jax.local_device_count()}") # 设置主机设备数量(根据实际情况调整) numpyro.set_host_device_count(1) # 设置为实际可用的设备数量 # 生成示例数据 np.random.seed(42) dates = pd.date_range('2024-01-01', periods=365) data = np.linspace(10, 50, 365) + 10 * np.sin(np.linspace(0, 2 * np.pi, 365)) + np.random.randn(365) * 5 df = pd.DataFrame({'Date': dates, 'Value': data}) # 确保数据格式正确 values = np.asarray(df['Value'], dtype=np.float32) # 初始化 BSTS 模型 model = BSTS(values) # 拟合模型 model.fit(values) # 预测未来30天 forecast = model.predict(steps=30) # 生成未来日期 forecast_index = pd.date_range(dates[-1] + pd.DateOffset(days=1), periods=30) forecast_values = forecast['mean'] # 根据实际返回值的结构调整 # 可视化 plt.figure(figsize=(12, 6)) plt.plot(df['Date'], df['Value'], label='Observed', color='blue') plt.plot(forecast_index, forecast_values, label='Forecast', color='red', linestyle='--') plt.title('BSTS Model Forecast') plt.xlabel('Date') plt.ylabel('Value') plt.legend() plt.grid(True) plt.show()

图中展示了时间序列数据(蓝色)及其预测结果(红色虚线)。BSTS 模型能够捕捉时间序列的复杂成分并进行预测。

10. 序列到序列模型(Seq2Seq)

原理

Seq2Seq 模型是一种深度学习模型,用于处理序列到序列的任务,如机器翻译和时间序列预测。Seq2Seq 模型通常由一个编码器和一个解码器组成,其中编码器处理输入序列,解码器生成输出序列。

核心公式

Seq2Seq 模型的核心公式包括编码器和解码器:

编码器:

其中 是输入序列的元素, 是隐藏状态。

解码器:

其中 是输出序列的元素。

优缺点

优点:

适用于复杂的序列到序列任务,如机器翻译和时间序列预测。

能够处理变长的输入和输出序列。

缺点:

训练时间较长,对计算资源要求高。

模型复杂度较高,需要大量数据进行训练。

适用场景

Seq2Seq 模型适用于需要进行序列转换的任务,如时间序列预测、自然语言处理等。

核心案例代码

import numpy as np import pandas as pd import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers import LSTM, Dense from sklearn.preprocessing import MinMaxScaler # 生成示例数据:时间序列 np.random.seed(42) dates = pd.date_range('2024-01-01', periods=100) data = np.sin(np.linspace(0, 10, 100)) + np.random.randn(100) * 0.1 # 创建DataFrame df = pd.DataFrame({'Date': dates, 'Value': data}) # 预处理数据 scaler = MinMaxScaler() scaled_data = scaler.fit_transform(df[['Value']]) X, y = [], [] for i in range(len(scaled_data) - 10): X.append(scaled_data[i:i+10]) y.append(scaled_data[i+10]) X, y = np.array(X), np.array(y) # 构建Seq2Seq模型 model = Sequential() model.add(LSTM(50, input_shape=(X.shape[1], X.shape[2]))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mean_squared_error') # 训练模型 model.fit(X, y, epochs=20, verbose=1) # 预测 predicted = model.predict(X) predicted = scaler.inverse_transform(predicted) actual = scaler.inverse_transform(y.reshape(-1, 1)) # 可视化 plt.figure(figsize=(12, 6)) plt.plot(df['Date'][10:], actual, label='Actual', color='blue') plt.plot(df['Date'][10:], predicted, label='Predicted', color='red', linestyle='--') plt.title('Seq2Seq Model Forecast') plt.xlabel('Date') plt.ylabel('Value') plt.legend() plt.grid(True) plt.show()

图中展示了 Seq2Seq 模型的预测结果(红色虚线)与实际数据(蓝色)。Seq2Seq 模型能有效进行时间序列的预测任务。

零基础入门AI大模型

今天贴心为大家准备好了一系列AI大模型资源,包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

有需要的小伙伴,可以点击下方链接免费领取【保证100%免费】

点击领取 《AI大模型&人工智能&入门进阶学习资源包》

1.学习路线图

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

1.AI大模型学习路线图 2.100套AI大模型商业化落地方案 3.100集大模型视频教程 4.200本大模型PDF书籍 5.LLM面试题合集 6.AI产品经理资源合集

5.免费获取

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码或者点击以下链接都可以免费领取【保证100%免费】

点击领取 《AI大模型&人工智能&入门进阶学习资源包》