Реализация изотропного квадрата экспоненциального ядра с NumPy - PullRequest
0 голосов
/ 18 марта 2019

Я наткнулся на реализацию с нуля для гауссовских процессов: 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.На мой взгляд, это неправильно, но работает (и дает те же результаты, что и cdist Сципи с квадратом евклидова расстояния).Почему я думаю, что это неправильно?Если вы умножите умножение двух матриц, вы получите

enter image description here

, что равно скалярной или nxn-матрице для вектора x_i, в зависимости отот того, определяете ли вы x_i как вектор столбцов или нетОднако реализация возвращает вектор nx1 с квадратами.

Я надеюсь, что любой может пролить свет на это.

1 Ответ

0 голосов
/ 19 марта 2019

Я узнал: реализация верна.Я просто не знал о нечеткой записи (на мой взгляд), которая иногда используется в контекстах ML.То, что должно быть достигнуто, - это матрица расстояний, и каждый вектор строки матрицы A должен сравниваться с векторами строки матрицы B, чтобы вывести ковариационную матрицу, а не (как я как-то догадался) прямое расстояние между двумя матрицами / векторами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...