STGCN_IJCAI-18-master代码解读(三):math_utils.py


在这里插入图片描述

解读math_utils.py

import numpy as np

z_score()函数

def z_score(x, mean, std):
    '''
    Z-score normalization function: $z = (X - \mu) / \sigma $,
    where z is the z-score, X is the value of the element,
    $\mu$ is the population mean, and $\sigma$ is the standard deviation.
    :param x: np.ndarray, input array to be normalized.
    :param mean: float, the value of mean.
    :param std: float, the value of standard deviation.
    :return: np.ndarray, z-score normalized array.
    '''
    return (x - mean) / std

z_score 函数

该函数用于执行Z-score标准化,将数据转化为均值为0和标准差为1的形式。

  • 参数:
    • x: 输入的numpy数组。
    • mean: 均值。
    • std: 标准差。
  • 返回值: 经过Z-score标准化后的数组。

z_inverse()函数

def z_inverse(x, mean, std):
    '''
    The inverse of function z_score().
    :param x: np.ndarray, input to be recovered.
    :param mean: float, the value of mean.
    :param std: float, the value of standard deviation.
    :return: np.ndarray, z-score inverse array.
    '''
    return x * std + mean

z_inverse 函数

这个函数是z_score函数的逆操作,用于恢复被标准化的数据。

  • 参数和返回值与z_score类似。

MAPE()函数

def MAPE(v, v_):
    '''
    Mean absolute percentage error.
    :param v: np.ndarray or int, ground truth.
    :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))

MAPE 函数

该函数用于计算平均绝对百分比误差(Mean Absolute Percentage Error)。

  • 参数:
    • v: 真实值。
    • v_: 预测值。
  • 返回值: MAPE值。

RMSE()函数

def RMSE(v, v_):
    '''
    Mean squared error.
    :param v: np.ndarray or int, ground truth.
    :param v_: np.ndarray or int, prediction.
    :return: int, RMSE averages on all elements of input.
    '''
    return np.sqrt(np.mean((v_ - v) ** 2))

RMSE 函数

该函数用于计算均方根误差(Root Mean Square Error)。

  • 参数与MAPE类似。
  • 返回值: RMSE值。

MAE()函数

def MAE(v, v_):
    '''
    Mean absolute error.
    :param v: np.ndarray or int, ground truth.
    :param v_: np.ndarray or int, prediction.
    :return: int, MAE averages on all elements of input.
    '''
    return np.mean(np.abs(v_ - v))

MAE 函数

该函数用于计算平均绝对误差(Mean Absolute Error)。

  • 参数与MAPE类似。
  • 返回值: MAE值。

evaluation()函数

def evaluation(y, y_, x_stats):
    '''
    Evaluation function: interface to calculate MAPE, MAE and RMSE between ground truth and prediction.
    Extended version: multi-step prediction can be calculated by self-calling.
    :param y: np.ndarray or int, ground truth.
    :param y_: np.ndarray or int, prediction.
    :param x_stats: dict, paras of z-scores (mean & std).
    :return: np.ndarray, averaged metric values.
    '''
    dim = len(y_.shape)

    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_)])
    else:
        # multi_step case
        tmp_list = []
        # y -> [time_step, batch_size, n_route, 1]
        y = np.swapaxes(y, 0, 1)
        # recursively call
        for i in range(y_.shape[0]):
            tmp_res = evaluation(y[i], y_[i], x_stats)
            tmp_list.append(tmp_res)
        return np.concatenate(tmp_list, axis=-1)

evaluation 函数

这是一个评估函数,用于计算预测模型的性能。具体来说,它计算三种常用的误差指标:平均绝对百分比误差(MAPE)、平均绝对误差(MAE)和均方根误差(RMSE)。

函数参数:

  • y: 这是模型预测的真实值(ground truth),可以是一个多维的Numpy数组或整数。
  • y_: 这是模型的预测值,其维度和类型应与y相同。
  • x_stats: 这是一个字典,其中包含用于Z-score标准化的均值和标准差。

返回值:

  • 函数返回一个Numpy数组,包含了MAPE、MAE和RMSE的值。

代码流程:

  1. 检查维度dim = len(y_.shape)用于获取预测值y_的维度。

  2. 单步预测 vs. 多步预测:根据y_的维度,函数会区分处理单步预测和多步预测。

    • 单步预测(dim==3):

      1. 使用z_inverse函数将标准化的yy_逆转为原始尺度。
      2. 计算MAPE、MAE和RMSE。
      3. 返回一个包含这三个指标的Numpy数组。
    • 多步预测(dim!=3):

      1. 创建一个空列表tmp_list用于存储每一步的评估结果。
      2. 使用np.swapaxes(y, 0, 1)交换y数组的轴以适应递归调用。
      3. 使用递归调用evaluation函数来评估每一个时间步,并将结果存储在tmp_list中。
      4. 使用np.concatenate将所有时间步的结果合并,并返回。

总体而言,这个函数非常灵活,能够处理单步预测和多步预测,并为每种情况提供多种评估指标。这使得它成为评估时间序列预测模型性能的有力工具。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值