基于机器学习的时间序列预测:降维回归方法
立即解锁
发布时间: 2025-09-01 00:33:33 阅读量: 2 订阅数: 13 AIGC 

### 基于机器学习的时间序列预测:降维回归方法
在时间序列预测领域,传统上我们主要依赖专门的时间序列模型。但其实,探索用于解决回归任务的其他算法也是很有意义的,这或许能提升我们模型的性能。本文将介绍如何使用降维回归(Reduced Regression)方法进行时间序列预测,并结合美国失业率数据集给出具体示例。
#### 1. tsfresh库的特性
tsfresh是一个用于时间序列数据自动特征生成的库,它有以下三个有趣的特性:
- **基于假设检验的特征选择算法**:该库能够生成成百上千个特征,因此选择与我们用例相关的特征至关重要。它使用fresh算法,即基于可扩展假设检验的特征提取算法来进行特征选择。
- **处理大型数据集的能力**:通过并行处理,它可以在本地机器上使用多进程,或者在数据无法放入单台机器时使用Spark或Dask集群,来处理大型数据集的特征生成和选择。
- **与scikit - learn管道集成**:它提供了诸如FeatureAugmenter或FeatureSelector等转换器类,可与scikit - learn管道一起使用。
#### 2. 时间序列预测的降维回归
由于时间序列数据具有时间依赖性,我们不能直接使用回归模型进行时间序列预测。需要先将时间序列数据转换为监督学习问题,这一过程称为降维(Reduction)。降维将时间序列预测等学习任务分解为更简单的任务,然后再组合这些简单任务来解决原始问题,实际上就是将预测任务转换为表格回归问题。
在实践中,降维使用滑动窗口将时间序列分割成固定长度的窗口。例如,对于一个从1到100的连续数字时间序列,使用长度为5的滑动窗口,第一个窗口将观测值1到4作为特征,观测值5作为目标;第二个窗口将观测值2到5作为特征,观测值6作为目标,依此类推。将所有这些窗口排列在一起,就得到了可以使用传统回归算法进行时间序列预测的表格格式数据。
不过,降维回归模型也有一些局限性,比如它会丢失时间序列模型的典型特征,即失去时间概念,因此无法处理趋势和季节性。所以,通常先对数据进行去趋势和去季节性处理,再进行降维会更有效。
#### 3. 示例:使用美国失业率数据集进行降维回归预测
以下是使用降维回归方法对美国失业率进行12步超前预测的具体步骤:
##### 3.1 导入必要的库
```python
from sktime.utils.plotting import plot_series
from sktime.forecasting.model_selection import (
temporal_train_test_split, ExpandingWindowSplitter
)
from sktime.forecasting.base import ForecastingHorizon
from sktime.forecasting.compose import (
make_reduction, TransformedTargetForecaster, EnsembleForecaster
)
from sktime.performance_metrics.forecasting import (
mean_absolute_percentage_error
)
from sktime.transformations.series.detrend import (
Deseasonalizer, Detrender
)
from sktime.forecasting.trend import PolynomialTrendForecaster
from sktime.forecasting.model_evaluation import evaluate
from sktime.forecasting.arima import AutoARIMA
from sklearn.ensemble import RandomForestRegressor
```
##### 3.2 划分训练集和测试集
```python
y_train, y_test = temporal_train_test_split(
y, test_size=12
)
plot_series(
y_train, y_test,
labels=["y_train", "y_test"]
)
```
##### 3.3 设置预测 horizons
```python
fh = ForecastingHorizon(y_test.index, is_relative=False)
fh
```
##### 3.4 实例化降维回归模型,拟合数据并进行预测
```python
regressor = RandomForestRegressor(random_state=42)
rf_forecaster = make_reduction(
estimator=regressor,
strategy="recursive",
window_length=12
)
rf_forecaster.fit(y_train)
y_pred_1 = rf_forecaster.predict(fh)
```
##### 3.5 评估预测性能
```python
mape_1 = mean_absolute_percentage_error(
y_test, y_pred_1, symmetric=False
)
fig, ax = plot_series(
y_train["2016":], y_test, y_pred_1,
labels=["y_train", "y_test", "y_pred"]
)
ax.set_title(f"MAPE: {100*mape_1:.2f}%")
```
从上述步骤得到的预测结果来看,几乎平坦的预测可能与降维回归方法的局限性有关,即它无法很好地捕捉时间序列的趋势和季节性。为了解决这个问题,我们可以先对时间序列进行去季节性和去趋势处理,再使用降维回归方法。
##### 3.6 对时间序列进行去季节性处理
```python
deseasonalizer = Deseasonalizer(
```
0
0
复制全文
相关推荐










