Skip to content

Commit

Permalink
update mape
Browse files Browse the repository at this point in the history
  • Loading branch information
moreOver0 committed Jun 11, 2020
1 parent 89be247 commit 7d5cc7f
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 19 deletions.
23 changes: 16 additions & 7 deletions data_loader/data_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,7 @@ def data_gen(file_path, n_route, train_val_test_ratio, scalar, n_frame, day_slot
my_matrix = np.array(data_seq)
scaler = MinMaxScaler()
scaler.fit(my_matrix)
scaler.data_max_
data_seq = scaler.transform(my_matrix)

# data_seq=data_seq[~(data_seq==0).all(axis=1), :]
print(data_seq.shape)
except FileNotFoundError:
Expand All @@ -133,6 +131,16 @@ def data_gen(file_path, n_route, train_val_test_ratio, scalar, n_frame, day_slot
train_len = int(n_train * length)
val_len = int(n_val * length)
test_len = int(n_test * length)

seq_train = data_seq[:train_len]

if scalar == 'z_score':
x_stats = {'mean': np.mean(seq_train), 'std': np.std(seq_train)}
else:
x_stats = {'mean': 0, 'std': 1}

data_seq = z_score(data_seq, x_stats['mean'], x_stats['std'])

seq_train = seq_gen(train_len, data_seq, 0, n_frame, n_route, day_slot)
seq_val = seq_gen(val_len, data_seq, train_len, n_frame, n_route, day_slot)
seq_test = seq_gen(test_len, data_seq, train_len + val_len, n_frame, n_route, day_slot)
Expand All @@ -149,11 +157,12 @@ def data_gen(file_path, n_route, train_val_test_ratio, scalar, n_frame, day_slot
# x_stats: dict, the stats for the train dataset, including the value of mean and standard deviation.

# x_train, x_val, x_test: np.array, [sample_size, n_frame, n_route, channel_size].
x_train = z_score(seq_train, x_stats['mean'], x_stats['std'])
x_val = z_score(seq_val, x_stats['mean'], x_stats['std'])
x_test = z_score(seq_test, x_stats['mean'], x_stats['std'])

x_data = {'train': x_train, 'val': x_val, 'test': x_test}
# x_train = z_score(seq_train, x_stats['mean'], x_stats['std'])
# x_val = z_score(seq_val, x_stats['mean'], x_stats['std'])
# x_test = z_score(seq_test, x_stats['mean'], x_stats['std'])
#
# x_data = {'train': x_train, 'val': x_val, 'test': x_test}
x_data = {'train': seq_train, 'val': seq_val, 'test': seq_test}
dataset = Dataset(x_data, x_stats)
return dataset

Expand Down
8 changes: 4 additions & 4 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@
parser.add_argument('--n_route', type=int, default=140)
parser.add_argument('--n_his', type=int, default=12)
parser.add_argument('--n_pred', type=int, default=3)
parser.add_argument('--train_length', type=float, default=15)
parser.add_argument('--validate_length', type=float, default=1)
parser.add_argument('--test_length', type=float, default=1)
parser.add_argument('--train_length', type=float, default=6)
parser.add_argument('--validate_length', type=float, default=2)
parser.add_argument('--test_length', type=float, default=2)
parser.add_argument('--batch_size', type=int, default=50)
parser.add_argument('--epoch', type=int, default=15)
parser.add_argument('--epoch', type=int, default=50)
parser.add_argument('--save', type=int, default=3)
parser.add_argument('--ks', type=int, default=3)
parser.add_argument('--kt', type=int, default=3)
Expand Down
23 changes: 15 additions & 8 deletions utils/math_utils.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@


import numpy as np
import math

import pandas as pd
from scipy.stats import pearsonr


def z_score(x, mean, std):
'''
Z-score normalization function: $z = (X - \mu) / \sigma $,
Expand All @@ -14,7 +15,12 @@ def z_score(x, mean, std):
:param std: float, the value of standard deviation.
:return: np.ndarray, z-score normalized array.
'''
return (x - mean) / std
x = (x - mean) / std
x[np.where(x == 0)] = np.nan
x = pd.DataFrame(x)
x = x.fillna(method='ffill', limit=len(x)).fillna(method='bfill', limit=len(x))
x = np.asarray(x.values)
return x


def z_inverse(x, mean, std):
Expand All @@ -35,7 +41,7 @@ def MAPE(v, v_):
:param v_: np.ndarray or int, prediction.
:return: int, MAPE averages on all elements of input.
'''
return np.mean(np.abs(v_ - v) / (v + 1e-5))
return np.mean(np.abs((v_ - v) / v))


def RMSE(v, v_):
Expand All @@ -57,9 +63,11 @@ def MAE(v, v_):
'''
return np.mean(np.abs(v_ - v))


def rrse_(y_true, y_pred):
return np.sqrt(np.sum((y_true - y_pred) ** 2) / np.sum((y_true - np.mean(y_true)) ** 2))


def CORR(y_true, y_pred):
y_true = np.array(y_true, 'float32')
y_pred = np.array(y_pred, 'float32')
Expand Down Expand Up @@ -87,15 +95,14 @@ def evaluation(y, y_, x_stats):
'''
dim = len(y_.shape)

#print(y)
#print(y_)

# print(y)
# print(y_)
if dim == 3:
# single_step case
v = z_inverse(y, x_stats['mean'], x_stats['std'])
v_ = z_inverse(y_, x_stats['mean'], x_stats['std'])
return np.array([MAPE(v, v_), MAE(v, v_), RMSE(v, v_)])
#return np.array([rrse_(v, v_), MAE(v, v_), CORR(v, v_)])
# return np.array([rrse_(v, v_), MAE(v, v_), CORR(v, v_)])
else:
# multi_step case
tmp_list = []
Expand Down

0 comments on commit 7d5cc7f

Please sign in to comment.