前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >气象大模型论文中评估指标的计算详解

气象大模型论文中评估指标的计算详解

作者头像
自学气象人
发布2023-09-05 17:54:01
3900
发布2023-09-05 17:54:01
举报
文章被收录于专栏:自学气象人自学气象人

最近气象大模型比较火,分享一下在气象大模型论文中常见的几个评估指标(RMSE,ACC,MAE)的计算方法。

1计算方法

代码语言:javascript
复制
import numpy as np
import xarray as xr

def compute_weighted_rmse(da_fc, da_true, mean_dims=xr.ALL_DIMS):
    """
    计算具有纬度加权的两个 xr.DataArrays 之间的 RMSE。

    参数:
        da_fc (xr.DataArray): 预测值。
        da_true (xr.DataArray): 真值。
        mean_dims: 要平均的维度
    返回:
        rmse: 纬度加权的均方根误差
    """
    error = da_fc - da_true
    weights_lat = np.cos(np.deg2rad(error.lat))
    weights_lat /= weights_lat.mean()
    rmse = np.sqrt(((error)**2 * weights_lat).mean(mean_dims))
    return rmse

def compute_weighted_acc(da_fc, da_true, mean_dims=xr.ALL_DIMS):
    """
    计算具有纬度加权的两个 xr.DataArrays 之间的 ACC。

    参数:
        da_fc (xr.DataArray): 预测值。
        da_true (xr.DataArray): 真值。
        mean_dims: 要平均的维度
    返回:
        acc: 纬度加权的异常相关系数
    """

    clim = da_true.mean('time')
    try:
        t = np.intersect1d(da_fc.time, da_true.time)
        fa = da_fc.sel(time=t) - clim
    except AttributeError:
        t = da_true.time.values
        fa = da_fc - clim
    a = da_true.sel(time=t) - clim

    weights_lat = np.cos(np.deg2rad(da_fc.lat))
    weights_lat /= weights_lat.mean()
    w = weights_lat

    fa_prime = fa - fa.mean()
    a_prime = a - a.mean()

    acc = (
            np.sum(w * fa_prime * a_prime) /
            np.sqrt(
                np.sum(w * fa_prime ** 2) * np.sum(w * a_prime ** 2)
            )
    )
    return acc

def compute_weighted_mae(da_fc, da_true, mean_dims=xr.ALL_DIMS):
    """
    计算具有纬度加权的两个 xr.DataArrays 之间的 MAE。
    参数:
        da_fc (xr.DataArray): 预测值。
        da_true (xr.DataArray): 真值。
        mean_dims: 要平均的维度
    返回:
        mae: 纬度加权的平均绝对误差
    """
    error = da_fc - da_true
    weights_lat = np.cos(np.deg2rad(error.lat))
    weights_lat /= weights_lat.mean()
    mae = (np.abs(error) * weights_lat).mean(mean_dims)
    return mae

2计算示例

代码语言:javascript
复制
import xarray as xr
import numpy as np

# 定义时间、纬度和经度的维度大小
time_size = 10
lat_size = 5
lon_size = 5

# 生成随机数据数组1
data_array1 = xr.DataArray(np.random.rand(time_size, lat_size, lon_size),
                           dims=('time', 'lat', 'lon'),
                           coords={'time': range(time_size), 'lat': range(lat_size), 'lon': range(lon_size)})

# 生成随机数据数组2
data_array2 = xr.DataArray(np.random.rand(time_size, lat_size, lon_size),
                           dims=('time', 'lat', 'lon'),
                           coords={'time': range(time_size), 'lat': range(lat_size), 'lon': range(lon_size)})

# 打印数据数组1
print("Data Array 1:")
print(data_array1)

# 打印数据数组2
print("Data Array 2:")
print(data_array2)

#rmse
print(compute_weighted_rmse(data_array1,data_array2))

#acc
print(compute_weighted_acc(data_array1,data_array2))

#mae
print(compute_weighted_mae(data_array1,data_array2))

参考:https://github.com/xiazh18/WeatherBench/blob/master/src/score.py

历史文章推荐

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 自学气象人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1计算方法
  • 2计算示例
  • 历史文章推荐
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档