哪种神经网络架构可以解决我的分类问题



我是深度学习的新手,所以我需要一些建议。我有根据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/.

最新更新