Adding the RecurrentGCN models

RecurrentGCN
Author

SEOYEON CHOI

Published

May 27, 2023

RecurrentGCN

Import

import itstgcntry
import torch
import itstgcntry.planner 

Try

import pandas as pd
pd.read_csv('./simulation_results/2023-05-29_11-18-32.csv').groupby(['RecurrentGCN','method','mrate'])['mse'].mean().reset_index()
RecurrentGCN method mrate mse
0 DCRNN IT-STGCN 0.8 1.517346
1 DCRNN STGCN 0.8 1.521906
2 EvolveGCNH IT-STGCN 0.8 1.338225
3 EvolveGCNH STGCN 0.8 1.337022
4 EvolveGCNO IT-STGCN 0.8 1.370455
5 EvolveGCNO STGCN 0.8 1.326990
6 GCLSTM IT-STGCN 0.8 1.529536
7 GCLSTM STGCN 0.8 1.600452
8 GConvGRU IT-STGCN 0.8 1.567661
9 GConvGRU STGCN 0.8 1.654162
10 GConvLSTM IT-STGCN 0.8 1.494284
11 GConvLSTM STGCN 0.8 1.633645
12 LRGCN IT-STGCN 0.8 1.512042
13 LRGCN STGCN 0.8 1.604186
14 MPNNLSTM IT-STGCN 0.8 1.386678
15 MPNNLSTM STGCN 0.8 1.351526
16 TGCN IT-STGCN 0.8 1.279269
17 TGCN STGCN 0.8 1.278411
pd.read_csv('./simulation_results/2023-05-29_12-31-06.csv').groupby(['RecurrentGCN','method','mrate'])['mse'].mean().reset_index()
RecurrentGCN method mrate mse
0 DCRNN IT-STGCN 0.6 1.457874
1 DCRNN STGCN 0.6 1.523312
2 EvolveGCNH IT-STGCN 0.6 1.265695
3 EvolveGCNH STGCN 0.6 1.290008
4 EvolveGCNO IT-STGCN 0.6 1.288295
5 EvolveGCNO STGCN 0.6 1.308886
6 GCLSTM IT-STGCN 0.6 1.304539
7 GCLSTM STGCN 0.6 1.537681
8 GConvGRU IT-STGCN 0.6 1.402607
9 GConvGRU STGCN 0.6 1.582745
10 GConvLSTM IT-STGCN 0.6 1.299263
11 GConvLSTM STGCN 0.6 1.534498
12 LRGCN IT-STGCN 0.6 1.295239
13 LRGCN STGCN 0.6 1.527917
14 MPNNLSTM IT-STGCN 0.6 1.287649
15 MPNNLSTM STGCN 0.6 1.307589
16 TGCN IT-STGCN 0.6 1.276318
17 TGCN STGCN 0.6 1.262256

GConvGRU

data_dict = itstgcntry.load_data('./data/fivenodes.pkl')
loader = itstgcntry.DatasetLoader(data_dict)
dataset = loader.get_dataset(lags=2)
train_dataset, test_dataset = itstgcntry.temporal_signal_split(dataset, train_ratio=0.8)
mindex = [list(range(10,100)),[],list(range(50,80)),[],[]]
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='block')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)
/home/csy/Dropbox/blog/posts/GCN/itstgcntry/utils.py:72: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at /opt/conda/conda-bld/pytorch_1682343998658/work/torch/csrc/utils/tensor_new.cpp:245.)
  lags = torch.tensor(train_dataset.features).shape[-1]
mindex = itstgcntry.rand_mindex(train_dataset,mrate=0.5)
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='rand')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)

- 학습

lrnr = itstgcntry.StgcnLearner(train_dataset_padded)
model = itstgcntry.GConvGRU_RecurrentGCN(train_dataset_padded,filters=1)
lrnr.learn(model,epoch=5)
5/5
lrnr1 = itstgcntry.ITStgcnLearner(train_dataset_padded)
model1 = itstgcntry.GConvGRU_RecurrentGCN(train_dataset_padded,filters=1)
lrnr1.learn(model1,epoch=5)
5/5

- 적합값

