【发布时间】:2019-12-31 13:43:24
【问题描述】:
在tutorial on multiclass classification on the GPflow website 中,稀疏变分高斯过程 (SVGP) 用于 1D 玩具示例。与all other GPflow models 的情况一样,SVGP 模型有一个方法predict_y(self, Xnew),它返回Xnew 点处保留数据的均值和方差。
从教程中可以清楚地看出,从predict_y 解压缩的第一个参数是三个类别(单元格[7] 和[8])中每一个的后验预测概率,如第二个中的彩色线条所示下图的面板。然而,作者没有详细说明可以从predict_y 解包的第二个参数,这是预测的方差。在回归设置中,它的解释对我来说很清楚,因为在这种情况下,后验预测分布将是高斯分布。
但我不明白这里的解释是什么。特别是,我想知道如何使用这种度量来构建误差条,表示任何新数据点的类预测的不确定性。
我稍微修改了教程的代码,在下图中添加了一个附加面板:第三个面板以黑色显示最大标准偏差(从predict_y 获得的方差的平方根)。这显然是衡量不确定性的好方法,最高可能值为 0.5 也可能并非巧合,但我找不到它是如何计算的以及它代表什么。
完整的笔记本,所有代码here。
def plot(m):
f = plt.figure(figsize=(12,8))
a1 = f.add_axes([0.05, 0.05, 0.9, 0.5])
av = f.add_axes([0.05, 0.6, 0.9, 0.1])
a2 = f.add_axes([0.05, 0.75, 0.9, 0.1])
a3 = f.add_axes([0.05, 0.9, 0.9, 0.1])
xx = np.linspace(m.X.read_value().min()-0.3, m.X.read_value().max()+0.3, 200).reshape(-1,1)
mu, var = m.predict_f(xx)
mu, var = mu.copy(), var.copy()
p, v = m.predict_y(xx)
a3.set_xticks([])
a3.set_yticks([])
av.set_xticks([])
lty = ['-', '--', ':']
for i in range(m.likelihood.num_classes):
x = m.X.read_value()[m.Y.read_value().flatten()==i]
points, = a3.plot(x, x*0, '.')
color=points.get_color()
a1.fill_between(xx[:,0], mu[:,i] + 2*np.sqrt(var[:,i]), mu[:,i] - 2*np.sqrt(var[:,i]), alpha = 0.2)
a1.plot(xx, mu[:,i], color=color, lw=2)
a2.plot(xx, p[:,i], '-', color=color, lw=2)
av.plot(xx, np.sqrt(np.max(v[:,:], axis = 1)), c = "black", lw=2)
for ax in [a1, av, a2, a3]:
ax.set_xlim(xx.min(), xx.max())
a2.set_ylim(-0.1, 1.1)
a2.set_yticks([0, 1])
a2.set_xticks([])
plot(m)
【问题讨论】:
-
不是 programming 问题,因此这里可以说是题外话;更适合Cross Validated。
标签: python machine-learning classification gpflow