我是深度学习的新手,所以我需要一些建议。我有根据x,y坐标和年份变化的变量。例如,变量";a";根据";x、 y坐标";以及变量";b";根据";年";,以及变量"0";c";根据两者(x、y坐标和年份(进行更改。我想创建一个时空预测模型。然而,变量";c";影响目标变量";t〃;不仅是当年,而且是根据前两年的价值。在这种情况下,我如何创建时空预测模型?哪种神经网络架构可以解决我的分类问题?
import pandas as pd
data = {'x': [40.1, 50.1, 60.1, 70.1, 80.1, 90.1, 0, 300.1, 40.1, 50.1, 60.1, 70.1, 80.1, 90.1, 0, 300.1, 40.1, 50.1, 60.1, 70.1, 80.1, 90.1, 0, 300.1, 40.1, 50.1, 60.1, 70.1, 80.1, 90.1, 0, 300.1, 40.1, 50.1, 60.1, 70.1, 80.1, 90.1, 0, 300.1 ], 'y': [100.1, 110.1, 120.1, 130.1, 140.1, 150.1, 160.1, 400.1, 100.1, 110.1, 120.1, 130.1, 140.1, 150.1, 160.1, 400.1, 100.1, 110.1, 120.1, 130.1, 140.1, 150.1, 160.1, 400.1, 100.1, 110.1, 120.1, 130.1, 140.1, 150.1, 160.1, 400.1, 100.1, 110.1, 120.1, 130.1, 140.1, 150.1, 160.1, 400.1], 'a': [1.0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0 ], 'b': [1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2 ], 'c': [1.0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0], 't': [1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 ], 'year': [2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004]}
df = pd.DataFrame(data)
df
x y a b c t year
0 40.1 100.1 1.0 1.0 1.0 1 2000
1 50.1 110.1 0.0 1.0 1.0 1 2000
2 60.1 120.1 1.0 1.0 1.0 1 2000
3 70.1 130.1 1.0 1.0 0.0 0 2000
4 80.1 140.1 0.0 1.0 0.0 0 2000
5 90.1 150.1 0.0 1.0 0.0 0 2000
6 0.0 160.1 0.0 1.0 0.0 0 2000
7 300.1 400.1 0.0 1.0 0.0 0 2000
8 40.1 100.1 1.0 0.5 1.0 0 2001
9 50.1 110.1 0.0 0.5 0.0 1 2001
10 60.1 120.1 1.0 0.5 1.0 0 2001
11 70.1 130.1 1.0 0.5 0.0 0 2001
12 80.1 140.1 0.0 0.5 0.0 1 2001
13 90.1 150.1 0.0 0.5 0.0 1 2001
14 0.0 160.1 0.0 0.5 1.0 0 2001
15 300.1 400.1 0.0 0.5 0.0 0 2001
16 40.1 100.1 1.0 0.9 1.0 0 2002
17 50.1 110.1 0.0 0.9 0.0 1 2002
18 60.1 120.1 1.0 0.9 0.0 1 2002
19 70.1 130.1 1.0 0.9 0.0 1 2002
20 80.1 140.1 0.0 0.9 1.0 0 2002
21 90.1 150.1 0.0 0.9 1.0 0 2002
22 0.0 160.1 0.0 0.9 0.0 1 2002
23 300.1 400.1 0.0 0.9 0.0 0 2002
24 40.1 100.1 1.0 0.3 1.0 0 2003
25 50.1 110.1 0.0 0.3 0.0 1 2003
26 60.1 120.1 1.0 0.3 0.0 1 2003
27 70.1 130.1 1.0 0.3 0.0 1 2003
28 80.1 140.1 0.0 0.3 0.0 0 2003
29 90.1 150.1 0.0 0.3 0.0 1 2003
30 0.0 160.1 0.0 0.3 1.0 0 2003
31 300.1 400.1 0.0 0.3 1.0 0 2003
32 40.1 100.1 1.0 0.2 1.0 0 2004
33 50.1 110.1 0.0 0.2 0.0 0 2004
34 60.1 120.1 1.0 0.2 0.0 0 2004
35 70.1 130.1 1.0 0.2 0.0 1 2004
36 80.1 140.1 0.0 0.2 1.0 1 2004
37 90.1 150.1 0.0 0.2 0.0 0 2004
38 0.0 160.1 0.0 0.2 0.0 0 2004
39 300.1 400.1 0.0 0.2 0.0 0 2004
有时候,问题不在于使用什么模型,而在于如何转换特性。你说你的目标取决于过去的特征值,所以你可以重新排列你的数据来反映这一点。
这里介绍了如何将三个连续的行连接成一个行。
X = df.drop("t", axis=1)
y = df["t"]
X = (
pd.concat([X, X.shift(1), X.shift(2)], axis=1, keys=["t0", "t-1", "t-2"])
.dropna()
)
y = y.iloc[2:]
>>> X.head()
t0 t0 t0 t0 t0 t0 t-1 t-1 t-1 t-1 t-1 t-1 t-2 t-2 t-2 t-2 t-2 t-2
x y a b c year x y a b c year x y a b c year
2 60.1 120.1 1.0 1.0 1.0 2000 50.1 110.1 0.0 1.0 1.0 2000.0 40.1 100.1 1.0 1.0 1.0 2000.0
3 70.1 130.1 1.0 1.0 0.0 2000 60.1 120.1 1.0 1.0 1.0 2000.0 50.1 110.1 0.0 1.0 1.0 2000.0
4 80.1 140.1 0.0 1.0 0.0 2000 70.1 130.1 1.0 1.0 0.0 2000.0 60.1 120.1 1.0 1.0 1.0 2000.0
5 90.1 150.1 0.0 1.0 0.0 2000 80.1 140.1 0.0 1.0 0.0 2000.0 70.1 130.1 1.0 1.0 0.0 2000.0
现在可以拟合任何分类模型。我从sklearn中选择了一个简单的逻辑回归。
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression()
clf.fit(X, y)
>>> clf.score(X, y)
0.7368421052631579
普通数据上的相同模型得分0.625
,添加额外的时间步长得分0.8108
。
我并不是说这是唯一的方法,但肯定是需要考虑的。
有关更多详细信息,您可以阅读https://machinelearningmastery.com/basic-feature-engineering-time-series-data-python/.