# lrnr(train_dataset_padded) 
# lrnr(test_dataset)['yhat'].shape
  • 실행하면 X,y,yhat 출력

- 모형 평가 및 시각화

evtor = itstgcntry.Evaluator(lrnr,train_dataset_padded,test_dataset)
fig = evtor.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

evtor1 = itstgcntry.Evaluator(lrnr1,train_dataset_padded,test_dataset)
fig = evtor1.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

DCRNN

data_dict = itstgcntry.load_data('./data/fivenodes.pkl')
loader = itstgcntry.DatasetLoader(data_dict)
dataset = loader.get_dataset(lags=2)
train_dataset, test_dataset = itstgcntry.temporal_signal_split(dataset, train_ratio=0.8)
mindex = [list(range(10,100)),[],list(range(50,80)),[],[]]
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='block')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)
mindex = itstgcntry.rand_mindex(train_dataset,mrate=0.5)
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='rand')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)

- 학습

lrnr = itstgcntry.StgcnLearner(train_dataset_padded)
model = itstgcntry.DCRNN_RecurrentGCN(train_dataset_padded,filters=1)
lrnr.learn(model,epoch=50)
50/50
lrnr1 = itstgcntry.ITStgcnLearner(train_dataset_padded)
model1 = itstgcntry.DCRNN_RecurrentGCN(train_dataset_padded,filters=1)
lrnr1.learn(model1,epoch=50)
50/50

- 적합값

# lrnr(train_dataset_padded) 
# lrnr(test_dataset)['yhat'].shape
  • 실행하면 X,y,yhat 출력

- 모형 평가 및 시각화

evtor = itstgcntry.Evaluator(lrnr,train_dataset_padded,test_dataset)
fig = evtor.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

evtor1 = itstgcntry.Evaluator(lrnr1,train_dataset_padded,test_dataset)
fig = evtor1.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

EvolveGCNH

data_dict = itstgcntry.load_data('./data/fivenodes.pkl')
loader = itstgcntry.DatasetLoader(data_dict)
dataset = loader.get_dataset(lags=2)
train_dataset, test_dataset = itstgcntry.temporal_signal_split(dataset, train_ratio=0.8)
mindex = [list(range(10,100)),[],list(range(50,80)),[],[]]
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='block')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)
mindex = itstgcntry.rand_mindex(train_dataset,mrate=0.5)
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='rand')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)

- 학습

lrnr = itstgcntry.StgcnLearner(train_dataset_padded)
model = itstgcntry.EvolveGCNH_RecurrentGCN(train_dataset_padded)
lrnr.learn(model,epoch=50)
50/50
lrnr1 = itstgcntry.ITStgcnLearner(train_dataset_padded)
model1 = itstgcntry.EvolveGCNH_RecurrentGCN(train_dataset_padded)
lrnr1.learn(model1,epoch=50)
50/50

- 적합값

# lrnr(train_dataset_padded) 
# lrnr(test_dataset)['yhat'].shape
  • 실행하면 X,y,yhat 출력

- 모형 평가 및 시각화

evtor = itstgcntry.Evaluator(lrnr,train_dataset_padded,test_dataset)
fig = evtor.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

evtor1 = itstgcntry.Evaluator(lrnr1,train_dataset_padded,test_dataset)
fig = evtor1.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

EvolveGCNO

data_dict = itstgcntry.load_data('./data/fivenodes.pkl')
loader = itstgcntry.DatasetLoader(data_dict)
dataset = loader.get_dataset(lags=2)
train_dataset, test_dataset = itstgcntry.temporal_signal_split(dataset, train_ratio=0.8)
mindex = [list(range(10,100)),[],list(range(50,80)),[],[]]
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='block')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)
mindex = itstgcntry.rand_mindex(train_dataset,mrate=0.5)
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='rand')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)

- 학습

lrnr = itstgcntry.StgcnLearner(train_dataset_padded)
model = itstgcntry.EvolveGCNO_RecurrentGCN(train_dataset_padded)
lrnr.learn(model,epoch=50)
50/50
lrnr1 = itstgcntry.ITStgcnLearner(train_dataset_padded)
model1 = itstgcntry.EvolveGCNO_RecurrentGCN(train_dataset_padded)
lrnr1.learn(model1,epoch=50)
50/50

