libcity.data.dataset.traffic_state_datatset¶
-
class
libcity.data.dataset.traffic_state_datatset.
TrafficStateDataset
(config)[source]¶ Bases:
libcity.data.dataset.abstract_dataset.AbstractDataset
交通状态预测数据集的基类。 默认使用`input_window`的数据预测`output_window`对应的数据,即一个X,一个y。 一般将外部数据融合到X中共同进行预测,因此数据为[X, y]。 默认使用`train_rate`和`eval_rate`在样本数量(num_samples)维度上直接切分训练集、测试集、验证集。
-
_add_external_information
(df, ext_data=None)[source]¶ 将外部数据和原始交通状态数据结合到高维数组中,子类必须实现这个方法来指定如何融合外部数据和交通状态数据, 如果不想加外部数据,可以把交通状态数据`df`直接返回, 提供3个实现好的方法适用于不同形状的交通状态数据跟外部数据结合: _add_external_information_3d/_add_external_information_4d/_add_external_information_6d
- Parameters
df (np.ndarray) – 交通状态数据多维数组
ext_data (np.ndarray) – 外部数据
- Returns
融合后的外部数据和交通状态数据
- Return type
np.ndarray
-
_add_external_information_3d
(df, ext_data=None)[source]¶ 增加外部信息(一周中的星期几/day of week,一天中的某个时刻/time of day,外部数据)
- Parameters
df (np.ndarray) – 交通状态数据多维数组, (len_time, num_nodes, feature_dim)
ext_data (np.ndarray) – 外部数据
- Returns
融合后的外部数据和交通状态数据, (len_time, num_nodes, feature_dim_plus)
- Return type
np.ndarray
-
_add_external_information_4d
(df, ext_data=None)[source]¶ 增加外部信息(一周中的星期几/day of week,一天中的某个时刻/time of day,外部数据)
- Parameters
df (np.ndarray) – 交通状态数据多维数组, (len_time, len_row, len_column, feature_dim)
ext_data (np.ndarray) – 外部数据
- Returns
融合后的外部数据和交通状态数据, (len_time, len_row, len_column, feature_dim_plus)
- Return type
np.ndarray
-
_add_external_information_6d
(df, ext_data=None)[source]¶ 增加外部信息(一周中的星期几/day of week,一天中的某个时刻/time of day,外部数据)
- Parameters
df (np.ndarray) – 交通状态数据多维数组, (len_time, len_row, len_column, len_row, len_column, feature_dim)
ext_data (np.ndarray) – 外部数据
- Returns
融合后的外部数据和交通状态数据, (len_time, len_row, len_column, len_row, len_column, feature_dim)
- Return type
np.ndarray
-
_calculate_adjacency_matrix
()[source]¶ 使用带有阈值的高斯核计算邻接矩阵的权重,如果有其他的计算方法,可以覆盖这个函数, 公式为:$ w_{ij} = exp left(- frac{d_{ij}^{2}}{sigma^{2}} right) $, $sigma$ 是方差, 小于阈值`weight_adj_epsilon`的值设为0:$ w_{ij}[w_{ij}<epsilon]=0 $
- Returns
self.adj_mx, N*N的邻接矩阵
- Return type
np.ndarray
-
_generate_data
()[source]¶ 加载数据文件(.dyna/.grid/.od/.gridod)和外部数据(.ext),且将二者融合,以X,y的形式返回
- Returns
- tuple contains:
x(np.ndarray): 模型输入数据,(num_samples, input_length, …, feature_dim)
y(np.ndarray): 模型输出数据,(num_samples, output_length, …, feature_dim)
- Return type
tuple
-
_generate_input_data
(df)[source]¶ 根据全局参数`input_window`和`output_window`切分输入,产生模型需要的张量输入, 即使用过去`input_window`长度的时间序列去预测未来`output_window`长度的时间序列
- Parameters
df (np.ndarray) – 数据数组,shape: (len_time, …, feature_dim)
- Returns
- tuple contains:
x(np.ndarray): 模型输入数据,(epoch_size, input_length, …, feature_dim)
y(np.ndarray): 模型输出数据,(epoch_size, output_length, …, feature_dim)
- Return type
tuple
-
_generate_train_val_test
()[source]¶ 加载数据集,并划分训练集、测试集、验证集,并缓存数据集
- Returns
- tuple contains:
x_train: (num_samples, input_length, …, feature_dim)
y_train: (num_samples, input_length, …, feature_dim)
x_val: (num_samples, input_length, …, feature_dim)
y_val: (num_samples, input_length, …, feature_dim)
x_test: (num_samples, input_length, …, feature_dim)
y_test: (num_samples, input_length, …, feature_dim)
- Return type
tuple
-
_get_scalar
(scaler_type, x_train, y_train)[source]¶ 根据全局参数`scaler_type`选择数据归一化方法
- Parameters
x_train – 训练数据X
y_train – 训练数据y
- Returns
归一化对象
- Return type
-
_load_cache_train_val_test
()[source]¶ 加载之前缓存好的训练集、测试集、验证集
- Returns
- tuple contains:
x_train: (num_samples, input_length, …, feature_dim)
y_train: (num_samples, input_length, …, feature_dim)
x_val: (num_samples, input_length, …, feature_dim)
y_val: (num_samples, input_length, …, feature_dim)
x_test: (num_samples, input_length, …, feature_dim)
y_test: (num_samples, input_length, …, feature_dim)
- Return type
tuple
-
_load_dyna
(filename)[source]¶ 加载数据文件(.dyna/.grid/.od/.gridod),子类必须实现这个方法来指定如何加载数据文件,返回对应的多维数据, 提供5个实现好的方法加载上述几类文件,并转换成不同形状的数组: _load_dyna_3d/_load_grid_3d/_load_grid_4d/_load_grid_od_4d/_load_grid_od_6d
- Parameters
filename (str) – 数据文件名,不包含后缀
- Returns
数据数组
- Return type
np.ndarray
-
_load_dyna_3d
(filename)[source]¶ 加载.dyna文件,格式[dyna_id, type, time, entity_id, properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载
- Parameters
filename (str) – 数据文件名,不包含后缀
- Returns
数据数组, 3d-array: (len_time, num_nodes, feature_dim)
- Return type
np.ndarray
-
_load_ext
()[source]¶ 加载.ext文件,格式[ext_id, time, properties(若干列)], 其中全局参数`ext_col`用于指定需要加载的数据的列,不设置则默认全部加载
- Returns
外部数据数组,shape: (timeslots, ext_dim)
- Return type
np.ndarray
-
_load_grid_3d
(filename)[source]¶ 加载.grid文件,格式[dyna_id, type, time, row_id, column_id, properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载,
- Parameters
filename (str) – 数据文件名,不包含后缀
- Returns
数据数组, 3d-array: (len_time, num_grids, feature_dim)
- Return type
np.ndarray
-
_load_grid_4d
(filename)[source]¶ 加载.grid文件,格式[dyna_id, type, time, row_id, column_id, properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载
- Parameters
filename (str) – 数据文件名,不包含后缀
- Returns
数据数组, 4d-array: (len_time, len_row, len_column, feature_dim)
- Return type
np.ndarray
-
_load_grid_geo
()[source]¶ 加载.geo文件,格式[geo_id, type, coordinates, row_id, column_id, properties(若干列)]
-
_load_grid_od_4d
(filename)[source]¶ 加载.gridod文件,格式[dyna_id, type, time, origin_row_id, origin_column_id, destination_row_id, destination_column_id, properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载
- Parameters
filename (str) – 数据文件名,不包含后缀
- Returns
数据数组, 4d-array: (len_time, num_grids, num_grids, feature_dim)
- Return type
np.ndarray
-
_load_grid_od_6d
(filename)[source]¶ 加载.gridod文件,格式[dyna_id, type, time, origin_row_id, origin_column_id, destination_row_id, destination_column_id, properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载
- Parameters
filename (str) – 数据文件名,不包含后缀
- Returns
数据数组, 6d-array: (len_time, len_row, len_column, len_row, len_column, feature_dim)
- Return type
np.ndarray
-
_load_grid_rel
()[source]¶ 根据网格结构构建邻接矩阵,一个格子跟他周围的8个格子邻接
- Returns
self.adj_mx, N*N的邻接矩阵
- Return type
np.ndarray
-
_load_od_4d
(filename)[source]¶ 加载.od文件,格式[dyna_id, type, time, origin_id, destination_id properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载
- Parameters
filename (str) – 数据文件名,不包含后缀
- Returns
数据数组, 4d-array: (len_time, len_row, len_column, feature_dim)
- Return type
np.ndarray
-
_load_rel
()[source]¶ 加载.rel文件,格式[rel_id, type, origin_id, destination_id, properties(若干列)], 生成N*N的邻接矩阵,计算逻辑如下: (1) 权重所对应的列名用全局参数`weight_col`来指定, (2) 若没有指定该参数, (2.1) rel只有4列,则认为rel中的每一行代表一条邻接边,权重为1。其余边权重为0,代表不邻接。 (2.2) rel只有5列,则默认最后一列为`weight_col` (2.3) 否则报错 (3) 根据得到的权重列`weight_col`计算邻接矩阵 (3.1) 参数`bidir_adj_mx`=True代表构造无向图,=False为有向图 (3.2) 参数`set_weight_link_or_dist`为`link`代表构造01矩阵,为`dist`代表构造权重矩阵(非01) (3.3) 参数`init_weight_inf_or_zero`为`zero`代表矩阵初始化为全0,`inf`代表矩阵初始化成全inf,初始化值也就是rel文件中不存在的边的权值 (3.4) 参数`calculate_weight_adj`=True表示对权重矩阵应用带阈值的高斯核函数进行稀疏化,对01矩阵不做处理,=False不进行稀疏化,
修改函数self._calculate_adjacency_matrix()可以构造其他方法替换全阈值高斯核的稀疏化方法
- Returns
self.adj_mx, N*N的邻接矩阵
- Return type
np.ndarray
-
_split_train_val_test
(x, y)[source]¶ 划分训练集、测试集、验证集,并缓存数据集
- Parameters
x (np.ndarray) – 输入数据 (num_samples, input_length, …, feature_dim)
y (np.ndarray) – 输出数据 (num_samples, input_length, …, feature_dim)
- Returns
- tuple contains:
x_train: (num_samples, input_length, …, feature_dim)
y_train: (num_samples, input_length, …, feature_dim)
x_val: (num_samples, input_length, …, feature_dim)
y_val: (num_samples, input_length, …, feature_dim)
x_test: (num_samples, input_length, …, feature_dim)
y_test: (num_samples, input_length, …, feature_dim)
- Return type
tuple
-