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

我发现了一个从头开始实现高斯过程的例子: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向量。

我希望有人能对此提供一些见解。


回答:

我发现了:这个实现是正确的。我只是没有意识到(在我看来)有时在机器学习环境中使用的模糊符号。所要实现的是一个距离矩阵,每个矩阵A的行向量需要与矩阵B的行向量进行比较,以推断协方差矩阵,而不是(如我所猜测的)两个矩阵/向量之间的直接距离。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注