是否有人试过复现《GMAN: A Graph Multi-Attention Network for Traffic Prediction
》这篇论文的代码。我的在test阶段算出的MAPE是nan%。请问是否有人知道为什么会出现这样的问题,改如何解决?

是否有人试过复现《GMAN: A Graph Multi-Attention Network for Traffic Prediction
》这篇论文的代码。我的在test阶段算出的MAPE是nan%。请问是否有人知道为什么会出现这样的问题,改如何解决?

以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
为了更准确地理解您的问题并提供相应的解决方案,我将进行以下几个步骤:
MAPE中的NaN值。MAPE计算的因素(例如,数据类型、异常值等)。MAPE函数是否正确实现,以及是否有任何潜在错误导致NaN值。首先,让我们查看您提供的MAPE计算结果。请注意,这些数字都是NaN,这意味着它们不被接受并且被视为无效。这可能是由于一些原因造成的,如输入数据中存在大量NaN值或者处理过程中发生了某种异常。
确认NaN值:首先,我们需要确定哪些行或列包含NaN值。这通常可以通过检查np.isnan()方法返回的结果来完成,其中np.isnan(array)会返回一个布尔数组,表示给定数组中每个元素是否为NaN。
import numpy as np
# 假设我们有DataFrame df,并且想要找出包含NaN的行
nan_rows = df[df.isna().any(axis=1)]
print("包含NaN的行:", nan_rows)
分析原因:一旦确定了包含NaN的行,我们可以进一步分析这些值是如何产生的。这可能涉及对数据清洗过程的审查,以确保所有必要的清理步骤都已完成。
修正代码:如果确实存在问题,可以尝试修复代码逻辑,确保所有输入数据都被正确处理。这可能包括添加异常处理、数据预处理步骤或重新设计算法结构。
验证准确性:最终,通过运行新的测试数据集,验证修正后的MAPE是否仍然产生预期的输出。
假设我们有一个包含df的数据框,其中y_true是实际目标值,y_pred是我们预测的目标值,我们想计算的是MAPE。
import numpy as np
def calculate_mape(y_true, y_pred):
"""
Calculate Mean Absolute Percentage Error (MAPE) between true and predicted values.
Parameters:
- y_true: Array-like of shape (n_samples,) containing the actual target values.
- y_pred: Array-like of shape (n_samples,) containing the predicted target values.
Returns:
- The MAPE value.
"""
# Convert arrays to Numpy arrays for consistency with np.isnan()
y_true, y_pred = np.array(y_true), np.array(y_pred)
# Check if there are any NaN values in either array
has_nan = np.isnan(y_true).any() or np.isnan(y_pred).any()
if has_nan:
raise ValueError("Input data contains NaN values.")
# Calculate MAPE
mape = np.mean(np.abs((y_true - y_pred) / y_true)) * 100
return mape
# 示例数据
data = {
'y_true': [2.04, 2.22, 2.10],
'y_pred': [1.71, 1.80, 2.16]
}
mape = calculate_mape(data['y_true'], data['y_pred'])
print(f"Mean Absolute Percentage Error (MAPE): {mape:.2f}%")
在这个示例中,我们首先定义了一个calculate_mape函数,用于计算MAPE。然后我们创建了一个包含真实值和预测值的字典,调用此函数并打印结果。注意,这里假定了y_true和y_pred已经进行了转换以便于比较。
如果您能提供更多有关数据集的信息,比如原始数据是什么样的,以及具体遇到的问题所在,我可以为您提供更具体的建议。