用numpy实现各向同性平方指数内核

时间:2019-03-18 09:27:39

标签: numpy machine-learning scipy

我遇到了一个从零开始的高斯过程实现: http://krasserm.github.io/2018/03/19/gaussian-processes/

在那里,各向同性平方指数内核以numpy实现。看起来像: enter image description here

实现为:

def kernel(X1, X2, l=1.0, sigma_f=1.0):
    sqdist = np.sum(X1**2, 1).reshape(-1, 1) + np.sum(X2**2, 1) - 2 * np.dot(X1, X2.T)
    return sigma_f**2 * np.exp(-0.5 / l**2 * sqdist)

与Nando de Freitas的实施一致:https://www.cs.ubc.ca/~nando/540-2013/lectures/gp.py

但是,我不确定此实现如何与提供的公式匹配,特别是在sqdist部分中。以我的观点,这是错误的,但它可以工作(并提供与平方欧几里德距离的scipy的cdist相同的结果)。为什么我认为这是错误的?如果将两个矩阵的乘积相乘,则得到

enter image description here

等于向量x_i的标量矩阵或nxn矩阵,具体取决于您是否将x_i定义为列向量。但是,该实现会返回具有平方值的nx1向量。

我希望任何人都能对此有所了解。

1 个答案:

答案 0 :(得分:0)

我发现:实现是正确的。我只是不知道有时在ML上下文中使用的模糊表示法。要实现的是一个距离矩阵,并将矩阵A的每个行向量与矩阵B的行向量进行比较,以推断出协方差矩阵,而不是(正如我以某种方式猜测的那样)推断两个矩阵/向量之间的直接距离。 / p>