- 적합값

# lrnr(train_dataset_padded) 
# lrnr(test_dataset)['yhat'].shape
  • 실행하면 X,y,yhat 출력

- 모형 평가 및 시각화

evtor = itstgcntry.Evaluator(lrnr,train_dataset_padded,test_dataset)
fig = evtor.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

evtor1 = itstgcntry.Evaluator(lrnr1,train_dataset_padded,test_dataset)
fig = evtor1.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

GCLSTM

data_dict = itstgcntry.load_data('./data/fivenodes.pkl')
loader = itstgcntry.DatasetLoader(data_dict)
dataset = loader.get_dataset(lags=2)
train_dataset, test_dataset = itstgcntry.temporal_signal_split(dataset, train_ratio=0.8)
mindex = [list(range(10,100)),[],list(range(50,80)),[],[]]
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='block')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)
mindex = itstgcntry.rand_mindex(train_dataset,mrate=0.5)
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='rand')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)

- 학습

lrnr = itstgcntry.StgcnLearner(train_dataset_padded)
model = itstgcntry.GCLSTM_RecurrentGCN(train_dataset_padded, filters=1)
lrnr.learn(model,epoch=50)
50/50
lrnr1 = itstgcntry.ITStgcnLearner(train_dataset_padded)
model1 = itstgcntry.GCLSTM_RecurrentGCN(train_dataset_padded, filters=1)
lrnr1.learn(model1,epoch=50)
50/50

- 적합값

# lrnr(train_dataset_padded) 
# lrnr(test_dataset)['yhat'].shape
  • 실행하면 X,y,yhat 출력

- 모형 평가 및 시각화

evtor = itstgcntry.Evaluator(lrnr,train_dataset_padded,test_dataset)
fig = evtor.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

evtor1 = itstgcntry.Evaluator(lrnr1,train_dataset_padded,test_dataset)
fig = evtor1.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

GConvLSTM

data_dict = itstgcntry.load_data('./data/fivenodes.pkl')
loader = itstgcntry.DatasetLoader(data_dict)
dataset = loader.get_dataset(lags=2)
train_dataset, test_dataset = itstgcntry.temporal_signal_split(dataset, train_ratio=0.8)
mindex = [list(range(10,100)),[],list(range(50,80)),[],[]]
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='block')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)
mindex = itstgcntry.rand_mindex(train_dataset,mrate=0.5)
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='rand')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)

- 학습

lrnr = itstgcntry.StgcnLearner(train_dataset_padded)
model = itstgcntry.GConvLSTM_RecurrentGCN(train_dataset_padded, filters=1)
lrnr.learn(model,epoch=50)
50/50
lrnr1 = itstgcntry.ITStgcnLearner(train_dataset_padded)
model1 = itstgcntry.GConvLSTM_RecurrentGCN(train_dataset_padded, filters=1)
lrnr1.learn(model1,epoch=50)
50/50

- 적합값

# lrnr(train_dataset_padded) 
# lrnr(test_dataset)['yhat'].shape
  • 실행하면 X,y,yhat 출력

- 모형 평가 및 시각화

evtor = itstgcntry.Evaluator(lrnr,train_dataset_padded,test_dataset)
fig = evtor.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

evtor1 = itstgcntry.Evaluator(lrnr1,train_dataset_padded,test_dataset)
fig = evtor1.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

LRGCN

data_dict = itstgcntry.load_data('./data/fivenodes.pkl')
loader = itstgcntry.DatasetLoader(data_dict)
dataset = loader.get_dataset(lags=2)
train_dataset, test_dataset = itstgcntry.temporal_signal_split(dataset, train_ratio=0.8)
mindex = [list(range(10,100)),[],list(range(50,80)),[],[]]
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='block')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)
mindex = itstgcntry.rand_mindex(train_dataset,mrate=0.5)
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='rand')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)

- 학습

