具有单一分类特征的 LSTM 预测
LSTM forecasting with single categorical feature
我对时间序列还很陌生。
这是我正在处理的数据集:
Date Price Location
0 2012-01-01 1771.0 Marche
1 2012-01-01 1039.0 Calabria
2 2012-01-01 2193.0 Campania
3 2012-01-01 2015.0 Emilia-Romagna
4 2012-01-01 1483.0 Friuli-Venezia Giulia
... ... ... ...
2475 2022-04-01 1963.0 Lazio
2476 2022-04-01 1362.0 Friuli-Venezia Giulia
2477 2022-04-01 1674.0 Emilia-Romagna
2478 2022-04-01 1388.0 Marche
2479 2022-04-01 1103.0 Abruzzo
我正在尝试构建用于价格预测的 LSTM,但我不知道如何管理 Location 分类特征:我是否必须使用 one-hot 编码还是群友?
我想预测的是基于位置的价格。
我怎样才能做到这一点? Python 解决方案特别受欢迎。
提前致谢。
假设我的数据集 (df
) 与您的类似:
Date Price Location
0 2021-01-01 791.076890 Campania
1 2021-01-01 705.702464 Lombardia
2 2021-01-01 719.991382 Sicilia
3 2021-02-01 825.760917 Lombardia
4 2021-02-01 747.734309 Sicilia
... ... ... ...
31 2021-11-01 886.874348 Lombardia
32 2021-11-01 935.040583 Campania
33 2021-12-01 771.165378 Sicilia
34 2021-12-01 952.255227 Campania
35 2021-12-01 939.754515 Lombardia
就我而言,我每个月都有 3 个地区(坎帕尼亚、伦巴第、西西里)的 Price
记录。我的想法是将不同的区域视为不同的特征,所以我将 df
转换为:
df = df.set_index(["Date", "Location"]).Price.unstack()
现在我的数据集是这样的:
Location Campania Lombardia Sicilia
Date
2021-01-01 791.076890 705.702464 719.991382
2021-02-01 758.872755 825.760917 747.734309
2021-03-01 880.038005 803.165998 837.738419
... ... ... ...
2021-10-01 908.402345 805.081193 792.369610
2021-11-01 935.040583 886.874348 736.862025
2021-12-01 952.255227 939.754515 771.165378
在此之后,请确保没有 NaN
个值 (df.isna().sum()
)。
现在您可以将此数据传递给多特征 RNN(或 LSTM),如 this example 中所述,或传递给 multi-channel 1D-CNN(选择合适的内核大小)。两种情况下唯一的问题可能是数据集的尺寸太小,所以尽量不要 over-parameterize 模型(例如减少神经元和层数),否则 over-fitting 将是不可避免的。关于这一点,您可以在 time-series:
的最后 20% 上测试模型
from sklearn.model_selection import train_test_split
df_train, df_test = train_test_split(df, shuffle=False, test_size=.2)
最后一部分是为监督学习建立匹配(X, Y)
,但这取决于你使用的是什么模型以及你的预测任务是什么。 Another example here.
我对时间序列还很陌生。
这是我正在处理的数据集:
Date Price Location
0 2012-01-01 1771.0 Marche
1 2012-01-01 1039.0 Calabria
2 2012-01-01 2193.0 Campania
3 2012-01-01 2015.0 Emilia-Romagna
4 2012-01-01 1483.0 Friuli-Venezia Giulia
... ... ... ...
2475 2022-04-01 1963.0 Lazio
2476 2022-04-01 1362.0 Friuli-Venezia Giulia
2477 2022-04-01 1674.0 Emilia-Romagna
2478 2022-04-01 1388.0 Marche
2479 2022-04-01 1103.0 Abruzzo
我正在尝试构建用于价格预测的 LSTM,但我不知道如何管理 Location 分类特征:我是否必须使用 one-hot 编码还是群友?
我想预测的是基于位置的价格。
我怎样才能做到这一点? Python 解决方案特别受欢迎。
提前致谢。
假设我的数据集 (df
) 与您的类似:
Date Price Location
0 2021-01-01 791.076890 Campania
1 2021-01-01 705.702464 Lombardia
2 2021-01-01 719.991382 Sicilia
3 2021-02-01 825.760917 Lombardia
4 2021-02-01 747.734309 Sicilia
... ... ... ...
31 2021-11-01 886.874348 Lombardia
32 2021-11-01 935.040583 Campania
33 2021-12-01 771.165378 Sicilia
34 2021-12-01 952.255227 Campania
35 2021-12-01 939.754515 Lombardia
就我而言,我每个月都有 3 个地区(坎帕尼亚、伦巴第、西西里)的 Price
记录。我的想法是将不同的区域视为不同的特征,所以我将 df
转换为:
df = df.set_index(["Date", "Location"]).Price.unstack()
现在我的数据集是这样的:
Location Campania Lombardia Sicilia
Date
2021-01-01 791.076890 705.702464 719.991382
2021-02-01 758.872755 825.760917 747.734309
2021-03-01 880.038005 803.165998 837.738419
... ... ... ...
2021-10-01 908.402345 805.081193 792.369610
2021-11-01 935.040583 886.874348 736.862025
2021-12-01 952.255227 939.754515 771.165378
在此之后,请确保没有 NaN
个值 (df.isna().sum()
)。
现在您可以将此数据传递给多特征 RNN(或 LSTM),如 this example 中所述,或传递给 multi-channel 1D-CNN(选择合适的内核大小)。两种情况下唯一的问题可能是数据集的尺寸太小,所以尽量不要 over-parameterize 模型(例如减少神经元和层数),否则 over-fitting 将是不可避免的。关于这一点,您可以在 time-series:
的最后 20% 上测试模型from sklearn.model_selection import train_test_split
df_train, df_test = train_test_split(df, shuffle=False, test_size=.2)
最后一部分是为监督学习建立匹配(X, Y)
,但这取决于你使用的是什么模型以及你的预测任务是什么。 Another example here.