作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了一个从头开始实现的高斯过程: http://krasserm.github.io/2018/03/19/gaussian-processes/
在那里,各向同性平方指数核是在 numpy 中实现的。看起来像:
实现是:
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 相同的结果,具有平方欧氏距离)。为什么我觉得不对?如果你将两个矩阵的乘积相乘,你会得到
等于向量 x_i 的标量或 nxn 矩阵,具体取决于您是否将 x_i 定义为列向量。然而,该实现会返回一个带有平方值的 nx1 向量。
我希望任何人都能阐明这一点。
最佳答案
我发现:实现是正确的。我只是不知道有时在 ML 上下文中使用的模糊符号(在我看来)。要实现的是距离矩阵,矩阵 A 的每个行向量将与矩阵 B 的行向量进行比较以推断协方差矩阵,而不是(正如我以某种方式猜测的那样)两个矩阵/向量之间的直接距离。
关于numpy - 用numpy实现各向同性平方指数核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55218154/
我是一名优秀的程序员,十分优秀!