泰勒图(Taylor Diagrams)原理及绘制

🌞欢迎来到深度学习的世界 
🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


泰勒图的原理

比如我有一个模型A里面有三个值(x1,x2,x3)

                      模型B里面有三个值(y1,y2,y3)

                      真实值:(m1,m2,m3)

怎么知道每个模型预测的效果好坏呐?

一般有三个指标:

相关系数(R):如果两个数据相关性很高的话,说明模拟效果是可以的。

RMSE:其实和相关系数是有关的,模型和真实值的差距。(RMSE接近于0,说明R接近于1)模型值A与真实值M的中心均方根误差

                                        

std(标准差):模型值A自身的标准差(方差开根号,方差描述的是数值的偏离程度)

   泰勒图:泰勒图常用于评价模型的精度,常用的精度指标有相关系数,标准差以及均方根误差(RMSE)。一般而言,泰勒图中的散点代表模型,辐射线代表相关系数横和纵轴代表模型值和真实值标准差,而虚线代表均方根误差

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ SkillMetrics

代码如下:

import skill_metrics as sm
import matplotlib.pyplot as plt
import numpy as np

# 提供数据
sd = np.array([1, 0.82, 1.12, 1.48])
cc = np.array([1, 0.48, 0.36, 0.74])
rmsd = np.array([0, 1.68, 1.57, 1.92])
label = ['obs', 'RF', 'XGBoost', 'GBRT']

# 创建图表
fig = plt.figure(figsize=(10, 8))
ax = fig.add_axes([0.1, 0.1, 0.75, 0.75])  # 调整图表位置和大小

# 绘图
sm.taylor_diagram(sd, rmsd, cc, markerLabel=label, markercolor="k", markerSize=8, markerLegend='on',
                  colCOR="k", styleCOR="--", widthCOR=0.5,
                  colSTD="k", widthSTD=0.9, styleSTD="--", axismax=1.7,
                  widthRMS=0.5, labelRMS=':', colRMS='m',
                  colOBS="r", styleOBS="--", widthOBS=1)  # 改变观测值线的颜色为红色

# 设置图表样式
ax.grid(False)
ax.set_title("Taylor Diagram", fontsize=16)  # 添加标题
ax.tick_params(labelsize=12)  # 调整刻度标签字体大小

plt.show()

    

sm.taylor_diagram(sd, rmsd, cc,
                      markerDisplayed = 'colorBar', titleColorbar = 'RMSD',
                     locationColorBar = 'EastOutside',
                      cmapzdata = rmsd, titleRMS = 'off',
                      colOBS="r", styleOBS="--", widthOBS=2.0,
                      colRMS = 'g', styleRMS = ':', widthRMS = 1.8,
                      colSTD = 'k', styleSTD = '-', widthSTD = 0.9, axismax=1.7,
                      colCOR = 'k', styleCOR = '--', widthCOR = 0.5)
text_font = {'size':'15','weight':'bold','color':'black'}

### 泰勒图的概念 泰勒图是一种用于评估模型性能的图形工具,尤其适用于比较不同模型之间的表现。该图表通过可视化的方式展示观测数据与模拟数据间的差异,能够直观地反映出模型预测能力的好坏[^1]。 具体来说,在泰勒图中: - **标准化标准差**:表示沿径向方向的距离,反映了变量的变化幅度; - **相关系数**:决定了角度位置,衡量的是两个随机变量之间线性关系的程度; - **中心点**代表完美匹配的位置;其他任何一点到原点的距离越短越好,意味着更接近真实情况下的分布特征。 这种类型的图表最初由 Karl E. Taylor 提出并广泛应用于气象学领域中的模式验证工作当中[^2]。 ```python import numpy as np from matplotlib import pyplot as plt def taylor_diagram(stddevs, corrs): """ 绘制简单的泰勒图 参数: stddevs (list): 各组样本的标准偏差列表 corrs (list): 对应的相关系数列表 返回值: fig (Figure object), ax (AxesSubplot object) """ ref_std = 1. # 创建极坐标系子图 fig = plt.figure(figsize=(8, 8)) ax = fig.add_subplot(polar=True) theta_grid = np.linspace(-np.pi / 2., np.pi / 2., num=90) r_grid = np.arange(0., max(np.max(stddevs)+.5, 2.), .1) # 添加网格线 for rs in [.5 * ref_std, 1.*ref_std]: ax.plot(theta_grid, [rs]*len(theta_grid), linestyle='--', color='k') # 填充颜色区域标记不同的RMSE范围 for rmse_val in range(1, int(max(r_grid))+1): thetas = np.arccos(corrs) radii = np.sqrt(ref_std**2 + stddevs**2 - 2*stddevs*ref_std*np.cos(thetas)) mask = (radii >= rmse_val-.5) & (radii < rmse_val+.5) ax.fill_between(thetas[mask], min(radii[mask]), max(radii[mask]), alpha=.2*(rmse_val%2+1)) # 标记轴刻度标签 labels = ['{:3.1f}'.format(x) for x in r_grid[::4]] ax.set_rgrids(r_grid[::4], angle=-67.5, fmt='%s' % '\n'.join(labels).strip().split('\n')) return fig, ax ``` 此代码片段展示了如何创建一个基础版本的泰勒图来对比多个数据集或模型的表现。实际应用时可以根据需求调整样式和布局以适应特定场景的要求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卿云阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值