lrnr = itstgcntry.StgcnLearner(train_dataset_padded)
model = itstgcntry.LRGCN_RecurrentGCN(train_dataset_padded, filters=1)
lrnr.learn(model,epoch=50)
50/50
lrnr1 = itstgcntry.ITStgcnLearner(train_dataset_padded)
model1 = itstgcntry.LRGCN_RecurrentGCN(train_dataset_padded, filters=1)
lrnr1.learn(model1,epoch=50)
50/50

- 적합값

# lrnr(train_dataset_padded) 
# lrnr(test_dataset)['yhat'].shape
  • 실행하면 X,y,yhat 출력

- 모형 평가 및 시각화

evtor = itstgcntry.Evaluator(lrnr,train_dataset_padded,test_dataset)
fig = evtor.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

evtor1 = itstgcntry.Evaluator(lrnr1,train_dataset_padded,test_dataset)
fig = evtor1.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

MPNNLSTM

data_dict = itstgcntry.load_data('./data/fivenodes.pkl')
loader = itstgcntry.DatasetLoader(data_dict)
dataset = loader.get_dataset(lags=2)
train_dataset, test_dataset = itstgcntry.temporal_signal_split(dataset, train_ratio=0.8)
mindex = [list(range(10,100)),[],list(range(50,80)),[],[]]
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='block')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)
mindex = itstgcntry.rand_mindex(train_dataset,mrate=0.5)
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='rand')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)

- 학습

lrnr = itstgcntry.StgcnLearner(train_dataset_padded)
model = itstgcntry.MPNNLSTM_RecurrentGCN(train_dataset_padded, filters=1)
lrnr.learn(model,epoch=50)
50/50
lrnr1 = itstgcntry.ITStgcnLearner(train_dataset_padded)
model1 = itstgcntry.MPNNLSTM_RecurrentGCN(train_dataset_padded, filters=1)
lrnr1.learn(model1,epoch=50)
50/50

- 적합값

# lrnr(train_dataset_padded) 
# lrnr(test_dataset)['yhat'].shape
  • 실행하면 X,y,yhat 출력

- 모형 평가 및 시각화

evtor = itstgcntry.Evaluator(lrnr,train_dataset_padded,test_dataset)
fig = evtor.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

evtor1 = itstgcntry.Evaluator(lrnr1,train_dataset_padded,test_dataset)
fig = evtor1.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

TGCN

data_dict = itstgcntry.load_data('./data/fivenodes.pkl')
loader = itstgcntry.DatasetLoader(data_dict)
dataset = loader.get_dataset(lags=2)
train_dataset, test_dataset = itstgcntry.temporal_signal_split(dataset, train_ratio=0.8)
mindex = [list(range(10,100)),[],list(range(50,80)),[],[]]
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='block')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)
mindex = itstgcntry.rand_mindex(train_dataset,mrate=0.5)
train_dataset_miss = itstgcntry.miss(train_dataset,mindex,mtype='rand')
train_dataset_padded = itstgcntry.padding(train_dataset_miss) # padding(train_dataset_miss,method='linear'와 같음)

- 학습

lrnr = itstgcntry.StgcnLearner(train_dataset_padded)
model = itstgcntry.TGCN_RecurrentGCN(train_dataset_padded, filters=32)
lrnr.learn(model,epoch=50)
50/50
lrnr1 = itstgcntry.ITStgcnLearner(train_dataset_padded)
model1 = itstgcntry.TGCN_RecurrentGCN(train_dataset_padded, filters=32)
lrnr1.learn(model1,epoch=50)
50/50

- 적합값

# lrnr(train_dataset_padded) 
# lrnr(test_dataset)['yhat'].shape
  • 실행하면 X,y,yhat 출력

- 모형 평가 및 시각화

evtor = itstgcntry.Evaluator(lrnr,train_dataset_padded,test_dataset)
fig = evtor.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig

evtor1 = itstgcntry.Evaluator(lrnr1,train_dataset_padded,test_dataset)
fig = evtor1.plot('--.',h=5,max_node=3,label='complete data',alpha=0.5) # max_nodes 는 1보다 커야함
fig.set_figwidth(12)
fig.set_figheight(12)
fig.tight_layout()
fig