Python实现系列:
Python实现贝叶斯优化算法
python实现t-SNE降维
Python实现12种降维算法
Python实现11 种特征选择策略
Python实现10种聚类算法
Python实现8种相似度度量
python实现反距离权重插值(IDW)
Python实现12种概率分布
python实现快速傅里叶变换
python实现隐马尔可夫模型
在任何测量中都能存在系统误差和随机误差:
系统误差又有独立误差和非独立误差之分:
目前概率密度匹配法 (probability density function matching method,简称PDF方法)在订正非独立系统误差方面具有优越性,因此本文准备尝试。
① 对每个格点选取时空窗口,收集匹配的地面观测和卫星降水格点资料,如选取当前日期起向前共取 30 d 30 d 30d 作为时间窗口,以目标格点为中心的 10 ° × 10 ° 10°×10° 10°×10° 空间范围作为空间窗口。
② 将上述时空窗口中有观测站点,且地面观测和卫星降水资料均为非缺测的格点值纳入统计,选取的样本数至少为 300 个,如达不到要求,搜索的空间范围适当扩大。
③ 计算每个格点卫星降水量 ( R s R_s Rs) 的累积概率密度 ( f s f_s fs),以及该概率密度所对应的地面降水量 ( R g R_g Rg),得到订正值 (Δr),则订正后的卫星降水量 ( R c R_c Rc) 为 R c = R s − Δ r R_c=R_s-Δr Rc=Rs−Δr。
1)构建数据集
import scipy.stats as st
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
grid = np.random.randint(0,1000, size=10000)
grid = grid.reshape(100,100)
ix = np.random.randint(0,100,size=300)
iy = np.random.randint(0,100, size=300)
station = np.random.randint(100,800,size=300)
grid_station = grid[iy,ix]

2)计算概率密度
# 累计概率密度
cdf_station = st.norm.cdf(station,loc=np.mean(station),scale=np.std(station)) # 返回每个数据点累计概率
cdf_grid = st.norm.cdf(grid,loc=np.mean(grid),scale=np.std(grid))

3)概率密度匹配
cdf_grid_station = cdf_grid[iy,ix]
delta = np.zeros(cdf_grid_station.shape)
for i, prob in enumerate(cdf_grid_station):
for j , prob_true in enumerate(cdf_station):
if abs(prob-prob_true)<=0.01:
delta[i]=grid_station[i]-station[j]
break
4)查看效果

蓝色:订正前误差,橙色:订正后误差。从图上来看,有一定效果。
5)格点偏差订正
直接对偏差进行插值即可。
关注公众号我不爱机器学习,后台回复pdf,即可获取完整代码链接。
参考:http://html.rhhz.net/yyqxxb/html/20130504.htm