如何从GPFlow的随机变分高斯过程(SVGP)中获取噪声方差
从GPFlow SVGP中提取高斯似然噪声方差的方法
同方差SVGP(默认场景)
你要的噪声方差是高斯似然的可训练参数,直接访问模型的似然属性即可获取:
# 获取参数张量 noise_var = model.likelihood.variance # 转为numpy数值 noise_var_np = model.likelihood.variance.numpy()
你对噪声方差的理解是正确的:观测值的预测方差 = 潜在函数预测方差 + 噪声方差,你可以通过预测接口验证这个关系:
# 预测潜在函数f的后验分布 f_mean, f_var = model.predict_f(X_test) # 预测观测值y的后验分布 y_mean, y_var = model.predict_y(X_test) # 同方差场景下,y_var - f_var 所有值都等于noise_var,误差为浮点精度导致
异方差SVGP(目标研究场景)
异方差场景下噪声方差不再是全局固定值,而是随输入X变化的变量,此时不能通过全局属性提取:
- 通用方法仍然适用:对任意输入点,计算
predict_y得到的y_var减去predict_f得到的f_var,结果就是该点对应的噪声方差 - 如果你使用的是GPFlow官方实现的异方差高斯似然,也可以直接调用似然的对应接口传入输入点获取逐点噪声方差
注意事项
- 如果训练时你手动将似然方差设置为不可训练(
model.likelihood.variance.trainable = False),提取到的数值就是你初始化时固定的数值,不会随训练更新 - GPFlow所有参数默认返回TensorFlow张量,需要转换为Python数值时调用
.numpy()方法即可 - 不要在异方差场景下尝试提取
model.likelihood.variance,该属性在异方差似然中不存在或无实际意义
内容的提问来源于stack exchange,提问作者lightImprint
相关产品推荐
相关产品推荐

