使用python计算AI天气预报中的ACC(异常相关系数,距平相关系数,Anomaly Correlation Coefficient)
本文用以记录python计算AI天气预报中的ACC代码,其中使用的气候态数据需要用户自己去谷歌云存储中下载
一、ACC介绍与计算公式
原始文章:https://blog.csdn.net/m0_52317152/article/details/135452342
通过计算预报与观测之间的相关性,来衡量预报系统质量。
由于季节变化,直接将预报与观测或分析相关联可能会给出误导性的高值。因此,通常的做法是从预报和验证中减去气候平均值,并根据异常相关系数(ACC)来验证预报和观测的异常。ACC最简单的形式可以写成:
A
C
C
=
(
f
−
c
)
(
a
−
c
)
‾
(
f
−
c
)
‾
2
(
a
−
c
)
‾
2
ACC=\frac{\overline{(f-c)(a-c)}}{\sqrt{\overline{(f-c)}^2\overline{(a-c)}^2}}
ACC=(f−c)2(a−c)2(f−c)(a−c)
其中,
f
f
f代表预测值,
a
a
a为ground truth,
c
c
c为气候态climatology。
理论上ACC越接近1说明预报技巧越高。
二、气候态数据获取
可以直接参考https://blog.csdn.net/weixin_43934886/article/details/139163630?spm=1001.2014.3001.5501
1.环境准备
zarr是一种分布式存储格式,可以直接通过python的xarray包在线读取并调用
首先确保已经安装了numpy,xarray,以及zarr
接着编写python脚本
这里以下载weatherbench2的climatology为例
进入网站 https://console.cloud.google.com/storage/browser/weatherbench2;tab=objects?prefix=&forceOnObjectsSortingFiltering=false
2.编写脚本
import xarray as xr
import numpy as np
climatology = xr.open_zarr('gs://weatherbench2/datasets/era5-hourly-climatology/1990-2019_6h_1440x721.zarr')
#以下载位势高度的气候态为例
geopotential=climatology.geopotential
for idx in range(geopotential.shape[1]):
temp=geopotential[:,idx]
file_name = '想放置的文件目录/geopotential'+'_'+str(idx)+'.npy'
np.save(file_name,temp)
一般来讲该数据的维度为366x[4,721,1440]
每日气候态只有0,6,12,18四个时间点,也就是每六小时预报才能计算一次ACC。
这样可以保存逐日的气候态文件
其他zarr文件下载方式同理
三、定义ACC函数
首先定义分辨率
res=1
lat_len=1+180/res
lon_len=360/res
这里假设res分辨率为1度,若想要计算0.25度,则修改res为0.25即可
我们通过定义纬度权重函数来稀释南北两极的密集网格权重
def gen_weight(lat_len,lon_len):
lat = np.linspace(-90, 90, lat_len)
lon = np.linspace(0, 359, lon_len)
weights = np.cos(lat*np.pi/180)
W=np.tile(weights,(len(lon),1)).T
return W
def weighted_average(x):
W = gen_weight()
z=np.average(x,weights=W)
return z
接着根据ACC公式设计计算函数
def acc(pre,true):
a= weighted_average(true*pre)
b=np.sqrt(weighted_average(true*true))
c=np.sqrt(weighted_average(pre*pre))
return a/b/c
这样就可以得到一个分辨率为1度下的ACC了
四、计算ACC
假设通过模型计算出了结果output,真实值是label,气候态经过下载是climatology
则ACC可由下列代码计算
ACC=acc(output-climatology,label-climatology)
注意这里output和label都是反归一化后的值
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)