北走帥 2024-09-21 14:15 采纳率: 0%
浏览 2

关于MAPE出现nan%的问题,如何解决?

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

img

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-21 14:16
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    为了更准确地理解您的问题并提供相应的解决方案,我将进行以下几个步骤:

    1. 确认MAPE中的NaN值。
    2. 分析可能影响MAPE计算的因素(例如,数据类型、异常值等)。
    3. 检查MAPE函数是否正确实现,以及是否有任何潜在错误导致NaN值。

    首先,让我们查看您提供的MAPE计算结果。请注意,这些数字都是NaN,这意味着它们不被接受并且被视为无效。这可能是由于一些原因造成的,如输入数据中存在大量NaN值或者处理过程中发生了某种异常。

    解决方案:

    1. 确认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)
      
    2. 分析原因:一旦确定了包含NaN的行,我们可以进一步分析这些值是如何产生的。这可能涉及对数据清洗过程的审查,以确保所有必要的清理步骤都已完成。

    3. 修正代码:如果确实存在问题,可以尝试修复代码逻辑,确保所有输入数据都被正确处理。这可能包括添加异常处理、数据预处理步骤或重新设计算法结构。

    4. 验证准确性:最终,通过运行新的测试数据集,验证修正后的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_truey_pred已经进行了转换以便于比较。

    如果您能提供更多有关数据集的信息,比如原始数据是什么样的,以及具体遇到的问题所在,我可以为您提供更具体的建议。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月21日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?