效果图

背景资料
笔者今天在查阅文献的过程中发现了这种表达方式,觉得表达清晰且有逼格,故想在自己的论文中使用。但是翻遍了中文网络却没有发现类似的教程。于是查阅了英文网络,发现在英文网络中,这种图叫做类激活图。
这种图像多用于深度学习领域用于分析网络结构中各层关注的敏感区域,以及一些气象地理等领域。但是并没有关于曲线的,所以在查资料的过程中非常艰难,后来在一个github仓库中发现了可以借鉴的方法。
参考代码
https://github.com/hfawaz/dl-4-tsc/blob/master/utils/utils.py
提炼后的代码
from scipy.interpolate import interp1d
import numpy as np
import matplotlib.pyplot as plt
max_length = 2000
def CAM(ts, cas):
minimum = np.min(cas)
cas = cas - minimum
cas = cas / max(cas)
cas = cas * 100
x = np.linspace(0, ts.shape[0] - 1, max_length, endpoint=True)
# linear interpolation to smooth
f = interp1d(range(ts.shape[0]), ts)
y = f(x)
f = interp1d(range(ts.shape[0]), cas)
cas = f(x).astype(int)
plt.scatter(x=x, y=y, c=cas, cmap='jet', marker='.', s=10, vmin=0, vmax=100, linewidths=0.0)
cbar = plt.colorbar()
plt.show()
plt.close()
解释
由于这段代码摘自时间序列相关的代码仓库,因此一些命名是TSC术语的缩写。
其中ts是序列的y值,而cas表示的就是序列的激活程度(可以理解为热力图中的热力)。
如果cas全为1,就会得到下图

理解
由于没有可以直接调用的函数,因此这段代码使用的是模拟的方式。
采用线性插值的方式将x、y序列拉长,虽然图像上看到的是有175个点,但是经过线性插值的拉长之后实际上有2000个点。tas序列表示颜色,一段经过拉长后长度为2000,大小在[0,100]的整数序列。
至于为什么要将175个点映射到2000个点,这是为了点状图中的点连起来,在视觉上被认为是平滑曲线。
1208

被折叠的 条评论
为什么被折叠?



